You've already forked FrameTour-BE
Compare commits
108 Commits
79ea08898b
...
master
Author | SHA1 | Date | |
---|---|---|---|
b0adf414d0 | |||
529b52f19c | |||
7a21fb01d0 | |||
f40837cd05 | |||
66334b8963 | |||
206696deb8 | |||
e8488d081f | |||
245387f280 | |||
6d8261ff25 | |||
7d6c87cc74 | |||
5f8c4fd6e6 | |||
53a09c1cab | |||
b0c8643e92 | |||
fae62ab7c2 | |||
5895d9c56f | |||
207fcb6414 | |||
c2ce6f91ed | |||
da3de2cc89 | |||
d245d09837 | |||
4d8236afa1 | |||
04e2ade669 | |||
cd4678120d | |||
cf9802f9ec | |||
a84b38dab5 | |||
e32f231a8f | |||
f9fcb06355 | |||
2ae0b3c4b3 | |||
3bd8face68 | |||
1841e43b85 | |||
a9655814ae | |||
c1b4bc8952 | |||
4bacdbe39a | |||
4273cda7cd | |||
ceba1e1b01 | |||
34dbc7d036 | |||
89e112e13a | |||
26a9be80f6 | |||
a4a6e9b5af | |||
0d5aabe317 | |||
5d2cf4fd31 | |||
80f4491836 | |||
115edc19fa | |||
bfd37fc764 | |||
ef0ba3ddb4 | |||
88cce9357d | |||
c50cd84af0 | |||
0c40cdad4e | |||
a41b87713f | |||
06a07514cc | |||
0292b754fe | |||
460b4ea42a | |||
7fd62e9aba | |||
3b3c768bbe | |||
1e993c6fd4 | |||
937c2b33d3 | |||
9b00b34a68 | |||
c01ff160c3 | |||
aaddbab2ab | |||
570267fd83 | |||
44e0f4933b | |||
ab2be3d56b | |||
077698cdaa | |||
b141b39e50 | |||
c366495805 | |||
870e79cde5 | |||
2bf8bb4df5 | |||
164e76495e | |||
d9360acb5f | |||
2e92cf5c91 | |||
ef978529ac | |||
6197f13e8e | |||
00f38c949c | |||
c45dffa0a0 | |||
f8f49891a5 | |||
7771f85618 | |||
7583c9e22e | |||
bb26fa43bf | |||
46a8b254b5 | |||
2e41f72e0e | |||
e9d80cecc7 | |||
5a4f6a5af3 | |||
8ef2ef4b15 | |||
3863c0d963 | |||
b36da6ff35 | |||
da20a44049 | |||
877f37b6f9 | |||
f6f847e41c | |||
8ac386242d | |||
3f11aadd75 | |||
d620bde5fa | |||
5a7c39429e | |||
7234e08616 | |||
45409ba1ab | |||
b5b9064f30 | |||
d0d4e37526 | |||
73d393b436 | |||
2835346447 | |||
75eb3732fc | |||
692df3a1a2 | |||
fe0397af8e | |||
f17e2364b6 | |||
59978b6be5 | |||
20d78cb487 | |||
4e9d6807d6 | |||
8af8bd6bcf | |||
248c06a30c | |||
dabdde33a6 | |||
c9a4116ed6 |
Jenkinsfilepom.xml
src
main
java
com
ycwl
basic
annotation
aspectj
biz
config
constant
controller
extern
mobile
AppFaceController.javaAppGoodsController.javaAppMemberController.javaAppOrderController.javaAppPrinterController.javaAppScenicController.javaAppVideoController.javaAppWxNotifyController.javaAppWxPayController.java
manage
pc
BrokerController.javaDeviceStatsController.javaFaceDetectLogController.javaFaceSampleController.javaPermissionController.javaPriceConfigController.javaScenicAccountController.javaScenicController.javaSourceController.javaTaskController.javaVideoController.java
proxy
task
viid
vpt
wvp
device
operator
starter
enums
exception
facebody
filter
image
watermark
interceptor
mapper
DeviceMapper.javaFaceMapper.javaFaceSampleMapper.javaPriceConfigMapper.javaPrintTaskMapper.javaPrinterMapper.javaScenicAccountMapper.javaScenicDeviceStatsMapper.javaSourceMapper.javaStatisticsMapper.javaTaskMapper.javaVideoMapper.java
model
jwt
mobile
goods
order
scenic
statistic
pc
adminUser
broker
device
face
faceSample
member
order
permission
price
printer
renderWorker
role
scenic
entity
req
resp
scenicDeviceStats
entity
req
resp
source
task
template
video
printer
snowFlake
task
wx
notify
pay
PayFactory.java
adapter
entity
CancelOrderRequest.javaCongMingPayConfig.javaCreateOrderRequest.javaCreateOrderResponse.javaPayResponse.javaRefundOrderRequest.javaRefundOrderResponse.javaRefundResponse.javaWxMpPayConfig.java
enums
exceptions
starter
printer
ticket
profitsharing
repository
DeviceRepository.javaFaceRepository.javaPriceRepository.javaRenderWorkerRepository.javaScenicRepository.javaTemplateRepository.javaVideoRepository.javaVideoTaskRepository.java
service
mobile
AppMemberService.javaAppScenicService.javaAppStatisticsService.javaGoodsService.javaWxPayService.java
impl
pc
DeviceStatsService.javaFaceSampleService.javaFaceService.javaOrderService.javaPermissionService.javaPriceConfigService.javaScenicAccountService.javaScenicService.java
impl
AdminUserServiceImpl.javaDeviceServiceImpl.javaDeviceStatsServiceImpl.javaFaceSampleServiceImpl.javaFaceServiceImpl.javaOrderServiceImpl.javaPermissionServiceImpl.javaPriceConfigServiceImpl.javaRenderWorkerServiceImpl.javaRoleServiceImpl.javaScenicAccountServiceImpl.javaScenicServiceImpl.javaSourceServiceImpl.javaTemplateServiceImpl.java
printer
task
stats
biz
controller
dto
entity
interceptor
mapper
service
util
storage
StorageFactory.java
adapters
AStorageAdapter.javaAliOssAdapter.javaAwsOssAdapter.javaIStorageAdapter.javaLocalStorageAdapter.java
entity
enums
task
DownloadNotificationTasker.javaDynamicTaskGenerator.javaFaceCleaner.javaScenicStatsTask.javaVideoPieceGetter.javaVideoTaskGenerator.java
utils
ApiConst.javaApiResponse.javaBeanCopierUtils.javaBigDecimalUtil.javaCommonUtil.javaCustomBigDecimalUtils.javaDateUtils.javaHttpServiceUtil.javaImageUtils.javaIpUtils.javaJwtAnalysisUtil.javaJwtTokenUtil.javaObjectConvertUtils.javaRedisCacheOperationUtils.javaRsaKeyUtil.javaSnowFlakeUtil.javaSslUtil.javaStringUtil.javaVideoReUploader.javaWXPayUtil.javaWxMpUtil.java
xss
resources
application-dev.ymlapplication-prod.yml
cert
jar
logback-spring-prod.xmllogback-spring.xmlmapper
BrokerMapper.xmlBrokerRecordMapper.xmlDeviceMapper.xmlFaceMapper.xmlFaceSampleMapper.xmlOrderMapper.xmlPermissionMapper.xmlPriceConfigMapper.xmlPrintTaskMapper.xmlPrinterMapper.xmlRenderWorkerMapper.xmlScenicAccountMapper.xmlScenicDeviceStatsMapper.xmlScenicMapper.xmlSourceMapper.xmlStatisticsMapper.xmlTaskMapper.xmlVideoMapper.xml
test
java
com
ycwl
basic
20
Jenkinsfile
vendored
Normal file
20
Jenkinsfile
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
pipeline {
|
||||||
|
agent any
|
||||||
|
tools {
|
||||||
|
jdk 'openjdk21'
|
||||||
|
maven 'Default'
|
||||||
|
}
|
||||||
|
stages {
|
||||||
|
stage('Build') {
|
||||||
|
steps {
|
||||||
|
sh 'mvn clean package -DskipTests=true'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
archiveArtifacts artifacts: 'target/*.jar', allowEmptyArchive: true, onlyIfSuccessful: true
|
||||||
|
publishGiteaAssets assets: 'target/*.jar', followSymlinks: false, onlyIfSuccessful: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
45
pom.xml
45
pom.xml
@ -5,38 +5,54 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.7.18</version>
|
<version>3.3.5</version>
|
||||||
<relativePath/> <!-- lookup parent from repository -->
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>com.ycwl</groupId>
|
<groupId>com.ycwl</groupId>
|
||||||
<artifactId>basic</artifactId>
|
<artifactId>basic21</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<name>liuying</name>
|
<name>liuying</name>
|
||||||
<description>流影</description>
|
<description>流影</description>
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>8</java.version>
|
<java.version>21</java.version>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.target>21</maven.compiler.target>
|
||||||
<mybatisplus.boot.starter.version>3.4.0</mybatisplus.boot.starter.version>
|
|
||||||
<hutool-all.version>5.8.24</hutool-all.version>
|
<hutool-all.version>5.8.24</hutool-all.version>
|
||||||
<mysql-connector.version>8.0.33</mysql-connector.version>
|
<mysql-connector.version>8.0.33</mysql-connector.version>
|
||||||
<fastjson.version>1.2.83</fastjson.version>
|
<fastjson.version>1.2.83</fastjson.version>
|
||||||
<knife4j-spring-boot-starter.version>2.0.7</knife4j-spring-boot-starter.version>
|
<knife4j-spring-boot-starter.version>2.0.7</knife4j-spring-boot-starter.version>
|
||||||
<pagehelper.version>5.3.1</pagehelper.version>
|
<pagehelper.version>5.3.1</pagehelper.version>
|
||||||
<tomcat.version>9.0.102</tomcat.version>
|
|
||||||
<!--跳过单元测试-->
|
<!--跳过单元测试-->
|
||||||
<skipTests>true</skipTests>
|
<skipTests>true</skipTests>
|
||||||
</properties>
|
</properties>
|
||||||
|
<!-- OpenTelemetry -->
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.opentelemetry.instrumentation</groupId>
|
||||||
|
<artifactId>opentelemetry-instrumentation-bom</artifactId>
|
||||||
|
<version>2.16.0</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<!-- 添加 jakarta.servlet-api 依赖 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.servlet</groupId>
|
||||||
|
<artifactId>jakarta.servlet-api</artifactId>
|
||||||
|
<version>6.0.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<!-- 微信支付 -->
|
<!-- 微信支付 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.wechatpay-apiv3</groupId>
|
<groupId>com.github.wechatpay-apiv3</groupId>
|
||||||
<artifactId>wechatpay-java</artifactId>
|
<artifactId>wechatpay-java</artifactId>
|
||||||
<version>0.2.12</version>
|
<version>0.2.14</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- 引入aop相关 -->
|
<!-- 引入aop相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -84,8 +100,8 @@
|
|||||||
<!--mybatis plus和springboot整合-->
|
<!--mybatis plus和springboot整合-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
||||||
<version>${mybatisplus.boot.starter.version}</version>
|
<version>3.5.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- 引入lombok工具 -->
|
<!-- 引入lombok工具 -->
|
||||||
@ -179,7 +195,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.aliyun</groupId>
|
<groupId>com.aliyun</groupId>
|
||||||
<artifactId>aliyun-java-sdk-core</artifactId>
|
<artifactId>aliyun-java-sdk-core</artifactId>
|
||||||
<version>4.6.1</version>
|
<version>4.6.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.aliyun</groupId>
|
<groupId>com.aliyun</groupId>
|
||||||
@ -193,6 +209,11 @@
|
|||||||
<artifactId>java-sdk</artifactId>
|
<artifactId>java-sdk</artifactId>
|
||||||
<version>4.16.19</version>
|
<version>4.16.19</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.opentelemetry.instrumentation</groupId>
|
||||||
|
<artifactId>opentelemetry-spring-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
package com.ycwl.basic.annotation;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target(value = {ElementType.METHOD})
|
|
||||||
public @interface RequestToFile {
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
package com.ycwl.basic.aspectj;
|
|
||||||
|
|
||||||
import com.ycwl.basic.annotation.RequestToFile;
|
|
||||||
import com.ycwl.basic.config.CachedBodyHttpServletRequest;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.aspectj.lang.ProceedingJoinPoint;
|
|
||||||
import org.aspectj.lang.annotation.After;
|
|
||||||
import org.aspectj.lang.annotation.Around;
|
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
|
||||||
import org.aspectj.lang.annotation.Pointcut;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
|
||||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Aspect
|
|
||||||
@Component
|
|
||||||
@Slf4j
|
|
||||||
public class HttpSaver {
|
|
||||||
|
|
||||||
@Pointcut("@annotation(com.ycwl.basic.annotation.RequestToFile)")
|
|
||||||
public void requestToFilePointCut() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@After("requestToFilePointCut()")
|
|
||||||
public void requestToFile() throws IOException {
|
|
||||||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
|
||||||
if (attributes == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
HttpServletRequest request = attributes.getRequest();
|
|
||||||
saveRequestToFile(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void saveRequestToFile(HttpServletRequest request) throws IOException {
|
|
||||||
File file = new File("./request/"+System.currentTimeMillis()+".http");
|
|
||||||
// 写入文件
|
|
||||||
if (!file.getParentFile().exists()) {
|
|
||||||
file.getParentFile().mkdirs();
|
|
||||||
}
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.createNewFile();
|
|
||||||
}
|
|
||||||
try (java.io.FileWriter writer = new java.io.FileWriter(file, true)) {
|
|
||||||
writer.append(request.getMethod()).append(" ").append(request.getRequestURL());
|
|
||||||
String queryString = request.getQueryString();
|
|
||||||
if (queryString != null) {
|
|
||||||
writer.append("?").append(queryString);
|
|
||||||
}
|
|
||||||
writer.append("\r\n");
|
|
||||||
Enumeration<String> headerNames = request.getHeaderNames();
|
|
||||||
while (headerNames.hasMoreElements()) {
|
|
||||||
String headerName = headerNames.nextElement();
|
|
||||||
writer.append(headerName).append(": ").append(request.getHeader(headerName)).append("\r\n");
|
|
||||||
}
|
|
||||||
writer.append("\r\n");
|
|
||||||
// 获取body
|
|
||||||
CachedBodyHttpServletRequest cachedRequest = (CachedBodyHttpServletRequest) request;
|
|
||||||
writer.append(new String(cachedRequest.getCachedBody()));
|
|
||||||
writer.append("\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -13,8 +13,8 @@ import org.springframework.stereotype.Component;
|
|||||||
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -53,7 +53,11 @@ public class BrokerBiz {
|
|||||||
expireDay = scenicConfig.getSampleStoreDay();
|
expireDay = scenicConfig.getSampleStoreDay();
|
||||||
}
|
}
|
||||||
List<Long> brokerIdList = statisticsMapper.getBrokerIdListForUser(order.getMemberId(), DateUtil.offsetDay(DateUtil.beginOfDay(order.getCreateAt()), -expireDay), order.getCreateAt());
|
List<Long> brokerIdList = statisticsMapper.getBrokerIdListForUser(order.getMemberId(), DateUtil.offsetDay(DateUtil.beginOfDay(order.getCreateAt()), -expireDay), order.getCreateAt());
|
||||||
Long directBrokerId = brokerIdList.get(0);
|
if (brokerIdList == null || brokerIdList.isEmpty()) {
|
||||||
|
log.info("用户与推客无关,订单ID:{}", orderId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Long directBrokerId = brokerIdList.getFirst();
|
||||||
List<BrokerRespVO> brokerInfoList = brokerIdList.stream().map(brokerId -> {
|
List<BrokerRespVO> brokerInfoList = brokerIdList.stream().map(brokerId -> {
|
||||||
BrokerRespVO broker = brokerMapper.getById(brokerId);
|
BrokerRespVO broker = brokerMapper.getById(brokerId);
|
||||||
if (broker == null) {
|
if (broker == null) {
|
||||||
@ -77,7 +81,7 @@ public class BrokerBiz {
|
|||||||
if (brokerInfoList.size() == 1) {
|
if (brokerInfoList.size() == 1) {
|
||||||
// 直接算佣金
|
// 直接算佣金
|
||||||
String reason = "单人提成:";
|
String reason = "单人提成:";
|
||||||
BrokerRespVO broker = brokerInfoList.get(0);
|
BrokerRespVO broker = brokerInfoList.getFirst();
|
||||||
BrokerRecord brokerRecord = new BrokerRecord();
|
BrokerRecord brokerRecord = new BrokerRecord();
|
||||||
brokerRecord.setBrokerId(broker.getId());
|
brokerRecord.setBrokerId(broker.getId());
|
||||||
brokerRecord.setOrderId(orderId);
|
brokerRecord.setOrderId(orderId);
|
||||||
@ -95,7 +99,7 @@ public class BrokerBiz {
|
|||||||
brokerRecord.setReason(reason);
|
brokerRecord.setReason(reason);
|
||||||
brokerRecordList.add(brokerRecord);
|
brokerRecordList.add(brokerRecord);
|
||||||
} else {
|
} else {
|
||||||
BrokerRespVO broker = brokerInfoList.get(0);
|
BrokerRespVO broker = brokerInfoList.getFirst();
|
||||||
BigDecimal realRate = broker.getBrokerRate();
|
BigDecimal realRate = broker.getBrokerRate();
|
||||||
BigDecimal brokerPrice = order.getPayPrice().multiply(realRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN);
|
BigDecimal brokerPrice = order.getPayPrice().multiply(realRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN);
|
||||||
// todo 需要计算实际提成比例
|
// todo 需要计算实际提成比例
|
||||||
@ -141,9 +145,7 @@ public class BrokerBiz {
|
|||||||
brokerRecordList.add(brokerRecord);
|
brokerRecordList.add(brokerRecord);
|
||||||
}
|
}
|
||||||
revokeOrder(orderId);
|
revokeOrder(orderId);
|
||||||
brokerRecordList.forEach(brokerRecord -> {
|
brokerRecordList.forEach(brokerRecordMapper::add);
|
||||||
brokerRecordMapper.add(brokerRecord);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void revokeOrder(Long orderId) {
|
public void revokeOrder(Long orderId) {
|
||||||
|
@ -32,8 +32,10 @@ import com.ycwl.basic.repository.SourceRepository;
|
|||||||
import com.ycwl.basic.repository.TemplateRepository;
|
import com.ycwl.basic.repository.TemplateRepository;
|
||||||
import com.ycwl.basic.repository.VideoRepository;
|
import com.ycwl.basic.repository.VideoRepository;
|
||||||
import com.ycwl.basic.repository.VideoTaskRepository;
|
import com.ycwl.basic.repository.VideoTaskRepository;
|
||||||
|
import com.ycwl.basic.service.printer.PrinterService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@ -74,6 +76,9 @@ public class OrderBiz {
|
|||||||
private BrokerBiz brokerBiz;
|
private BrokerBiz brokerBiz;
|
||||||
@Autowired
|
@Autowired
|
||||||
private CouponBiz couponBiz;
|
private CouponBiz couponBiz;
|
||||||
|
@Autowired
|
||||||
|
@Lazy
|
||||||
|
private PrinterService printerService;
|
||||||
|
|
||||||
public PriceObj queryPrice(Long scenicId, int goodsType, Long goodsId) {
|
public PriceObj queryPrice(Long scenicId, int goodsType, Long goodsId) {
|
||||||
PriceObj priceObj = new PriceObj();
|
PriceObj priceObj = new PriceObj();
|
||||||
@ -161,15 +166,11 @@ public class OrderBiz {
|
|||||||
}
|
}
|
||||||
// 免费送逻辑,之前已经赠送了的
|
// 免费送逻辑,之前已经赠送了的
|
||||||
if (!isBuy) {
|
if (!isBuy) {
|
||||||
switch (goodsType) {
|
isBuy = switch (goodsType) {
|
||||||
case 0:
|
case 0 -> videoRepository.getUserIsBuy(userId, goodsId);
|
||||||
isBuy = videoRepository.getUserIsBuy(userId, goodsId);
|
case 1, 2 -> sourceRepository.getUserIsBuy(userId, goodsType, goodsId);
|
||||||
break;
|
default -> false;
|
||||||
case 1:
|
};
|
||||||
case 2:
|
|
||||||
isBuy = sourceRepository.getUserIsBuy(userId, goodsType, goodsId);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
OrderEntity orderEntity = orderRepository.getUserBuyItem(userId, goodsType, goodsId);
|
OrderEntity orderEntity = orderRepository.getUserBuyItem(userId, goodsType, goodsId);
|
||||||
if (orderEntity != null) {
|
if (orderEntity != null) {
|
||||||
@ -237,6 +238,8 @@ public class OrderBiz {
|
|||||||
case 1: // 视频原素材
|
case 1: // 视频原素材
|
||||||
case 2: // 照片原素材
|
case 2: // 照片原素材
|
||||||
sourceRepository.setUserIsBuyItem(order.getMemberId(), item.getGoodsType(), item.getGoodsId(), order.getId());
|
sourceRepository.setUserIsBuyItem(order.getMemberId(), item.getGoodsType(), item.getGoodsId(), order.getId());
|
||||||
|
case 3:
|
||||||
|
printerService.setUserIsBuyItem(order.getMemberId(), item.getGoodsId(), order.getId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
orderRepository.clearOrderCache(orderId); // 更新完了,清理下
|
orderRepository.clearOrderCache(orderId); // 更新完了,清理下
|
||||||
@ -250,7 +253,7 @@ public class OrderBiz {
|
|||||||
//商品创建时间
|
//商品创建时间
|
||||||
Date goodsCreateTime = new Date();
|
Date goodsCreateTime = new Date();
|
||||||
if (!orderDetail.getOrderItemList().isEmpty()) {
|
if (!orderDetail.getOrderItemList().isEmpty()) {
|
||||||
OrderItemVO orderItemVO = orderDetail.getOrderItemList().get(0);
|
OrderItemVO orderItemVO = orderDetail.getOrderItemList().getFirst();
|
||||||
switch (orderItemVO.getGoodsType()) {
|
switch (orderItemVO.getGoodsType()) {
|
||||||
case 0:
|
case 0:
|
||||||
VideoEntity video = videoRepository.getVideo(orderItemVO.getGoodsId());
|
VideoEntity video = videoRepository.getVideo(orderItemVO.getGoodsId());
|
||||||
|
@ -112,7 +112,7 @@ public class TaskStatusBiz {
|
|||||||
int faceCutStatus = getFaceCutStatus(faceId);
|
int faceCutStatus = getFaceCutStatus(faceId);
|
||||||
if (faceCutStatus != 1) {
|
if (faceCutStatus != 1) {
|
||||||
// 正在切片
|
// 正在切片
|
||||||
if (templateBiz.determineTemplateCanGenerate(templateList.get(0).getId(), faceId, false)) {
|
if (templateBiz.determineTemplateCanGenerate(templateList.getFirst().getId(), faceId, false)) {
|
||||||
response.setStatus(2);
|
response.setStatus(2);
|
||||||
} else {
|
} else {
|
||||||
response.setStatus(0);
|
response.setStatus(0);
|
||||||
|
@ -107,7 +107,7 @@ public class TemplateBiz {
|
|||||||
List<SourceEntity> sourceEntities = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId);
|
List<SourceEntity> sourceEntities = sourceMapper.listVideoByScenicFaceRelation(face.getScenicId(), faceId);
|
||||||
count = sourceEntities.stream()
|
count = sourceEntities.stream()
|
||||||
.map(SourceEntity::getDeviceId)
|
.map(SourceEntity::getDeviceId)
|
||||||
.filter(deviceId -> deviceId != null) // 添加对 null 的检查
|
.filter(Objects::nonNull) // 添加对 null 的检查
|
||||||
.distinct()
|
.distinct()
|
||||||
.filter(deviceId -> placeholderList.contains(deviceId.toString()))
|
.filter(deviceId -> placeholderList.contains(deviceId.toString()))
|
||||||
.count();
|
.count();
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
package com.ycwl.basic.config;
|
|
||||||
|
|
||||||
import javax.servlet.ReadListener;
|
|
||||||
import javax.servlet.ServletInputStream;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
|
|
||||||
private final byte[] cachedBody;
|
|
||||||
|
|
||||||
public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException {
|
|
||||||
super(request);
|
|
||||||
// 缓存请求体内容
|
|
||||||
InputStream requestInputStream = request.getInputStream();
|
|
||||||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
int read;
|
|
||||||
while ((read = requestInputStream.read(buffer)) != -1) {
|
|
||||||
byteArrayOutputStream.write(buffer, 0, read);
|
|
||||||
}
|
|
||||||
cachedBody = byteArrayOutputStream.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ServletInputStream getInputStream() {
|
|
||||||
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(cachedBody);
|
|
||||||
return new ServletInputStream() {
|
|
||||||
@Override
|
|
||||||
public int read() {
|
|
||||||
return byteArrayInputStream.read();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isFinished() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isReady() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setReadListener(ReadListener readListener) {
|
|
||||||
// 不需要实现
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BufferedReader getReader() {
|
|
||||||
return new BufferedReader(new InputStreamReader(this.getInputStream()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] getCachedBody() {
|
|
||||||
return cachedBody;
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,8 +3,7 @@ package com.ycwl.basic.config;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||||
import com.ycwl.basic.interceptor.AuthInterceptor;
|
import com.ycwl.basic.interceptor.AuthInterceptor;
|
||||||
import com.ycwl.basic.xss.XssJacksonDeserializer;
|
import com.ycwl.basic.stats.interceptor.StatsInterceptor;
|
||||||
import com.ycwl.basic.xss.XssJacksonSerializer;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@ -29,13 +28,17 @@ public class WebMvcConfig implements WebMvcConfigurer {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AuthInterceptor authInterceptor;
|
private AuthInterceptor authInterceptor;
|
||||||
|
@Autowired
|
||||||
|
private StatsInterceptor statsInterceptor;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addInterceptors(InterceptorRegistry registry) {
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
registry.addInterceptor(authInterceptor)
|
registry.addInterceptor(authInterceptor)
|
||||||
// 拦截除指定接口外的所有请求,通过判断 注解 来决定是否需要做登录验证
|
// 拦截除指定接口外的所有请求,通过判断 注解 来决定是否需要做登录验证
|
||||||
.addPathPatterns("/**")
|
.addPathPatterns("/**")
|
||||||
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/api-docs", "/doc.html/**", "/error", "/csrf", "/");
|
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/api-docs", "/doc.html/**", "/error", "/");
|
||||||
|
registry.addInterceptor(statsInterceptor)
|
||||||
|
.addPathPatterns("/api/mobile/**");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,25 +81,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public WebMvcConfigurer createConvert() {
|
|
||||||
return new WebMvcConfigurer() {
|
|
||||||
@Override
|
|
||||||
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
|
|
||||||
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
|
|
||||||
ObjectMapper mapper = builder.build();
|
|
||||||
/*注入自定义的序列化工具,将RequestBody的参数进行转译后传输*/
|
|
||||||
SimpleModule simpleModule = new SimpleModule();
|
|
||||||
// XSS序列化
|
|
||||||
simpleModule.addSerializer(String.class, new XssJacksonSerializer());
|
|
||||||
simpleModule.addDeserializer(String.class, new XssJacksonDeserializer());
|
|
||||||
mapper.registerModule(simpleModule);
|
|
||||||
converters.add(new MappingJackson2HttpMessageConverter(mapper));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private StringHttpMessageConverter stringHttpMessageConverter;
|
private StringHttpMessageConverter stringHttpMessageConverter;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
package com.ycwl.basic.config;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信小程序配置
|
|
||||||
*
|
|
||||||
* @author songmingsong
|
|
||||||
**/
|
|
||||||
@Data
|
|
||||||
@Component
|
|
||||||
@ConfigurationProperties(prefix = "wx")
|
|
||||||
public class WechatConfig {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 公众号的appId
|
|
||||||
*/
|
|
||||||
private String appId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 公众号的密钥
|
|
||||||
*/
|
|
||||||
private String appSecret;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 小程序的AppId
|
|
||||||
*/
|
|
||||||
private String miniProgramAppId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 小程序的secret
|
|
||||||
*/
|
|
||||||
private String miniProgramSecret;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 申请openid授权
|
|
||||||
*/
|
|
||||||
private String grandType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商户号
|
|
||||||
*/
|
|
||||||
private String mchId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商户证书序列号
|
|
||||||
*/
|
|
||||||
private String mchSerialNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 支付回调接口地址
|
|
||||||
*/
|
|
||||||
private String payNotifyUrl;
|
|
||||||
/**
|
|
||||||
* 退款回调接口地址
|
|
||||||
*/
|
|
||||||
private String refundNotifyUrl;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商户API私钥路径
|
|
||||||
*/
|
|
||||||
private String keyPath;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 商户APIV3密钥
|
|
||||||
*/
|
|
||||||
private String apiV3;
|
|
||||||
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
package com.ycwl.basic.constant;
|
package com.ycwl.basic.constant;
|
||||||
|
|
||||||
import com.ycwl.basic.utils.StringUtil;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -10,29 +10,29 @@ import java.util.Map;
|
|||||||
@Data
|
@Data
|
||||||
public class BaseContextHandler {
|
public class BaseContextHandler {
|
||||||
|
|
||||||
public static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal();
|
public static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<>();
|
||||||
|
|
||||||
public BaseContextHandler() {
|
public BaseContextHandler() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void set(String key, Object value) {
|
public static void set(String key, Object value) {
|
||||||
Object map;
|
Map<String, Object> map;
|
||||||
if ((map = (Map) threadLocal.get()) == null) {
|
if ((map = threadLocal.get()) == null) {
|
||||||
map = new HashMap();
|
map = new HashMap<>();
|
||||||
threadLocal.set((Map<String, Object>) map);
|
threadLocal.set(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
((Map) map).put(key, value);
|
map.put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Object get(String key) {
|
public static Object get(String key) {
|
||||||
Object map;
|
Map<String, Object> map;
|
||||||
if ((map = (Map) threadLocal.get()) == null) {
|
if ((map = threadLocal.get()) == null) {
|
||||||
map = new HashMap();
|
map = new HashMap<>();
|
||||||
threadLocal.set((Map<String, Object>) map);
|
threadLocal.set(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((Map) map).get(key);
|
return (map).get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setToken(String token) {
|
public static void setToken(String token) {
|
||||||
@ -40,7 +40,13 @@ public class BaseContextHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getToken() {
|
public static String getToken() {
|
||||||
return StringUtil.a(get("currentUserToken"));
|
if (get("currentUserToken") == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(get("currentUserToken").toString())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return get("currentUserToken").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getAccount() {
|
public static String getAccount() {
|
||||||
|
13
src/main/java/com/ycwl/basic/constant/JwtRoleConstant.java
Normal file
13
src/main/java/com/ycwl/basic/constant/JwtRoleConstant.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package com.ycwl.basic.constant;
|
||||||
|
|
||||||
|
public enum JwtRoleConstant {
|
||||||
|
MERCHANT("merchant"),
|
||||||
|
ADMIN("admin"),
|
||||||
|
APP_USER("app_user");
|
||||||
|
|
||||||
|
public final String type;
|
||||||
|
|
||||||
|
JwtRoleConstant(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
}
|
@ -5,4 +5,6 @@ public class StorageConstant {
|
|||||||
public static final String VIDEO_PIECE_PATH = "source_video";
|
public static final String VIDEO_PIECE_PATH = "source_video";
|
||||||
public static final String PHOTO_PATH = "source_photo";
|
public static final String PHOTO_PATH = "source_photo";
|
||||||
public static final String PHOTO_WATERMARKED_PATH = "photo_w";
|
public static final String PHOTO_WATERMARKED_PATH = "photo_w";
|
||||||
|
public static final String VIID_FACE = "viid_face";
|
||||||
|
public static final String USER_FACE = "user_face";
|
||||||
}
|
}
|
||||||
|
@ -1,126 +0,0 @@
|
|||||||
package com.ycwl.basic.constant;
|
|
||||||
|
|
||||||
import com.wechat.pay.java.service.payments.model.Transaction;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>@description: 微信常量 </p>
|
|
||||||
* <p>@author: songmingsong </p>
|
|
||||||
**/
|
|
||||||
public class WeiXinConstant {
|
|
||||||
|
|
||||||
private static final Map<Transaction.TradeStateEnum, String> STATE_DESCRIPTION_MAP = new HashMap<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.SUCCESS, "SUCCESS");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.REFUND, "REFUND");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.NOTPAY, "NOTPAY");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.CLOSED, "CLOSED");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.REVOKED, "REVOKED");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.USERPAYING, "USERPAYING");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.PAYERROR, "PAYERROR");
|
|
||||||
STATE_DESCRIPTION_MAP.put(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum.ACCEPT, "ACCEPT");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getDescriptionState(com.wechat.pay.java.service.payments.model.Transaction.TradeStateEnum state) {
|
|
||||||
return STATE_DESCRIPTION_MAP.getOrDefault(state, "未知状态");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Map<com.wechat.pay.java.service.payments.model.Transaction.TradeTypeEnum, String> STATE_DESCRIPTION_MAP_TYPE = new HashMap<>();
|
|
||||||
|
|
||||||
static {
|
|
||||||
STATE_DESCRIPTION_MAP_TYPE.put(Transaction.TradeTypeEnum.JSAPI, "JSAPI");
|
|
||||||
STATE_DESCRIPTION_MAP_TYPE.put(Transaction.TradeTypeEnum.NATIVE, "NATIVE");
|
|
||||||
STATE_DESCRIPTION_MAP_TYPE.put(Transaction.TradeTypeEnum.APP, "APP");
|
|
||||||
STATE_DESCRIPTION_MAP_TYPE.put(Transaction.TradeTypeEnum.MICROPAY, "MICROPAY");
|
|
||||||
STATE_DESCRIPTION_MAP_TYPE.put(Transaction.TradeTypeEnum.MWEB, "MWEB");
|
|
||||||
STATE_DESCRIPTION_MAP_TYPE.put(Transaction.TradeTypeEnum.FACEPAY, "FACEPAY");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getDescriptionType(Transaction.TradeTypeEnum type) {
|
|
||||||
return STATE_DESCRIPTION_MAP_TYPE.getOrDefault(type, "未知类型");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 公众号模板地址
|
|
||||||
*/
|
|
||||||
public static final String PUBLIC_ACCOUNT_TEMPLATE =
|
|
||||||
"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
|
|
||||||
/**
|
|
||||||
* 获取微信用户基本信息地址
|
|
||||||
*/
|
|
||||||
public static final String WECHAT_OAUTH_ACCESS_TOKEN = "https://api.weixin.qq.com/sns/oauth2/access_token";
|
|
||||||
/**
|
|
||||||
* 获取ACCESS_TOKEN
|
|
||||||
*/
|
|
||||||
public static final String ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
|
|
||||||
/**
|
|
||||||
* 登录凭证校验
|
|
||||||
*/
|
|
||||||
public static final String GET_OPEN_ID = "https://api.weixin.qq.com/sns/jscode2session";
|
|
||||||
/**
|
|
||||||
* 获取小程序地址
|
|
||||||
*/
|
|
||||||
public static final String GET_MINI_QRCODE = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s";
|
|
||||||
/**
|
|
||||||
* 获取用户基本信息
|
|
||||||
*/
|
|
||||||
public static final String GET_USER_BASIC_INFO = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN";
|
|
||||||
/**
|
|
||||||
* 获取包含请求参数ACCESS_TOKEN
|
|
||||||
*/
|
|
||||||
public static final String ACCESS_TOKEN_WITH_PARAM = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
|
|
||||||
/**
|
|
||||||
* 获取小程序 URL Link
|
|
||||||
*/
|
|
||||||
public static final String GENERATE_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=%s";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 发送模板消息
|
|
||||||
*/
|
|
||||||
public static final String MESSAGE_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=";
|
|
||||||
|
|
||||||
/*-----------------------------*/
|
|
||||||
/* */
|
|
||||||
/* 支付相关 */
|
|
||||||
/* */
|
|
||||||
/*-----------------------------*/
|
|
||||||
/**
|
|
||||||
* 退款链接
|
|
||||||
*/
|
|
||||||
public static final String REFUNDS_URL = "https://api.mch.weixin.qq.com/v3/refund/domestic/refunds";
|
|
||||||
public static final String REFUNDS_URi = "/v3/refund/domestic/refunds/";
|
|
||||||
/**
|
|
||||||
* 其他
|
|
||||||
*/
|
|
||||||
public static final String WECHATPAY_STATUS = "status";
|
|
||||||
public static final String WECHATPAY_SUCCESS = "SUCCESS";
|
|
||||||
public static final String WECHATPAY_PROCESSING = "PROCESSING";
|
|
||||||
public static final String WECHATPAY_OUT_TRADE_NO = "out_trade_no";
|
|
||||||
public static final String WECHATPAY_OUT_REFUND_NO = "out_refund_no";
|
|
||||||
public static final String WECHATPAY_REFUND = "refund";
|
|
||||||
public static final String WECHATPAY_TOTAL = "total";
|
|
||||||
public static final String WECHATPAY_CURRENCY = "currency";
|
|
||||||
public static final String WECHATPAY_CURRENCY_CNY = "CNY";
|
|
||||||
public static final String WECHATPAY_AMOUNT = "amount";
|
|
||||||
public static final String WECHATPAY_NOTIFY_URL = "notify_url";
|
|
||||||
|
|
||||||
public static final String REFUNDS_RESOURCE = "resource";
|
|
||||||
public static final String REFUNDS_CIPHERTEXT = "ciphertext";
|
|
||||||
public static final String REFUNDS_NONCE = "nonce";
|
|
||||||
public static final String REFUNDS_REFUND_STATUS = "refund_status";
|
|
||||||
public static final String REFUNDS_ASSOCIATED_DATA = "associated_data";
|
|
||||||
public static final String WECHAT_ERRCODE = "errcode";
|
|
||||||
public static final String WECHAT_ERRMSG = "errmsg";
|
|
||||||
/**
|
|
||||||
* 退款的token的SCHEMA
|
|
||||||
*/
|
|
||||||
public static final String REFUNDS_SCHEMA = "Wechatpay-Signature-Type "; // 注意有一个空格
|
|
||||||
/**
|
|
||||||
* 支付请求头
|
|
||||||
*/
|
|
||||||
public static final String WECHATPAY_SIGNATURE_TYPE = "Wechatpay-Signature-Type";
|
|
||||||
}
|
|
@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
@ -55,8 +55,6 @@ public class LyCompatibleController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private FaceMapper faceMapper;
|
private FaceMapper faceMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AppScenicService appScenicService;
|
|
||||||
@Autowired
|
|
||||||
private VideoRepository videoRepository;
|
private VideoRepository videoRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private VideoMapper videoMapper;
|
private VideoMapper videoMapper;
|
||||||
@ -68,7 +66,7 @@ public class LyCompatibleController {
|
|||||||
@PostMapping("sendPhoto")
|
@PostMapping("sendPhoto")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public R sendPhoto(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
|
public R sendPhoto(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
|
||||||
Map<String, String> headersMap = new HashMap<String, String>();
|
Map<String, String> headersMap = new HashMap<>();
|
||||||
Enumeration<String> headerNames = request.getHeaderNames();
|
Enumeration<String> headerNames = request.getHeaderNames();
|
||||||
while (headerNames.hasMoreElements()) {
|
while (headerNames.hasMoreElements()) {
|
||||||
String key = (String) headerNames.nextElement();
|
String key = (String) headerNames.nextElement();
|
||||||
@ -125,7 +123,7 @@ public class LyCompatibleController {
|
|||||||
@RequestMapping("getIsVideo")
|
@RequestMapping("getIsVideo")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public R getIsVideo(HttpServletRequest request) {
|
public R getIsVideo(HttpServletRequest request) {
|
||||||
Map<String, String> headersMap = new HashMap<String, String>();
|
Map<String, String> headersMap = new HashMap<>();
|
||||||
Enumeration<String> headerNames = request.getHeaderNames();
|
Enumeration<String> headerNames = request.getHeaderNames();
|
||||||
while (headerNames.hasMoreElements()) {
|
while (headerNames.hasMoreElements()) {
|
||||||
String key = (String) headerNames.nextElement();
|
String key = (String) headerNames.nextElement();
|
||||||
@ -167,7 +165,7 @@ public class LyCompatibleController {
|
|||||||
@RequestMapping("getNewVideo")
|
@RequestMapping("getNewVideo")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public R getNewVideo(HttpServletRequest request) {
|
public R getNewVideo(HttpServletRequest request) {
|
||||||
Map<String, String> headersMap = new HashMap<String, String>();
|
Map<String, String> headersMap = new HashMap<>();
|
||||||
Enumeration<String> headerNames = request.getHeaderNames();
|
Enumeration<String> headerNames = request.getHeaderNames();
|
||||||
while (headerNames.hasMoreElements()) {
|
while (headerNames.hasMoreElements()) {
|
||||||
String key = (String) headerNames.nextElement();
|
String key = (String) headerNames.nextElement();
|
||||||
@ -193,7 +191,7 @@ public class LyCompatibleController {
|
|||||||
return R.error("用户没有上传过照片!");
|
return R.error("用户没有上传过照片!");
|
||||||
}
|
}
|
||||||
VideoTaskStatusVO taskStatusVO = goodsService.getTaskStatusByScenicId(member.getId(), member.getScenicId());
|
VideoTaskStatusVO taskStatusVO = goodsService.getTaskStatusByScenicId(member.getId(), member.getScenicId());
|
||||||
List<ContentPageVO> listApiResponse = appScenicService.faceContentList(faceVO.getId());
|
List<ContentPageVO> listApiResponse = faceService.faceContentList(faceVO.getId());
|
||||||
Map<Integer, List<ContentPageVO>> collect = listApiResponse.stream()
|
Map<Integer, List<ContentPageVO>> collect = listApiResponse.stream()
|
||||||
.filter(contentPageVO -> contentPageVO.getLockType() < 0)
|
.filter(contentPageVO -> contentPageVO.getLockType() < 0)
|
||||||
.collect(Collectors.groupingBy(ContentPageVO::getGoodsType));
|
.collect(Collectors.groupingBy(ContentPageVO::getGoodsType));
|
||||||
@ -206,7 +204,7 @@ public class LyCompatibleController {
|
|||||||
}
|
}
|
||||||
List<Map<String, Object>> videoList = collect.get(0).stream().collect(Collectors.groupingBy(ContentPageVO::getTemplateId))
|
List<Map<String, Object>> videoList = collect.get(0).stream().collect(Collectors.groupingBy(ContentPageVO::getTemplateId))
|
||||||
.values().stream().map(contentPageVOs -> {
|
.values().stream().map(contentPageVOs -> {
|
||||||
ContentPageVO contentPageVO = contentPageVOs.get(0);
|
ContentPageVO contentPageVO = contentPageVOs.getFirst();
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
VideoEntity videoRespVO = videoRepository.getVideo(contentPageVO.getContentId());
|
VideoEntity videoRespVO = videoRepository.getVideo(contentPageVO.getContentId());
|
||||||
map.put("id", videoRespVO.getId().toString());
|
map.put("id", videoRespVO.getId().toString());
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.ycwl.basic.controller.extern;
|
package com.ycwl.basic.controller.extern;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -11,6 +12,7 @@ import java.util.Map;
|
|||||||
* @date 2016年10月27日 下午9:59:27
|
* @date 2016年10月27日 下午9:59:27
|
||||||
*/
|
*/
|
||||||
public class R extends HashMap<String, Object> {
|
public class R extends HashMap<String, Object> {
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
public R() {
|
public R() {
|
||||||
|
@ -2,6 +2,7 @@ package com.ycwl.basic.controller.mobile;
|
|||||||
|
|
||||||
import com.ycwl.basic.model.jwt.JwtInfo;
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
import com.ycwl.basic.model.mobile.face.FaceRecognizeResp;
|
import com.ycwl.basic.model.mobile.face.FaceRecognizeResp;
|
||||||
|
import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO;
|
||||||
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
|
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
|
||||||
import com.ycwl.basic.service.pc.FaceService;
|
import com.ycwl.basic.service.pc.FaceService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
@ -38,7 +39,7 @@ AppFaceController {
|
|||||||
*/
|
*/
|
||||||
@ApiOperation("人脸照片上传")
|
@ApiOperation("人脸照片上传")
|
||||||
@PostMapping("/faceUPload")
|
@PostMapping("/faceUPload")
|
||||||
public ApiResponse faceUpload(@RequestParam("file")MultipartFile file, @RequestParam("scenicId") Long scenicId) {
|
public ApiResponse<FaceRecognizeResp> faceUpload(@RequestParam("file")MultipartFile file, @RequestParam("scenicId") Long scenicId) {
|
||||||
//获取用户id
|
//获取用户id
|
||||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
Long userId = worker.getUserId();
|
Long userId = worker.getUserId();
|
||||||
@ -60,13 +61,21 @@ AppFaceController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{faceId}")
|
@DeleteMapping("/{faceId}")
|
||||||
public ApiResponse deleteFace(@PathVariable("faceId") Long faceId) {
|
public ApiResponse<String> deleteFace(@PathVariable("faceId") Long faceId) {
|
||||||
return faceService.deleteFace(faceId);
|
return faceService.deleteFace(faceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{faceId}/match")
|
@PostMapping("/{faceId}/match")
|
||||||
public ApiResponse match(@PathVariable("faceId") Long faceId) {
|
public ApiResponse<String> match(@PathVariable("faceId") Long faceId) {
|
||||||
faceService.matchFaceId(faceId);
|
faceService.matchFaceId(faceId);
|
||||||
return ApiResponse.success("");
|
return ApiResponse.success("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation("景区视频源素材列表")
|
||||||
|
@GetMapping("/{faceId}/contentList")
|
||||||
|
public ApiResponse<List<ContentPageVO>> contentList(@PathVariable Long faceId) {
|
||||||
|
List<ContentPageVO> contentPageVOS = faceService.faceContentList(faceId);
|
||||||
|
return ApiResponse.success(contentPageVOS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,13 @@ public class AppGoodsController {
|
|||||||
return ApiResponse.success(goodsDetailVOS);
|
return ApiResponse.success(goodsDetailVOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("源素材(原片/照片)商品数量")
|
||||||
|
@PostMapping("/sourceGoodsCount")
|
||||||
|
public ApiResponse<Integer> sourceGoodsCount(@RequestBody GoodsReqQuery query) {
|
||||||
|
Integer count = goodsService.sourceGoodsCount(query);
|
||||||
|
return ApiResponse.success(count);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/sourceGoodsList/preview")
|
@PostMapping("/sourceGoodsList/preview")
|
||||||
public ApiResponse<List<GoodsUrlVO>> sourceGoodsListPreview(@RequestBody GoodsReqQuery query) {
|
public ApiResponse<List<GoodsUrlVO>> sourceGoodsListPreview(@RequestBody GoodsReqQuery query) {
|
||||||
List<GoodsUrlVO> goodsUrlList = goodsService.sourceGoodsListPreview(query);
|
List<GoodsUrlVO> goodsUrlList = goodsService.sourceGoodsListPreview(query);
|
||||||
|
@ -64,7 +64,7 @@ public class AppMemberController {
|
|||||||
|
|
||||||
@ApiOperation("新增或修改景区服务通知状态")
|
@ApiOperation("新增或修改景区服务通知状态")
|
||||||
@GetMapping("/updateScenicServiceNoticeStatus")
|
@GetMapping("/updateScenicServiceNoticeStatus")
|
||||||
public ApiResponse updateScenicServiceNoticeStatus(Long scenicId) {
|
public ApiResponse<String> updateScenicServiceNoticeStatus(Long scenicId) {
|
||||||
return memberService.updateScenicServiceNoticeStatus(scenicId);
|
return memberService.updateScenicServiceNoticeStatus(scenicId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import com.ycwl.basic.biz.PriceBiz;
|
|||||||
import com.ycwl.basic.constant.BaseContextHandler;
|
import com.ycwl.basic.constant.BaseContextHandler;
|
||||||
import com.ycwl.basic.mapper.FaceMapper;
|
import com.ycwl.basic.mapper.FaceMapper;
|
||||||
import com.ycwl.basic.model.jwt.JwtInfo;
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
|
|
||||||
import com.ycwl.basic.model.mobile.order.IsBuyBatchRespVO;
|
import com.ycwl.basic.model.mobile.order.IsBuyBatchRespVO;
|
||||||
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
|
import com.ycwl.basic.model.mobile.order.IsBuyRespVO;
|
||||||
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
import com.ycwl.basic.model.mobile.order.OrderAppPageReq;
|
||||||
@ -14,12 +13,8 @@ import com.ycwl.basic.model.mobile.order.RefundOrderReq;
|
|||||||
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
|
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
|
||||||
import com.ycwl.basic.model.pc.order.req.CreateBatchOrderReqVO;
|
import com.ycwl.basic.model.pc.order.req.CreateBatchOrderReqVO;
|
||||||
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
|
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
|
||||||
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
|
|
||||||
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
|
||||||
import com.ycwl.basic.model.wx.WxPayRespVO;
|
import com.ycwl.basic.pay.entity.PayResponse;
|
||||||
import com.ycwl.basic.repository.OrderRepository;
|
|
||||||
import com.ycwl.basic.repository.PriceRepository;
|
|
||||||
import com.ycwl.basic.service.mobile.GoodsService;
|
|
||||||
import com.ycwl.basic.service.pc.OrderService;
|
import com.ycwl.basic.service.pc.OrderService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import com.ycwl.basic.utils.JwtTokenUtil;
|
import com.ycwl.basic.utils.JwtTokenUtil;
|
||||||
@ -28,6 +23,8 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/4 17:16
|
* @Date:2024/12/4 17:16
|
||||||
@ -62,15 +59,20 @@ public class AppOrderController {
|
|||||||
|
|
||||||
@ApiOperation("用户端订单新增")
|
@ApiOperation("用户端订单新增")
|
||||||
@PostMapping("/addOrder")
|
@PostMapping("/addOrder")
|
||||||
public ApiResponse<WxPayRespVO> addOrder(@RequestBody CreateOrderReqVO orderAddReq) throws Exception {
|
public ApiResponse<Map<String, Object>> addOrder(@RequestBody CreateOrderReqVO orderAddReq) throws Exception {
|
||||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
return orderService.createOrder(worker.getUserId(), orderAddReq);
|
return orderService.createOrder(worker.getUserId(), orderAddReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询订单")
|
||||||
|
@GetMapping("/queryOrder")
|
||||||
|
public ApiResponse<PayResponse> queryOrder(@RequestParam("orderId") Long orderId) {
|
||||||
|
return ApiResponse.success(orderService.queryOrder(orderId));
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("用户端打包订单新增")
|
@ApiOperation("用户端打包订单新增")
|
||||||
@PostMapping("/addBatchOrder")
|
@PostMapping("/addBatchOrder")
|
||||||
public ApiResponse<WxPayRespVO> addOrder(@RequestBody CreateBatchOrderReqVO batchOrderReqVO) throws Exception {
|
public ApiResponse<Map<String, Object>> addOrder(@RequestBody CreateBatchOrderReqVO batchOrderReqVO) throws Exception {
|
||||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
return orderService.createBatchOrder(worker.getUserId(), batchOrderReqVO);
|
return orderService.createBatchOrder(worker.getUserId(), batchOrderReqVO);
|
||||||
}
|
}
|
||||||
@ -101,6 +103,9 @@ public class AppOrderController {
|
|||||||
Long userId = Long.parseLong(BaseContextHandler.getUserId());
|
Long userId = Long.parseLong(BaseContextHandler.getUserId());
|
||||||
if (faceId == null) {
|
if (faceId == null) {
|
||||||
FaceRespVO lastFaceByUserId = faceMapper.findLastFaceByUserId(BaseContextHandler.getUserId());
|
FaceRespVO lastFaceByUserId = faceMapper.findLastFaceByUserId(BaseContextHandler.getUserId());
|
||||||
|
if (lastFaceByUserId == null) {
|
||||||
|
return ApiResponse.fail("您还未上传人脸");
|
||||||
|
}
|
||||||
faceId = lastFaceByUserId.getId();
|
faceId = lastFaceByUserId.getId();
|
||||||
}
|
}
|
||||||
IsBuyBatchRespVO buy = priceBiz.isBuy(userId, faceId, scenicId, type, goodsIds);
|
IsBuyBatchRespVO buy = priceBiz.isBuy(userId, faceId, scenicId, type, goodsIds);
|
||||||
|
@ -0,0 +1,106 @@
|
|||||||
|
package com.ycwl.basic.controller.mobile;
|
||||||
|
|
||||||
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
|
import com.ycwl.basic.model.pc.printer.resp.MemberPrintResp;
|
||||||
|
import com.ycwl.basic.model.pc.printer.resp.PrinterResp;
|
||||||
|
import com.ycwl.basic.model.printer.req.FromSourceReq;
|
||||||
|
import com.ycwl.basic.service.printer.PrinterService;
|
||||||
|
import com.ycwl.basic.storage.StorageFactory;
|
||||||
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
|
import com.ycwl.basic.utils.JwtTokenUtil;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
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.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/mobile/printer/v1")
|
||||||
|
public class AppPrinterController {
|
||||||
|
@Autowired
|
||||||
|
private PrinterService printerService;
|
||||||
|
@GetMapping("/listFor/{scenicId}")
|
||||||
|
@IgnoreToken
|
||||||
|
public ApiResponse<List<PrinterResp>> listFor(@PathVariable("scenicId") Long scenicId) {
|
||||||
|
return ApiResponse.success(printerService.listByScenicId(scenicId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getListFor/{scenicId}")
|
||||||
|
public ApiResponse<List<MemberPrintResp>> getListFor(@PathVariable("scenicId") Long scenicId) {
|
||||||
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
|
return ApiResponse.success(printerService.getUserPhotoList(worker.getUserId(), scenicId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getItem/{scenicId}/{id}")
|
||||||
|
public ApiResponse<MemberPrintResp> getItem(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id) {
|
||||||
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
|
MemberPrintResp userPhoto = printerService.getUserPhoto(worker.getUserId(), scenicId, id);
|
||||||
|
if (userPhoto == null) {
|
||||||
|
return ApiResponse.fail("未找到该图片");
|
||||||
|
}
|
||||||
|
return ApiResponse.success(userPhoto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/deleteFrom/{scenicId}/{id}")
|
||||||
|
public ApiResponse<?> deleteFrom(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id) throws IOException {
|
||||||
|
JwtInfo worker = JwtTokenUtil.getWorker();
|
||||||
|
printerService.deleteUserPhoto(worker.getUserId(), scenicId, id);
|
||||||
|
return ApiResponse.success(null);
|
||||||
|
}
|
||||||
|
@PostMapping("/uploadTo/{scenicId}")
|
||||||
|
public ApiResponse<?> upload(@PathVariable("scenicId") Long scenicId, @RequestParam(value = "file") MultipartFile file) throws IOException {
|
||||||
|
String[] split = file.getOriginalFilename().split("\\.");
|
||||||
|
String ext = split[split.length - 1];
|
||||||
|
String url = StorageFactory.use().uploadFile(file, "printer", UUID.randomUUID() + "." + ext);
|
||||||
|
printerService.addUserPhoto(JwtTokenUtil.getWorker().getUserId(), scenicId, url);
|
||||||
|
return ApiResponse.success(url);
|
||||||
|
}
|
||||||
|
@PostMapping("/uploadTo/{scenicId}/cropped/{id}")
|
||||||
|
public ApiResponse<?> uploadReplace(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id, @RequestParam(value = "file") MultipartFile file) throws IOException {
|
||||||
|
String[] split = file.getOriginalFilename().split("\\.");
|
||||||
|
String ext = split[split.length - 1];
|
||||||
|
String url = StorageFactory.use().uploadFile(file, "printer", UUID.randomUUID() + "." + ext);
|
||||||
|
printerService.setPhotoCropped(JwtTokenUtil.getWorker().getUserId(), scenicId, id, url);
|
||||||
|
return ApiResponse.success(url);
|
||||||
|
}
|
||||||
|
@PostMapping("/uploadTo/{scenicId}/formSource")
|
||||||
|
public ApiResponse<?> uploadFromSource(@PathVariable("scenicId") Long scenicId, @RequestBody FromSourceReq req) throws IOException {
|
||||||
|
printerService.addUserPhotoFromSource(JwtTokenUtil.getWorker().getUserId(), scenicId, req);
|
||||||
|
return ApiResponse.success(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/setQuantity/{scenicId}/{id}")
|
||||||
|
public ApiResponse<?> setQuantity(@PathVariable("scenicId") Long scenicId, @PathVariable("id") Long id, @RequestParam("quantity") Integer quantity) {
|
||||||
|
if (quantity == null) {
|
||||||
|
return ApiResponse.fail("请输入数量");
|
||||||
|
}
|
||||||
|
if (quantity < 0) {
|
||||||
|
return ApiResponse.fail("数量不能小于0");
|
||||||
|
}
|
||||||
|
printerService.setPhotoQuantity(JwtTokenUtil.getWorker().getUserId(), scenicId, id, quantity);
|
||||||
|
return ApiResponse.success(null);
|
||||||
|
}
|
||||||
|
@GetMapping("/price/{scenicId}")
|
||||||
|
public ApiResponse<?> queryPrice(@PathVariable("scenicId") Long scenicId) {
|
||||||
|
return ApiResponse.success(printerService.queryPrice(JwtTokenUtil.getWorker().getUserId(), scenicId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/order/{scenicId}")
|
||||||
|
public ApiResponse<Map<String, Object>> createOrder(@PathVariable("scenicId") Long scenicId) {
|
||||||
|
return ApiResponse.success(printerService.createOrder(JwtTokenUtil.getWorker().getUserId(), scenicId, null));
|
||||||
|
}
|
||||||
|
@PostMapping("/order/{scenicId}/toPrinter/{printerId}")
|
||||||
|
public ApiResponse<Map<String, Object>> createOrderToPrinter(@PathVariable("scenicId") Long scenicId, @PathVariable("printerId") Integer printerId) {
|
||||||
|
return ApiResponse.success(printerService.createOrder(JwtTokenUtil.getWorker().getUserId(), scenicId, printerId));
|
||||||
|
}
|
||||||
|
}
|
@ -2,15 +2,19 @@ package com.ycwl.basic.controller.mobile;
|
|||||||
|
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
|
import com.ycwl.basic.constant.BaseContextHandler;
|
||||||
import com.ycwl.basic.model.jwt.JwtInfo;
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
import com.ycwl.basic.model.mobile.scenic.ScenicAppVO;
|
import com.ycwl.basic.model.mobile.scenic.ScenicAppVO;
|
||||||
import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
|
import com.ycwl.basic.model.mobile.scenic.ScenicDeviceCountVO;
|
||||||
|
import com.ycwl.basic.model.mobile.scenic.ScenicIndexVO;
|
||||||
import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO;
|
import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO;
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
||||||
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
|
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
|
||||||
|
import com.ycwl.basic.model.pc.scenic.resp.ScenicConfigResp;
|
||||||
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
||||||
import com.ycwl.basic.repository.ScenicRepository;
|
import com.ycwl.basic.repository.ScenicRepository;
|
||||||
import com.ycwl.basic.service.mobile.AppScenicService;
|
import com.ycwl.basic.service.mobile.AppScenicService;
|
||||||
|
import com.ycwl.basic.service.pc.FaceService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import com.ycwl.basic.utils.JwtTokenUtil;
|
import com.ycwl.basic.utils.JwtTokenUtil;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@ -20,6 +24,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,20 +32,33 @@ import java.util.List;
|
|||||||
* @Date:2024/12/5 10:22
|
* @Date:2024/12/5 10:22
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Deprecated
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/mobile/scenic/v1")
|
@RequestMapping("/api/mobile/scenic/v1")
|
||||||
@Api(tags = "景区相关接口")
|
@Api(tags = "景区相关接口")
|
||||||
public class AppScenicController {
|
public class AppScenicController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FaceService faceService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AppScenicService appScenicService;
|
private AppScenicService appScenicService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScenicRepository scenicRepository;
|
private ScenicRepository scenicRepository;
|
||||||
|
private static final List<String> ENABLED_USER_IDs = new ArrayList<>(){{
|
||||||
|
add("3932535453961555968");
|
||||||
|
add("3936121342868459520");
|
||||||
|
add("3936940597855784960");
|
||||||
|
}};
|
||||||
|
|
||||||
@ApiOperation("分页查询景区列表")
|
@ApiOperation("分页查询景区列表")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(@RequestBody ScenicReqQuery scenicReqQuery){
|
public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(@RequestBody ScenicReqQuery scenicReqQuery){
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
if (ENABLED_USER_IDs.contains(userId)) {
|
||||||
return appScenicService.pageQuery(scenicReqQuery);
|
return appScenicService.pageQuery(scenicReqQuery);
|
||||||
|
} else {
|
||||||
|
return ApiResponse.success(new PageInfo<>(new ArrayList<>()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ApiOperation("根据id查询景区详情")
|
@ApiOperation("根据id查询景区详情")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
@ -51,9 +69,26 @@ public class AppScenicController {
|
|||||||
|
|
||||||
@GetMapping("/{id}/config")
|
@GetMapping("/{id}/config")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public ApiResponse<ScenicConfigEntity> getConfig(@PathVariable Long id){
|
public ApiResponse<ScenicConfigResp> getConfig(@PathVariable Long id){
|
||||||
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(id);
|
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(id);
|
||||||
return ApiResponse.success(scenicConfig);
|
ScenicConfigResp resp = new ScenicConfigResp();
|
||||||
|
resp.setBookRoutine(scenicConfig.getBookRoutine());
|
||||||
|
resp.setForceFinishTime(scenicConfig.getForceFinishTime());
|
||||||
|
resp.setTourTime(scenicConfig.getTourTime());
|
||||||
|
resp.setSampleStoreDay(scenicConfig.getSampleStoreDay());
|
||||||
|
resp.setFaceStoreDay(scenicConfig.getFaceStoreDay());
|
||||||
|
resp.setVideoStoreDay(scenicConfig.getVideoStoreDay());
|
||||||
|
resp.setAllFree(scenicConfig.getAllFree());
|
||||||
|
resp.setDisableSourceVideo(scenicConfig.getDisableSourceVideo());
|
||||||
|
resp.setDisableSourceImage(scenicConfig.getDisableSourceImage());
|
||||||
|
resp.setAntiScreenRecordType(scenicConfig.getAntiScreenRecordType());
|
||||||
|
resp.setVideoSourceStoreDay(scenicConfig.getVideoSourceStoreDay());
|
||||||
|
resp.setImageSourceStoreDay(scenicConfig.getImageSourceStoreDay());
|
||||||
|
resp.setUserSourceExpireDay(scenicConfig.getUserSourceExpireDay());
|
||||||
|
resp.setBrokerDirectRate(scenicConfig.getBrokerDirectRate());
|
||||||
|
resp.setVideoSourcePackHint(scenicConfig.getVideoSourcePackHint());
|
||||||
|
resp.setImageSourcePackHint(scenicConfig.getImageSourcePackHint());
|
||||||
|
return ApiResponse.success(resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询景区设备总数和拍到用户的机位数量")
|
@ApiOperation("查询景区设备总数和拍到用户的机位数量")
|
||||||
@ -65,13 +100,19 @@ public class AppScenicController {
|
|||||||
@ApiOperation("景区视频源素材列表")
|
@ApiOperation("景区视频源素材列表")
|
||||||
@GetMapping("/contentList/")
|
@GetMapping("/contentList/")
|
||||||
public ApiResponse<List<ContentPageVO>> contentList() {
|
public ApiResponse<List<ContentPageVO>> contentList() {
|
||||||
return appScenicService.contentListUseDefaultFace();
|
return faceService.contentListUseDefaultFace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("景区视频源素材列表")
|
@ApiOperation("景区视频源素材列表")
|
||||||
@GetMapping("/face/{faceId}/contentList")
|
@GetMapping("/face/{faceId}/contentList")
|
||||||
public ApiResponse<List<ContentPageVO>> contentList(@PathVariable Long faceId) {
|
public ApiResponse<List<ContentPageVO>> contentList(@PathVariable Long faceId) {
|
||||||
List<ContentPageVO> contentPageVOS = appScenicService.faceContentList(faceId);
|
List<ContentPageVO> contentPageVOS = faceService.faceContentList(faceId);
|
||||||
return ApiResponse.success(contentPageVOS);
|
return ApiResponse.success(contentPageVOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/nearby")
|
||||||
|
public ApiResponse<List<ScenicAppVO>> nearby(@RequestBody ScenicIndexVO scenicIndexVO) {
|
||||||
|
List<ScenicAppVO> list = appScenicService.scenicListByLnLa(scenicIndexVO);
|
||||||
|
return ApiResponse.success(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/mobile/video/v1")
|
@RequestMapping("/api/mobile/video/v1")
|
||||||
public class AppVideoController {
|
public class AppVideoController {
|
||||||
|
@ -39,7 +39,7 @@ public class AppWxNotifyController {
|
|||||||
@GetMapping({"/getIds", "/"})
|
@GetMapping({"/getIds", "/"})
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public ApiResponse<List<String>> getIds() {
|
public ApiResponse<List<String>> getIds() {
|
||||||
return ApiResponse.success(new ArrayList<String>() {{
|
return ApiResponse.success(new ArrayList<>() {{
|
||||||
add("5b8vTm7kvwYubqDxb3dxBs0BqxMsgVgGw573aahTEd8");
|
add("5b8vTm7kvwYubqDxb3dxBs0BqxMsgVgGw573aahTEd8");
|
||||||
add("vPIzbkA0x4mMj-vdbWx6_45e8juWXzs3FGYnDsIPv3A");
|
add("vPIzbkA0x4mMj-vdbWx6_45e8juWXzs3FGYnDsIPv3A");
|
||||||
add("HB1vp-0BXc2WyYeoYN3a3GuZV9HtPLXUTT7blCBq9eY");
|
add("HB1vp-0BXc2WyYeoYN3a3GuZV9HtPLXUTT7blCBq9eY");
|
||||||
@ -49,7 +49,7 @@ public class AppWxNotifyController {
|
|||||||
@GetMapping("/{scenicId}")
|
@GetMapping("/{scenicId}")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public ApiResponse<List<String>> getIds(@PathVariable("scenicId") Long scenicId) {
|
public ApiResponse<List<String>> getIds(@PathVariable("scenicId") Long scenicId) {
|
||||||
return ApiResponse.success(new ArrayList<String>() {{
|
return ApiResponse.success(new ArrayList<>() {{
|
||||||
String videoGeneratedTemplateId = scenicRepository.getVideoGeneratedTemplateId(scenicId);
|
String videoGeneratedTemplateId = scenicRepository.getVideoGeneratedTemplateId(scenicId);
|
||||||
if (StringUtils.isNotBlank(videoGeneratedTemplateId)) {
|
if (StringUtils.isNotBlank(videoGeneratedTemplateId)) {
|
||||||
add(videoGeneratedTemplateId);
|
add(videoGeneratedTemplateId);
|
||||||
|
@ -2,22 +2,24 @@ package com.ycwl.basic.controller.mobile;
|
|||||||
|
|
||||||
|
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
import com.ycwl.basic.annotation.RequestToFile;
|
|
||||||
import com.ycwl.basic.aspectj.HttpSaver;
|
|
||||||
import com.ycwl.basic.enums.BizCodeEnum;
|
import com.ycwl.basic.enums.BizCodeEnum;
|
||||||
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
|
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
|
||||||
import com.ycwl.basic.model.wx.WxPayRespVO;
|
import com.ycwl.basic.model.wx.WxPayRespVO;
|
||||||
|
import com.ycwl.basic.pay.entity.PayResponse;
|
||||||
import com.ycwl.basic.service.mobile.WxPayService;
|
import com.ycwl.basic.service.mobile.WxPayService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
|
|
||||||
@ -35,12 +37,6 @@ public class AppWxPayController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private WxPayService wxPayService;
|
private WxPayService wxPayService;
|
||||||
|
|
||||||
@ApiOperation(value = "微信预支付", notes = "微信预支付")
|
|
||||||
@PostMapping("/createOrder")
|
|
||||||
public ApiResponse<WxPayRespVO> createOrder(@RequestBody WXPayOrderReqVO req) throws Exception {
|
|
||||||
return ApiResponse.success(wxPayService.createOrder(req));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation(value = "微信支付回调", notes = "微信支付回调")
|
@ApiOperation(value = "微信支付回调", notes = "微信支付回调")
|
||||||
@PostMapping("/payNotify")
|
@PostMapping("/payNotify")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
@ -49,28 +45,25 @@ public class AppWxPayController {
|
|||||||
return ApiResponse.success(BizCodeEnum.REQUEST_OK);
|
return ApiResponse.success(BizCodeEnum.REQUEST_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "微信退款", notes = "微信退款")
|
@RequestMapping("/{scenicId}/payNotify")
|
||||||
@PostMapping("/refundOrder")
|
@IgnoreToken
|
||||||
public ApiResponse<?> refundOrder(@RequestBody String orderId) throws Exception {
|
public Object payNotifyByScenicId(@PathVariable Long scenicId, HttpServletRequest request) {
|
||||||
return ApiResponse.buildResult(wxPayService.refundOrder(orderId) ?
|
PayResponse payResponse = wxPayService.payNotify(scenicId, request);
|
||||||
BizCodeEnum.SUCCESS :
|
if (payResponse == null) {
|
||||||
BizCodeEnum.ADVANCE_PAYMENT_REFUND_FAILED);
|
return ApiResponse.buildResult(BizCodeEnum.ADVANCE_PAYMENT_CALLBACK_FAILED);
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(payResponse.getCustomResponse())) {
|
||||||
|
return payResponse.getCustomResponse();
|
||||||
|
}
|
||||||
|
return ApiResponse.success(BizCodeEnum.REQUEST_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "微信支付退款回调", notes = "微信支付退款回调")
|
@ApiOperation(value = "微信支付退款回调", notes = "微信支付退款回调")
|
||||||
@PostMapping("/refundNotify")
|
@PostMapping("/{scenicId}/refundNotify")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public ApiResponse<?> refundNotify(@RequestBody String refundResult) throws GeneralSecurityException, IOException {
|
public ApiResponse<?> refundNotify(@PathVariable Long scenicId, HttpServletRequest request) throws GeneralSecurityException, IOException {
|
||||||
return ApiResponse.buildResult(wxPayService.refundNotify(refundResult) ?
|
return ApiResponse.buildResult(wxPayService.refundNotify(scenicId, request) ?
|
||||||
BizCodeEnum.SUCCESS :
|
BizCodeEnum.SUCCESS :
|
||||||
BizCodeEnum.ADVANCE_PAYMENT_CALLBACK_REFUND_FAILED);
|
BizCodeEnum.ADVANCE_PAYMENT_CALLBACK_REFUND_FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "微信关闭订单", notes = "微信关闭订单")
|
|
||||||
@PostMapping("/closeOrder")
|
|
||||||
@IgnoreToken
|
|
||||||
public ApiResponse<?> closeOrder(@RequestBody String orderId) {
|
|
||||||
wxPayService.closeOrder(orderId);
|
|
||||||
return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,36 @@
|
|||||||
package com.ycwl.basic.controller.mobile.manage;
|
package com.ycwl.basic.controller.mobile.manage;
|
||||||
|
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
|
import com.ycwl.basic.constant.BaseContextHandler;
|
||||||
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq;
|
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginReq;
|
||||||
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO;
|
import com.ycwl.basic.model.mobile.scenic.account.ScenicLoginRespVO;
|
||||||
import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO;
|
import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO;
|
||||||
import com.ycwl.basic.model.pc.device.resp.DeviceRespVO;
|
import com.ycwl.basic.model.pc.device.resp.DeviceRespVO;
|
||||||
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
|
||||||
|
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
|
||||||
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
||||||
import com.ycwl.basic.service.mobile.AppScenicService;
|
import com.ycwl.basic.service.mobile.AppScenicService;
|
||||||
|
import com.ycwl.basic.service.pc.ScenicAccountService;
|
||||||
|
import com.ycwl.basic.service.pc.ScenicService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.ycwl.basic.constant.JwtRoleConstant.MERCHANT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/12 18:28
|
* @Date:2024/12/12 18:28
|
||||||
@ -28,9 +39,12 @@ import java.util.List;
|
|||||||
@RequestMapping("/api/mobile/scenicAccount/v1")
|
@RequestMapping("/api/mobile/scenicAccount/v1")
|
||||||
@Api(tags = "景区账号相关接口")
|
@Api(tags = "景区账号相关接口")
|
||||||
public class AppScenicAccountController {
|
public class AppScenicAccountController {
|
||||||
|
@Autowired
|
||||||
|
private ScenicAccountService accountService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AppScenicService scenicService;
|
private AppScenicService scenicService;
|
||||||
|
@Autowired
|
||||||
|
private ScenicService adminScenicService;
|
||||||
|
|
||||||
@ApiOperation("登录")
|
@ApiOperation("登录")
|
||||||
@PostMapping("/login")
|
@PostMapping("/login")
|
||||||
@ -39,13 +53,68 @@ public class AppScenicAccountController {
|
|||||||
return scenicService.login(scenicLoginReq);
|
return scenicService.login(scenicLoginReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/myScenicList")
|
||||||
|
public ApiResponse<List<ScenicRespVO>> myScenicList() {
|
||||||
|
List<ScenicRespVO> list = Collections.emptyList();
|
||||||
|
if (StringUtils.equals(BaseContextHandler.getRoleId(), MERCHANT.type)) {
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = accountService.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
list = account.getScenicId().stream().map(id -> {
|
||||||
|
return scenicService.getDetails(id).getData();
|
||||||
|
}).toList();
|
||||||
|
} else {
|
||||||
|
list = adminScenicService.list(new ScenicReqQuery()).getData();
|
||||||
|
}
|
||||||
|
return ApiResponse.success(list);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/getScenic")
|
@GetMapping("/getScenic")
|
||||||
public ApiResponse<ScenicRespVO> getMyScenic() {
|
public ApiResponse<ScenicRespVO> getMyScenic() {
|
||||||
return scenicService.getMyScenic();
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = accountService.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
return scenicService.getDetails(account.getScenicId().getFirst());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{scenicId}")
|
||||||
|
public ApiResponse<ScenicRespVO> getScenic(@PathVariable Long scenicId) {
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = accountService.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
if (!account.getScenicId().contains(scenicId)) {
|
||||||
|
return ApiResponse.fail("无权限");
|
||||||
|
}
|
||||||
|
return scenicService.getDetails(scenicId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/devices")
|
@GetMapping("/devices")
|
||||||
public ApiResponse<List<DeviceRespVO>> getDeviceList() {
|
public ApiResponse<List<DeviceRespVO>> getDeviceList() {
|
||||||
return scenicService.getMyDevices();
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = accountService.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
}
|
}
|
||||||
|
return scenicService.getDevices(account.getScenicId().getFirst());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{scenicId}/devices")
|
||||||
|
public ApiResponse<List<DeviceRespVO>> getDeviceList(@PathVariable Long scenicId) {
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = accountService.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
if (!account.getScenicId().contains(scenicId)) {
|
||||||
|
return ApiResponse.fail("无权限");
|
||||||
|
}
|
||||||
|
return scenicService.getDevices(scenicId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,11 @@ import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
|
|||||||
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
|
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
|
||||||
import com.ycwl.basic.service.pc.OrderService;
|
import com.ycwl.basic.service.pc.OrderService;
|
||||||
|
import com.ycwl.basic.service.pc.ScenicAccountService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@ -24,27 +26,57 @@ public class AppScenicOrderController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private OrderService orderService;
|
private OrderService orderService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScenicAccountMapper scenicAccountMapper;
|
private ScenicAccountService service;
|
||||||
|
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
|
@Deprecated
|
||||||
public ApiResponse<List<OrderRespVO>> list(@RequestBody OrderReqQuery query) {
|
public ApiResponse<List<OrderRespVO>> list(@RequestBody OrderReqQuery query) {
|
||||||
String userId = BaseContextHandler.getUserId();
|
String userId = BaseContextHandler.getUserId();
|
||||||
ScenicAccountEntity account = scenicAccountMapper.findAccountById(userId);
|
ScenicAccountEntity account = service.getScenicAccountById(Long.valueOf(userId));
|
||||||
if (account == null) {
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
return ApiResponse.fail("用户未绑定景区");
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
}
|
}
|
||||||
query.setScenicId(account.getScenicId());
|
query.setScenicId(account.getScenicId().getFirst());
|
||||||
|
return orderService.list(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{scenicId}/list")
|
||||||
|
public ApiResponse<List<OrderRespVO>> list(@PathVariable Long scenicId, @RequestBody OrderReqQuery query) {
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = service.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
if (!account.getScenicId().contains(scenicId)) {
|
||||||
|
return ApiResponse.fail("无权限查看该景区订单");
|
||||||
|
}
|
||||||
|
query.setScenicId(scenicId);
|
||||||
return orderService.list(query);
|
return orderService.list(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
|
@Deprecated
|
||||||
public ApiResponse<PageInfo<OrderRespVO>> page(@RequestBody OrderReqQuery query) {
|
public ApiResponse<PageInfo<OrderRespVO>> page(@RequestBody OrderReqQuery query) {
|
||||||
String userId = BaseContextHandler.getUserId();
|
String userId = BaseContextHandler.getUserId();
|
||||||
ScenicAccountEntity account = scenicAccountMapper.findAccountById(userId);
|
ScenicAccountEntity account = service.getScenicAccountById(Long.valueOf(userId));
|
||||||
if (account == null) {
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
return ApiResponse.fail("用户未绑定景区");
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
}
|
}
|
||||||
query.setScenicId(account.getScenicId());
|
query.setScenicId(account.getScenicId().getFirst());
|
||||||
|
return orderService.pageQueryDetail(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{scenicId}/page")
|
||||||
|
public ApiResponse<PageInfo<OrderRespVO>> page(@PathVariable Long scenicId, @RequestBody OrderReqQuery query) {
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = service.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
if (!account.getScenicId().contains(scenicId)) {
|
||||||
|
return ApiResponse.fail("无权限查看该景区订单");
|
||||||
|
}
|
||||||
|
query.setScenicId(scenicId);
|
||||||
return orderService.pageQueryDetail(query);
|
return orderService.pageQueryDetail(query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ public class AppStatisticsController {
|
|||||||
@ApiOperation("统计数据记录")
|
@ApiOperation("统计数据记录")
|
||||||
@PostMapping("/addStatistics")
|
@PostMapping("/addStatistics")
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
public ApiResponse addStatistics(@RequestBody StatisticsRecordAddReq req) {
|
public ApiResponse<String> addStatistics(@RequestBody StatisticsRecordAddReq req) {
|
||||||
|
|
||||||
return statisticsService.addStatistics(req);
|
return statisticsService.addStatistics(req);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ package com.ycwl.basic.controller.pc;
|
|||||||
import com.ycwl.basic.model.pc.broker.entity.BrokerEntity;
|
import com.ycwl.basic.model.pc.broker.entity.BrokerEntity;
|
||||||
import com.ycwl.basic.model.pc.broker.req.BrokerRecordReqQuery;
|
import com.ycwl.basic.model.pc.broker.req.BrokerRecordReqQuery;
|
||||||
import com.ycwl.basic.model.pc.broker.req.BrokerReqQuery;
|
import com.ycwl.basic.model.pc.broker.req.BrokerReqQuery;
|
||||||
import com.ycwl.basic.model.pc.broker.resp.BrokerRecordRespVO;
|
|
||||||
import com.ycwl.basic.model.pc.broker.resp.BrokerRespVO;
|
import com.ycwl.basic.model.pc.broker.resp.BrokerRespVO;
|
||||||
import com.ycwl.basic.model.pc.broker.resp.DailySummaryRespVO;
|
import com.ycwl.basic.model.pc.broker.resp.DailySummaryRespVO;
|
||||||
import com.ycwl.basic.service.pc.BrokerRecordService;
|
import com.ycwl.basic.service.pc.BrokerRecordService;
|
||||||
@ -131,7 +130,7 @@ public class BrokerController {
|
|||||||
try {
|
try {
|
||||||
WxMpUtil.generateWXAQRCode(appId, appSecret, appState, path, filePath);
|
WxMpUtil.generateWXAQRCode(appId, appSecret, appState, path, filePath);
|
||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
String s = adapter.uploadFile(file, filePath);
|
String s = adapter.uploadFile(null, file, filePath);
|
||||||
file.delete();
|
file.delete();
|
||||||
adapter.setAcl(StorageAcl.PUBLIC_READ, filePath);
|
adapter.setAcl(StorageAcl.PUBLIC_READ, filePath);
|
||||||
return ApiResponse.success(s);
|
return ApiResponse.success(s);
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.ycwl.basic.controller.pc;
|
||||||
|
|
||||||
|
import com.ycwl.basic.model.pc.scenicDeviceStats.req.DeviceStatsReq;
|
||||||
|
import com.ycwl.basic.model.pc.scenicDeviceStats.resp.ScenicDeviceStatsListResp;
|
||||||
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/deviceStats/v1")
|
||||||
|
public class DeviceStatsController {
|
||||||
|
@Autowired
|
||||||
|
private com.ycwl.basic.service.pc.DeviceStatsService service;
|
||||||
|
|
||||||
|
@PostMapping("/{scenicId}")
|
||||||
|
public ApiResponse<ScenicDeviceStatsListResp> queryByScenic(@PathVariable("scenicId") Long scenicId, @RequestBody DeviceStatsReq req) {
|
||||||
|
return ApiResponse.success(service.queryByScenicId(scenicId, req.getStartTime(), req.getEndTime()));
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/face/detect_log/v1")
|
@RequestMapping("/api/face/detect_log/v1")
|
||||||
public class FaceDetectLogController {
|
public class FaceDetectLogController {
|
||||||
|
@ -17,6 +17,7 @@ import java.util.List;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/2 16:33
|
* @Date:2024/12/2 16:33
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/faceSample/v1")
|
@RequestMapping("/api/faceSample/v1")
|
||||||
@Api(tags = "人脸样本管理")
|
@Api(tags = "人脸样本管理")
|
||||||
@ -39,28 +40,5 @@ public class FaceSampleController {
|
|||||||
public ApiResponse<FaceSampleRespVO> getDetail(@PathVariable("id") Long id) {
|
public ApiResponse<FaceSampleRespVO> getDetail(@PathVariable("id") Long id) {
|
||||||
return FaceSampleService.getById(id);
|
return FaceSampleService.getById(id);
|
||||||
}
|
}
|
||||||
@ApiOperation("添加人脸样本")
|
|
||||||
@PostMapping("/add")
|
|
||||||
public ApiResponse<Integer> add(@RequestBody FaceSampleEntity FaceSample) {
|
|
||||||
return FaceSampleService.add(FaceSample);
|
|
||||||
}
|
|
||||||
@ApiOperation("删除人脸样本")
|
|
||||||
@PostMapping("/deleteById/{id}")
|
|
||||||
public ApiResponse<Integer> deleteById(@PathVariable Long id) {
|
|
||||||
return FaceSampleService.deleteById(id);
|
|
||||||
}
|
|
||||||
@ApiOperation("批量删除人脸样本")
|
|
||||||
@PostMapping("/deleteByIds")
|
|
||||||
public ApiResponse<Integer> deleteByIds(@RequestBody List<Long> ids) {
|
|
||||||
return FaceSampleService.deleteByIds(ids);
|
|
||||||
}
|
|
||||||
@ApiOperation("修改人脸样本信息")
|
|
||||||
@PostMapping("/update")
|
|
||||||
public ApiResponse<Integer> update(@RequestBody FaceSampleEntity FaceSample) {
|
|
||||||
return FaceSampleService.update(FaceSample);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static com.ycwl.basic.constant.JwtRoleConstant.MERCHANT;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/permission/v1")
|
@RequestMapping("/api/permission/v1")
|
||||||
@Api(tags = "权限管理接口")
|
@Api(tags = "权限管理接口")
|
||||||
@ -32,9 +34,9 @@ public class PermissionController {
|
|||||||
String userId = BaseContextHandler.getUserId();
|
String userId = BaseContextHandler.getUserId();
|
||||||
PermissionEntity permission = permissionService.getPermissionByUserId(Long.parseLong(userId));
|
PermissionEntity permission = permissionService.getPermissionByUserId(Long.parseLong(userId));
|
||||||
if (permission == null || StringUtils.isEmpty(permission.getPermString())) {
|
if (permission == null || StringUtils.isEmpty(permission.getPermString())) {
|
||||||
return ApiResponse.success(new PermissionResp(new ArrayList<>()));
|
return ApiResponse.success(new PermissionResp(new ArrayList<>(), new ArrayList<>()));
|
||||||
}
|
}
|
||||||
return ApiResponse.success(new PermissionResp(Arrays.asList(StringUtils.split(permission.getPermString(), ","))));
|
return ApiResponse.success(new PermissionResp(Arrays.asList(StringUtils.split(permission.getPermString(), ",")), Arrays.asList(StringUtils.split(permission.getMenuString(), ","))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("根据用户ID查询权限信息")
|
@ApiOperation("根据用户ID查询权限信息")
|
||||||
@ -42,15 +44,15 @@ public class PermissionController {
|
|||||||
public ApiResponse<PermissionResp> getPermissionByUser(@PathVariable Long userId) {
|
public ApiResponse<PermissionResp> getPermissionByUser(@PathVariable Long userId) {
|
||||||
PermissionEntity permission = permissionService.getPermissionByUserId(userId);
|
PermissionEntity permission = permissionService.getPermissionByUserId(userId);
|
||||||
if (permission == null || StringUtils.isEmpty(permission.getPermString())) {
|
if (permission == null || StringUtils.isEmpty(permission.getPermString())) {
|
||||||
return ApiResponse.success(new PermissionResp(new ArrayList<>()));
|
return ApiResponse.success(new PermissionResp(new ArrayList<>(), new ArrayList<>()));
|
||||||
}
|
}
|
||||||
return ApiResponse.success(new PermissionResp(Arrays.asList(StringUtils.split(permission.getPermString(), ","))));
|
return ApiResponse.success(new PermissionResp(Arrays.asList(StringUtils.split(permission.getPermString(), ",")), Arrays.asList(StringUtils.split(permission.getMenuString(), ","))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("保存或更新权限信息")
|
@ApiOperation("保存或更新权限信息")
|
||||||
@PostMapping("/save/{userId}")
|
@PostMapping("/save/{userId}")
|
||||||
public ApiResponse saveOrUpdate(@PathVariable Long userId, @RequestBody PermissionSaveReq req) {
|
public ApiResponse saveOrUpdate(@PathVariable Long userId, @RequestBody PermissionSaveReq req) {
|
||||||
permissionService.saveOrUpdate(userId, StringUtils.join(req.getPermissions(), ","));
|
permissionService.saveOrUpdate(userId, StringUtils.join(req.getPermissions(), ","), StringUtils.join(req.getMenus(), ","));
|
||||||
return ApiResponse.success(true);
|
return ApiResponse.success(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -47,6 +47,15 @@ public class PriceConfigController {
|
|||||||
public ApiResponse<Boolean> deletePriceConfig(@PathVariable Integer id) {
|
public ApiResponse<Boolean> deletePriceConfig(@PathVariable Integer id) {
|
||||||
priceRepository.clearPriceCache(id);
|
priceRepository.clearPriceCache(id);
|
||||||
priceConfigService.removeById(id);
|
priceConfigService.removeById(id);
|
||||||
|
priceRepository.clearPriceCache(id);
|
||||||
|
return ApiResponse.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{id}/status")
|
||||||
|
public ApiResponse<Boolean> updateStatus(@PathVariable Integer id) {
|
||||||
|
priceRepository.clearPriceCache(id);
|
||||||
|
priceConfigService.updateStatus(id);
|
||||||
|
priceRepository.clearPriceCache(id);
|
||||||
return ApiResponse.success(true);
|
return ApiResponse.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package com.ycwl.basic.controller.pc;
|
|||||||
|
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import com.ycwl.basic.mapper.ScenicAccountMapper;
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
|
||||||
import com.ycwl.basic.model.pc.scenic.req.ScenicAccountReqQuery;
|
import com.ycwl.basic.model.pc.scenic.req.ScenicAccountReqQuery;
|
||||||
import com.ycwl.basic.service.pc.ScenicAccountService;
|
import com.ycwl.basic.service.pc.ScenicAccountService;
|
||||||
@ -16,6 +17,8 @@ import java.util.List;
|
|||||||
public class ScenicAccountController {
|
public class ScenicAccountController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScenicAccountService service;
|
private ScenicAccountService service;
|
||||||
|
@Autowired
|
||||||
|
private ScenicAccountMapper scenicAccountMapper;
|
||||||
|
|
||||||
// 添加景区账号
|
// 添加景区账号
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ -62,6 +65,10 @@ public class ScenicAccountController {
|
|||||||
public ApiResponse<PageInfo<ScenicAccountEntity>> pageQuery(@RequestBody ScenicAccountReqQuery req) {
|
public ApiResponse<PageInfo<ScenicAccountEntity>> pageQuery(@RequestBody ScenicAccountReqQuery req) {
|
||||||
PageHelper.startPage(req.getPageNum(), req.getPageSize());
|
PageHelper.startPage(req.getPageNum(), req.getPageSize());
|
||||||
List<ScenicAccountEntity> list = service.pageQuery(req);
|
List<ScenicAccountEntity> list = service.pageQuery(req);
|
||||||
|
list.forEach(entity -> {
|
||||||
|
entity.setPassword("");
|
||||||
|
entity.setScenicId(scenicAccountMapper.getAccountRelations(entity.getId()));
|
||||||
|
});
|
||||||
PageInfo<ScenicAccountEntity> pageInfo = new PageInfo<>(list);
|
PageInfo<ScenicAccountEntity> pageInfo = new PageInfo<>(list);
|
||||||
return ApiResponse.success(pageInfo);
|
return ApiResponse.success(pageInfo);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
package com.ycwl.basic.controller.pc;
|
package com.ycwl.basic.controller.pc;
|
||||||
|
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import com.ycwl.basic.constant.BaseContextHandler;
|
||||||
|
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
||||||
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
||||||
import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq;
|
import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq;
|
||||||
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
|
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
|
||||||
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
|
||||||
|
import com.ycwl.basic.service.mobile.AppScenicService;
|
||||||
|
import com.ycwl.basic.service.mobile.AppStatisticsService;
|
||||||
|
import com.ycwl.basic.service.pc.ScenicAccountService;
|
||||||
import com.ycwl.basic.service.pc.ScenicService;
|
import com.ycwl.basic.service.pc.ScenicService;
|
||||||
import com.ycwl.basic.storage.StorageFactory;
|
import com.ycwl.basic.storage.StorageFactory;
|
||||||
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
||||||
@ -15,12 +21,16 @@ import com.ycwl.basic.repository.ScenicRepository;
|
|||||||
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
|
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.ycwl.basic.constant.JwtRoleConstant.MERCHANT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/3 15:20
|
* @Date:2024/12/3 15:20
|
||||||
@ -32,9 +42,15 @@ public class ScenicController {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScenicService scenicService;
|
private ScenicService scenicService;
|
||||||
|
@Autowired
|
||||||
|
private AppScenicService appScenicService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScenicRepository scenicRepository;
|
private ScenicRepository scenicRepository;
|
||||||
|
@Autowired
|
||||||
|
private AppStatisticsService appStatisticsService;
|
||||||
|
@Autowired
|
||||||
|
private ScenicAccountService accountService;
|
||||||
|
|
||||||
@ApiOperation("分页查询景区")
|
@ApiOperation("分页查询景区")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
@ -117,7 +133,7 @@ public class ScenicController {
|
|||||||
try {
|
try {
|
||||||
WxMpUtil.generateWXAQRCode(appId, appSecret, appState, path, filePath);
|
WxMpUtil.generateWXAQRCode(appId, appSecret, appState, path, filePath);
|
||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
String s = adapter.uploadFile(file, filePath);
|
String s = adapter.uploadFile(null, file, filePath);
|
||||||
file.delete();
|
file.delete();
|
||||||
adapter.setAcl(StorageAcl.PUBLIC_READ, filePath);
|
adapter.setAcl(StorageAcl.PUBLIC_READ, filePath);
|
||||||
return ApiResponse.success(s);
|
return ApiResponse.success(s);
|
||||||
@ -125,4 +141,48 @@ public class ScenicController {
|
|||||||
return ApiResponse.fail("生成二维码失败");
|
return ApiResponse.fail("生成二维码失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{scenicId}/one")
|
||||||
|
public ApiResponse getStatisticsOne(@PathVariable("scenicId") Long scenicId, @RequestBody CommonQueryReq query) {
|
||||||
|
query.setScenicId(scenicId);
|
||||||
|
return appStatisticsService.oneStatistics(query);
|
||||||
|
}
|
||||||
|
@PostMapping("/{scenicId}/two")
|
||||||
|
public ApiResponse getStatisticsTwo(@PathVariable("scenicId") Long scenicId, @RequestBody CommonQueryReq query) {
|
||||||
|
query.setScenicId(scenicId);
|
||||||
|
return appStatisticsService.twoStatistics(query);
|
||||||
|
}
|
||||||
|
@PostMapping("/{scenicId}/three")
|
||||||
|
public ApiResponse getStatisticsThree(@PathVariable("scenicId") Long scenicId, @RequestBody CommonQueryReq query) {
|
||||||
|
query.setScenicId(scenicId);
|
||||||
|
return appStatisticsService.freeStatistics(query);
|
||||||
|
}
|
||||||
|
@PostMapping("/{scenicId}/fun")
|
||||||
|
public ApiResponse getStatisticsFun(@PathVariable("scenicId") Long scenicId, @RequestBody CommonQueryReq query) {
|
||||||
|
query.setScenicId(scenicId);
|
||||||
|
return appStatisticsService.userConversionFunnel(query);
|
||||||
|
}
|
||||||
|
@PostMapping("/{scenicId}/orderChart")
|
||||||
|
public ApiResponse getOrderChart(@PathVariable("scenicId") Long scenicId, @RequestBody CommonQueryReq query) {
|
||||||
|
query.setScenicId(scenicId);
|
||||||
|
return appStatisticsService.orderChart(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/myScenicList")
|
||||||
|
public ApiResponse<List<ScenicRespVO>> myScenicList() {
|
||||||
|
List<ScenicRespVO> list = Collections.emptyList();
|
||||||
|
if (StringUtils.equals(BaseContextHandler.getRoleId(), MERCHANT.type)) {
|
||||||
|
String userId = BaseContextHandler.getUserId();
|
||||||
|
ScenicAccountEntity account = accountService.getScenicAccountById(Long.valueOf(userId));
|
||||||
|
if (account == null || account.getScenicId().isEmpty()) {
|
||||||
|
return ApiResponse.fail("景区账号未绑定景区");
|
||||||
|
}
|
||||||
|
list = account.getScenicId().stream().map(id -> {
|
||||||
|
return appScenicService.getDetails(id).getData();
|
||||||
|
}).toList();
|
||||||
|
} else {
|
||||||
|
list = scenicService.list(new ScenicReqQuery()).getData();
|
||||||
|
}
|
||||||
|
return ApiResponse.success(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.ycwl.basic.controller.pc;
|
package com.ycwl.basic.controller.pc;
|
||||||
|
|
||||||
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
import com.ycwl.basic.model.jwt.JwtInfo;
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
||||||
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
|
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
|
||||||
@ -23,41 +24,29 @@ public class SourceController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SourceService sourceService;
|
private SourceService sourceService;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@ApiOperation("分页查询视频源")
|
@ApiOperation("分页查询视频源")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
public ApiResponse pageQuery(@RequestBody SourceReqQuery sourceReqQuery) {
|
public ApiResponse pageQuery(@RequestBody SourceReqQuery sourceReqQuery) {
|
||||||
return sourceService.pageQuery(sourceReqQuery);
|
return sourceService.pageQuery(sourceReqQuery);
|
||||||
}
|
}
|
||||||
|
@Deprecated
|
||||||
@ApiOperation("查询视频源列表")
|
@ApiOperation("查询视频源列表")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
public ApiResponse list(@RequestBody SourceReqQuery sourceReqQuery) {
|
public ApiResponse list(@RequestBody SourceReqQuery sourceReqQuery) {
|
||||||
return sourceService.list(sourceReqQuery);
|
return sourceService.list(sourceReqQuery);
|
||||||
}
|
}
|
||||||
@ApiOperation("查询视频源详情")
|
|
||||||
@GetMapping("getDetail/{id}")
|
|
||||||
public ApiResponse getById(@PathVariable Long id) {
|
|
||||||
JwtInfo worker = JwtTokenUtil.getWorker();
|
|
||||||
return sourceService.getById(id, worker.getUserId());
|
|
||||||
}
|
|
||||||
@PostMapping("/{id}/cutVideo")
|
@PostMapping("/{id}/cutVideo")
|
||||||
|
@IgnoreToken
|
||||||
public ApiResponse cutVideo(@PathVariable("id") Long id) {
|
public ApiResponse cutVideo(@PathVariable("id") Long id) {
|
||||||
return sourceService.cutVideo(id);
|
return sourceService.cutVideo(id);
|
||||||
}
|
}
|
||||||
@ApiOperation("添加视频源")
|
@Deprecated
|
||||||
@PostMapping("/add")
|
|
||||||
public ApiResponse add(@RequestBody SourceEntity source) {
|
|
||||||
return sourceService.add(source);
|
|
||||||
}
|
|
||||||
@ApiOperation("删除视频源")
|
@ApiOperation("删除视频源")
|
||||||
@DeleteMapping("/delete/{id}")
|
@DeleteMapping("/delete/{id}")
|
||||||
public ApiResponse deleteById(@PathVariable Long id) {
|
public ApiResponse deleteById(@PathVariable Long id) {
|
||||||
return sourceService.deleteById(id);
|
return sourceService.deleteById(id);
|
||||||
}
|
}
|
||||||
@ApiOperation("修改视频源")
|
|
||||||
@PostMapping("/update")
|
|
||||||
public ApiResponse update(@RequestBody SourceEntity source) {
|
|
||||||
return sourceService.update(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/task/v1")
|
@RequestMapping("/api/task/v1")
|
||||||
|
@Deprecated
|
||||||
@Api(tags = "任务列表管理")
|
@Api(tags = "任务列表管理")
|
||||||
public class TaskController {
|
public class TaskController {
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import java.util.List;
|
|||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/video/v1")
|
@RequestMapping("/api/video/v1")
|
||||||
|
@Deprecated
|
||||||
@Api(tags = "视频成片管理")
|
@Api(tags = "视频成片管理")
|
||||||
public class VideoController {
|
public class VideoController {
|
||||||
|
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
package com.ycwl.basic.controller.proxy;
|
||||||
|
|
||||||
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@RestController
|
||||||
|
public class ProxyController {
|
||||||
|
@IgnoreToken
|
||||||
|
@RequestMapping(value = "/proxy", method = RequestMethod.GET)
|
||||||
|
public void proxy(@RequestParam(value = "url") String url,
|
||||||
|
HttpServletRequest request,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
||||||
|
url = "http://" + url; // 或根据业务逻辑选择默认协议
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增User-Agent检测逻辑
|
||||||
|
String userAgent = request.getHeader("User-Agent");
|
||||||
|
if (userAgent != null && userAgent.contains("Lavf/")) {
|
||||||
|
response.sendRedirect(url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 创建HTTP连接
|
||||||
|
URL urlObj = new URL(url);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();
|
||||||
|
|
||||||
|
// 设置请求方法和请求头
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
for (Enumeration<String> headers = request.getHeaderNames(); headers.hasMoreElements();) {
|
||||||
|
String headerName = headers.nextElement();
|
||||||
|
connection.addRequestProperty(headerName, request.getHeader(headerName));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理响应
|
||||||
|
int responseCode = connection.getResponseCode();
|
||||||
|
response.setStatus(responseCode);
|
||||||
|
|
||||||
|
// 转发响应头
|
||||||
|
Map<String, List<String>> headerFields = connection.getHeaderFields();
|
||||||
|
for (Map.Entry<String, List<String>> entry : headerFields.entrySet()) {
|
||||||
|
if (entry.getKey() != null) {
|
||||||
|
for (String value : entry.getValue()) {
|
||||||
|
response.addHeader(entry.getKey(), value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流式传输响应体
|
||||||
|
try (InputStream inputStream = connection.getInputStream();
|
||||||
|
OutputStream outputStream = response.getOutputStream()) {
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
|
outputStream.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ package com.ycwl.basic.controller.task;
|
|||||||
|
|
||||||
import com.ycwl.basic.annotation.IgnoreLogReq;
|
import com.ycwl.basic.annotation.IgnoreLogReq;
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
|
import com.ycwl.basic.model.pc.task.resp.TaskRespVO;
|
||||||
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
|
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
|
||||||
import com.ycwl.basic.model.task.req.TaskReqVo;
|
import com.ycwl.basic.model.task.req.TaskReqVo;
|
||||||
import com.ycwl.basic.model.task.req.TaskSuccessReqVo;
|
import com.ycwl.basic.model.task.req.TaskSuccessReqVo;
|
||||||
@ -11,14 +12,13 @@ import com.ycwl.basic.service.task.TaskService;
|
|||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
@RestController
|
@RestController
|
||||||
@Api(tags = "渲染端对接接口")
|
@Api(tags = "渲染端对接接口")
|
||||||
@ -37,6 +37,11 @@ public class TaskTaskController {
|
|||||||
return ApiResponse.success(respVo);
|
return ApiResponse.success(respVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{taskId}/info")
|
||||||
|
public ApiResponse<TaskRespVO> taskInfo(@PathVariable Long taskId) {
|
||||||
|
return ApiResponse.success(taskService.taskInfo(taskId));
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/template/{templateId}")
|
@PostMapping("/template/{templateId}")
|
||||||
public ApiResponse<TemplateRespVO> getTemplateById(@PathVariable Long templateId, @RequestBody WorkerAuthReqVo req) {
|
public ApiResponse<TemplateRespVO> getTemplateById(@PathVariable Long templateId, @RequestBody WorkerAuthReqVo req) {
|
||||||
return ApiResponse.success(taskService.workerGetTemplate(templateId, req));
|
return ApiResponse.success(taskService.workerGetTemplate(templateId, req));
|
||||||
@ -45,7 +50,6 @@ public class TaskTaskController {
|
|||||||
@PostMapping("/{taskId}/uploadUrl")
|
@PostMapping("/{taskId}/uploadUrl")
|
||||||
public ApiResponse<String> getUploadUrl(@PathVariable Long taskId, @RequestBody WorkerAuthReqVo req) {
|
public ApiResponse<String> getUploadUrl(@PathVariable Long taskId, @RequestBody WorkerAuthReqVo req) {
|
||||||
String urlForUpload = taskService.getUploadUrl(taskId, req);
|
String urlForUpload = taskService.getUploadUrl(taskId, req);
|
||||||
urlForUpload = urlForUpload.replace("-internal.aliyuncs.com", ".aliyuncs.com");
|
|
||||||
return ApiResponse.success(urlForUpload);
|
return ApiResponse.success(urlForUpload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
package com.ycwl.basic.controller.viid;
|
package com.ycwl.basic.controller.viid;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.thread.ThreadFactoryBuilder;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.ycwl.basic.annotation.IgnoreLogReq;
|
import com.ycwl.basic.annotation.IgnoreLogReq;
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
import com.ycwl.basic.annotation.RequestToFile;
|
|
||||||
import com.ycwl.basic.aspectj.HttpSaver;
|
|
||||||
import com.ycwl.basic.facebody.FaceBodyFactory;
|
|
||||||
import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter;
|
import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter;
|
||||||
import com.ycwl.basic.facebody.entity.AddFaceResp;
|
import com.ycwl.basic.facebody.entity.AddFaceResp;
|
||||||
import com.ycwl.basic.mapper.DeviceMapper;
|
import com.ycwl.basic.mapper.DeviceMapper;
|
||||||
@ -17,14 +14,11 @@ import com.ycwl.basic.mapper.SourceMapper;
|
|||||||
import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity;
|
import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity;
|
||||||
import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
|
import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
|
||||||
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
|
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
|
||||||
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
||||||
import com.ycwl.basic.model.viid.entity.DeviceIdObject;
|
import com.ycwl.basic.model.viid.entity.DeviceIdObject;
|
||||||
import com.ycwl.basic.model.viid.entity.FaceListObject;
|
import com.ycwl.basic.model.viid.entity.FaceListObject;
|
||||||
import com.ycwl.basic.model.viid.entity.FaceObject;
|
import com.ycwl.basic.model.viid.entity.FaceObject;
|
||||||
import com.ycwl.basic.model.viid.entity.FacePositionObject;
|
import com.ycwl.basic.model.viid.entity.FacePositionObject;
|
||||||
import com.ycwl.basic.model.viid.entity.ImageListObject;
|
|
||||||
import com.ycwl.basic.model.viid.entity.ImageObject;
|
|
||||||
import com.ycwl.basic.model.viid.entity.ResponseStatusObject;
|
import com.ycwl.basic.model.viid.entity.ResponseStatusObject;
|
||||||
import com.ycwl.basic.model.viid.entity.SubImageInfoObject;
|
import com.ycwl.basic.model.viid.entity.SubImageInfoObject;
|
||||||
import com.ycwl.basic.model.viid.entity.SubImageList;
|
import com.ycwl.basic.model.viid.entity.SubImageList;
|
||||||
@ -58,7 +52,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -69,12 +63,13 @@ import java.util.TimeZone;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.ycwl.basic.constant.StorageConstant.PHOTO_PATH;
|
import static com.ycwl.basic.constant.StorageConstant.PHOTO_PATH;
|
||||||
import static com.ycwl.basic.service.task.impl.TaskFaceServiceImpl.generateEntityId;
|
import static com.ycwl.basic.constant.StorageConstant.VIID_FACE;
|
||||||
|
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
@RestController
|
@RestController
|
||||||
@ -93,17 +88,20 @@ public class ViidController {
|
|||||||
private ScenicRepository scenicRepository;
|
private ScenicRepository scenicRepository;
|
||||||
@Autowired
|
@Autowired
|
||||||
private TaskFaceService taskFaceService;
|
private TaskFaceService taskFaceService;
|
||||||
private final Map<String, ThreadPoolExecutor> executors = new ConcurrentHashMap<>();
|
private final Map<Long, ThreadPoolExecutor> executors = new ConcurrentHashMap<>();
|
||||||
@Autowired
|
@Autowired
|
||||||
private ScenicService scenicService;
|
private ScenicService scenicService;
|
||||||
|
|
||||||
private ThreadPoolExecutor getExecutor(String deviceId) {
|
private ThreadPoolExecutor getExecutor(Long scenicId) {
|
||||||
ThreadPoolExecutor executor = executors.get(deviceId);
|
return executors.computeIfAbsent(scenicId, k -> {
|
||||||
if (executor == null) {
|
ThreadFactory threadFactory = new ThreadFactoryBuilder()
|
||||||
executor = new ThreadPoolExecutor(4, 4096, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(4096));
|
.setNamePrefix("VIID-" + scenicId + "-t")
|
||||||
executors.put(deviceId, executor);
|
.build();
|
||||||
}
|
return new ThreadPoolExecutor(
|
||||||
return executor;
|
4, 1024, 0L, TimeUnit.MILLISECONDS,
|
||||||
|
new ArrayBlockingQueue<>(1024),
|
||||||
|
threadFactory);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// region 注册注销基础接口
|
// region 注册注销基础接口
|
||||||
@ -269,7 +267,7 @@ public class ViidController {
|
|||||||
}
|
}
|
||||||
if (shotTime == null) {
|
if (shotTime == null) {
|
||||||
shotTime = new Date();
|
shotTime = new Date();
|
||||||
} else if (Math.abs(shotTime.getTime() - System.currentTimeMillis()) > + 24 * 60 * 60 * 1000) {
|
} else if (Math.abs(shotTime.getTime() - System.currentTimeMillis()) > 24 * 60 * 60 * 1000) {
|
||||||
shotTime = new Date();
|
shotTime = new Date();
|
||||||
}
|
}
|
||||||
Long scenicId = device.getScenicId();
|
Long scenicId = device.getScenicId();
|
||||||
@ -307,17 +305,17 @@ public class ViidController {
|
|||||||
faceSample.setDeviceId(device.getId());
|
faceSample.setDeviceId(device.getId());
|
||||||
faceSample.setStatus(0);
|
faceSample.setStatus(0);
|
||||||
faceSample.setCreateAt(shotTime);
|
faceSample.setCreateAt(shotTime);
|
||||||
String url = adapter.uploadFile(file, "user-face", UUID.randomUUID() + "." + ext);
|
String url = adapter.uploadFile(file, VIID_FACE, UUID.randomUUID() + "." + ext);
|
||||||
faceSample.setFaceUrl(url);
|
faceSample.setFaceUrl(url);
|
||||||
faceSampleMapper.add(faceSample);
|
faceSampleMapper.add(faceSample);
|
||||||
ThreadPoolExecutor executor = getExecutor(device.getId().toString());
|
ThreadPoolExecutor executor = getExecutor(scenicId);
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
if (faceBodyAdapter != null) {
|
if (faceBodyAdapter != null) {
|
||||||
taskFaceService.assureFaceDb(faceBodyAdapter, scenicId.toString());
|
taskFaceService.assureFaceDb(faceBodyAdapter, scenicId.toString());
|
||||||
AddFaceResp addFaceResp = faceBodyAdapter.addFace(scenicId.toString(), generateEntityId(faceSample), url, newFaceSampleId.toString());
|
AddFaceResp addFaceResp = faceBodyAdapter.addFace(scenicId.toString(), faceSample.getId().toString(), url, newFaceSampleId.toString());
|
||||||
if (addFaceResp != null) {
|
if (addFaceResp != null) {
|
||||||
faceSample.setScore(addFaceResp.getScore());
|
faceSample.setScore(addFaceResp.getScore());
|
||||||
faceSampleMapper.update(faceSample);
|
faceSampleMapper.updateScore(faceSample.getId(), addFaceResp.getScore());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (deviceConfig != null && Integer.valueOf(1).equals(deviceConfig.getEnablePreBook())) {
|
if (deviceConfig != null && Integer.valueOf(1).equals(deviceConfig.getEnablePreBook())) {
|
||||||
@ -368,21 +366,21 @@ public class ViidController {
|
|||||||
faceSample.setDeviceId(device.getId());
|
faceSample.setDeviceId(device.getId());
|
||||||
faceSample.setStatus(0);
|
faceSample.setStatus(0);
|
||||||
faceSample.setCreateAt(shotTime);
|
faceSample.setCreateAt(shotTime);
|
||||||
String url = adapter.uploadFile(file, "user-face", UUID.randomUUID() + "." + ext);
|
String url = adapter.uploadFile(file, VIID_FACE, UUID.randomUUID() + "." + ext);
|
||||||
faceSample.setFaceUrl(url);
|
faceSample.setFaceUrl(url);
|
||||||
faceSampleMapper.add(faceSample);
|
faceSampleMapper.add(faceSample);
|
||||||
DynamicTaskGenerator.addTask(faceSample.getId());
|
DynamicTaskGenerator.addTask(faceSample.getId());
|
||||||
ThreadPoolExecutor executor = getExecutor(device.getId().toString());
|
ThreadPoolExecutor executor = getExecutor(scenicId);
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
if (faceBodyAdapter != null) {
|
if (faceBodyAdapter != null) {
|
||||||
taskFaceService.assureFaceDb(faceBodyAdapter, scenicId.toString());
|
taskFaceService.assureFaceDb(faceBodyAdapter, scenicId.toString());
|
||||||
AddFaceResp addFaceResp = faceBodyAdapter.addFace(scenicId.toString(), generateEntityId(faceSample), url, newFaceSampleId.toString());
|
AddFaceResp addFaceResp = faceBodyAdapter.addFace(scenicId.toString(), faceSample.getId().toString(), url, newFaceSampleId.toString());
|
||||||
if (addFaceResp != null) {
|
if (addFaceResp != null) {
|
||||||
faceSample.setScore(addFaceResp.getScore());
|
faceSample.setScore(addFaceResp.getScore());
|
||||||
faceSampleMapper.update(faceSample);
|
faceSampleMapper.updateScore(faceSample.getId(), addFaceResp.getScore());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (deviceConfig != null && Integer.valueOf(1).equals(deviceConfig.getEnablePreBook())) {
|
if (Integer.valueOf(1).equals(deviceConfig.getEnablePreBook())) {
|
||||||
DynamicTaskGenerator.addTask(faceSample.getId());
|
DynamicTaskGenerator.addTask(faceSample.getId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -402,8 +400,6 @@ public class ViidController {
|
|||||||
@RequestMapping(value = "/Images", method = RequestMethod.POST)
|
@RequestMapping(value = "/Images", method = RequestMethod.POST)
|
||||||
@IgnoreLogReq
|
@IgnoreLogReq
|
||||||
public VIIDBaseResp images(HttpServletRequest request, @RequestBody ImageUploadReq req) throws IOException {
|
public VIIDBaseResp images(HttpServletRequest request, @RequestBody ImageUploadReq req) throws IOException {
|
||||||
// log.info("Images:{}", req);
|
|
||||||
HttpSaver.saveRequestToFile(request);
|
|
||||||
return new VIIDBaseResp(
|
return new VIIDBaseResp(
|
||||||
new ResponseStatusObject("1", "/VIID/Images", "0", "OK", sdfTime.format(new Date()))
|
new ResponseStatusObject("1", "/VIID/Images", "0", "OK", sdfTime.format(new Date()))
|
||||||
);
|
);
|
||||||
|
@ -1,25 +1,18 @@
|
|||||||
package com.ycwl.basic.controller.vpt;
|
package com.ycwl.basic.controller.vpt;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.ycwl.basic.annotation.IgnoreLogReq;
|
import com.ycwl.basic.annotation.IgnoreLogReq;
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
import com.ycwl.basic.constant.StorageConstant;
|
import com.ycwl.basic.constant.StorageConstant;
|
||||||
import com.ycwl.basic.device.entity.common.FileObject;
|
import com.ycwl.basic.device.entity.common.FileObject;
|
||||||
import com.ycwl.basic.device.operator.VptPassiveStorageOperator;
|
import com.ycwl.basic.device.operator.VptPassiveStorageOperator;
|
||||||
import com.ycwl.basic.device.operator.VptPassiveStorageOperator;
|
|
||||||
import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter;
|
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
|
||||||
import com.ycwl.basic.model.wvp.WvpSyncReqVo;
|
import com.ycwl.basic.model.wvp.WvpSyncReqVo;
|
||||||
import com.ycwl.basic.repository.ScenicRepository;
|
|
||||||
import com.ycwl.basic.service.pc.ScenicService;
|
import com.ycwl.basic.service.pc.ScenicService;
|
||||||
import com.ycwl.basic.storage.StorageFactory;
|
|
||||||
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
||||||
import com.ycwl.basic.storage.enums.StorageAcl;
|
import com.ycwl.basic.storage.enums.StorageAcl;
|
||||||
import com.ycwl.basic.storage.utils.StorageUtil;
|
import com.ycwl.basic.storage.utils.StorageUtil;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -29,7 +22,6 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
@ -48,7 +40,7 @@ public class VptController {
|
|||||||
}
|
}
|
||||||
@PostMapping("/scenic/{scenicId}/{taskId}/uploadUrl")
|
@PostMapping("/scenic/{scenicId}/{taskId}/uploadUrl")
|
||||||
public String uploadUrl(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId) {
|
public String uploadUrl(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId) {
|
||||||
IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenicId);
|
IStorageAdapter adapter = scenicService.getScenicLocalStorageAdapter(scenicId);
|
||||||
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
||||||
String urlForUpload = adapter.getUrlForUpload(new Date(System.currentTimeMillis() + 1000 * 60 * 60), "video/mp4", filename);
|
String urlForUpload = adapter.getUrlForUpload(new Date(System.currentTimeMillis() + 1000 * 60 * 60), "video/mp4", filename);
|
||||||
urlForUpload = urlForUpload.replace("-internal.aliyuncs.com", ".aliyuncs.com");
|
urlForUpload = urlForUpload.replace("-internal.aliyuncs.com", ".aliyuncs.com");
|
||||||
@ -56,7 +48,7 @@ public class VptController {
|
|||||||
}
|
}
|
||||||
@PostMapping("/scenic/{scenicId}/{taskId}/success")
|
@PostMapping("/scenic/{scenicId}/{taskId}/success")
|
||||||
public ApiResponse<String> success(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId, @RequestBody FileObject fileObject) {
|
public ApiResponse<String> success(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId, @RequestBody FileObject fileObject) {
|
||||||
IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenicId);
|
IStorageAdapter adapter = scenicService.getScenicLocalStorageAdapter(scenicId);
|
||||||
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
||||||
fileObject.setUrl(adapter.getUrl(filename));
|
fileObject.setUrl(adapter.getUrl(filename));
|
||||||
adapter.setAcl(StorageAcl.PUBLIC_READ, filename);
|
adapter.setAcl(StorageAcl.PUBLIC_READ, filename);
|
||||||
|
@ -1,24 +1,19 @@
|
|||||||
package com.ycwl.basic.controller.wvp;
|
package com.ycwl.basic.controller.wvp;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.ycwl.basic.annotation.IgnoreLogReq;
|
import com.ycwl.basic.annotation.IgnoreLogReq;
|
||||||
import com.ycwl.basic.annotation.IgnoreToken;
|
import com.ycwl.basic.annotation.IgnoreToken;
|
||||||
import com.ycwl.basic.constant.StorageConstant;
|
import com.ycwl.basic.constant.StorageConstant;
|
||||||
import com.ycwl.basic.device.entity.common.FileObject;
|
import com.ycwl.basic.device.entity.common.FileObject;
|
||||||
import com.ycwl.basic.device.operator.WvpPassiveStorageOperator;
|
import com.ycwl.basic.device.operator.WvpPassiveStorageOperator;
|
||||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
|
||||||
import com.ycwl.basic.model.wvp.WvpSyncReqVo;
|
import com.ycwl.basic.model.wvp.WvpSyncReqVo;
|
||||||
import com.ycwl.basic.repository.ScenicRepository;
|
|
||||||
import com.ycwl.basic.service.pc.DeviceService;
|
import com.ycwl.basic.service.pc.DeviceService;
|
||||||
import com.ycwl.basic.service.pc.ScenicService;
|
import com.ycwl.basic.service.pc.ScenicService;
|
||||||
import com.ycwl.basic.storage.StorageFactory;
|
|
||||||
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
import com.ycwl.basic.storage.adapters.IStorageAdapter;
|
||||||
import com.ycwl.basic.storage.enums.StorageAcl;
|
import com.ycwl.basic.storage.enums.StorageAcl;
|
||||||
import com.ycwl.basic.storage.utils.StorageUtil;
|
import com.ycwl.basic.storage.utils.StorageUtil;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -28,7 +23,6 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@IgnoreToken
|
@IgnoreToken
|
||||||
@ -51,7 +45,7 @@ public class WvpController {
|
|||||||
|
|
||||||
@PostMapping("/scenic/{scenicId}/{taskId}/uploadUrl")
|
@PostMapping("/scenic/{scenicId}/{taskId}/uploadUrl")
|
||||||
public String uploadUrl(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId) {
|
public String uploadUrl(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId) {
|
||||||
IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenicId);
|
IStorageAdapter adapter = scenicService.getScenicLocalStorageAdapter(scenicId);
|
||||||
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
||||||
String urlForUpload = adapter.getUrlForUpload(new Date(System.currentTimeMillis() + 1000 * 60 * 60), "video/mp4", filename);
|
String urlForUpload = adapter.getUrlForUpload(new Date(System.currentTimeMillis() + 1000 * 60 * 60), "video/mp4", filename);
|
||||||
urlForUpload = urlForUpload.replace("-internal.aliyuncs.com", ".aliyuncs.com");
|
urlForUpload = urlForUpload.replace("-internal.aliyuncs.com", ".aliyuncs.com");
|
||||||
@ -59,7 +53,7 @@ public class WvpController {
|
|||||||
}
|
}
|
||||||
@PostMapping("/scenic/{scenicId}/{taskId}/success")
|
@PostMapping("/scenic/{scenicId}/{taskId}/success")
|
||||||
public ApiResponse<String> success(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId, @RequestBody FileObject fileObject) {
|
public ApiResponse<String> success(@PathVariable("scenicId") Long scenicId, @PathVariable("taskId") Long taskId, @RequestBody FileObject fileObject) {
|
||||||
IStorageAdapter adapter = scenicService.getScenicStorageAdapter(scenicId);
|
IStorageAdapter adapter = scenicService.getScenicLocalStorageAdapter(scenicId);
|
||||||
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
String filename = StorageUtil.joinPath(StorageConstant.VIDEO_PIECE_PATH, taskId.toString() + ".mp4");
|
||||||
fileObject.setUrl(adapter.getUrl(filename));
|
fileObject.setUrl(adapter.getUrl(filename));
|
||||||
adapter.setAcl(StorageAcl.PUBLIC_READ, filename);
|
adapter.setAcl(StorageAcl.PUBLIC_READ, filename);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.ycwl.basic.device.operator;
|
package com.ycwl.basic.device.operator;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.ycwl.basic.device.entity.common.FileObject;
|
import com.ycwl.basic.device.entity.common.FileObject;
|
||||||
import com.ycwl.basic.device.entity.vpt_passive.VptPassiveStorageConfig;
|
import com.ycwl.basic.device.entity.vpt_passive.VptPassiveStorageConfig;
|
||||||
import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig;
|
import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig;
|
||||||
@ -9,6 +11,7 @@ import com.ycwl.basic.storage.utils.StorageUtil;
|
|||||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -16,6 +19,7 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -25,12 +29,18 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
public Long scenicId;
|
public Long scenicId;
|
||||||
public Long deviceId;
|
public Long deviceId;
|
||||||
public String deviceNo;
|
public String deviceNo;
|
||||||
|
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
public Date startTime;
|
public Date startTime;
|
||||||
|
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
public Date endTime;
|
public Date endTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Task> taskList = new CopyOnWriteArrayList<>();
|
private static List<Task> taskList = new CopyOnWriteArrayList<>();
|
||||||
private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>();
|
private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>();
|
||||||
|
private static RedisTemplate<String, String> redisTemplate = null;
|
||||||
|
private static final String TASK_KEY = "vpt:task:s%s:d%s:";
|
||||||
|
|
||||||
private VptPassiveStorageConfig config;
|
private VptPassiveStorageConfig config;
|
||||||
|
|
||||||
@ -38,6 +48,10 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
loadConfig(configJson);
|
loadConfig(configJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
|
||||||
|
VptPassiveStorageOperator.redisTemplate = redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
public static void onReceiveResult(Long taskId, FileObject fileObject) {
|
public static void onReceiveResult(Long taskId, FileObject fileObject) {
|
||||||
if (fileObject == null) {
|
if (fileObject == null) {
|
||||||
log.info("任务{}获取视频失败!", taskId);
|
log.info("任务{}获取视频失败!", taskId);
|
||||||
@ -77,7 +91,11 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
}
|
}
|
||||||
task.startTime = startDate;
|
task.startTime = startDate;
|
||||||
task.endTime = endDate;
|
task.endTime = endDate;
|
||||||
|
if (redisTemplate == null) {
|
||||||
taskList.add(task);
|
taskList.add(task);
|
||||||
|
} else {
|
||||||
|
redisTemplate.opsForValue().set(String.format(TASK_KEY, task.scenicId, task.deviceNo) + task.taskId, JSON.toJSONString(task), 10 * 60L, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
log.info("任务{}获取视频开始!共{}", task.taskId, taskList.size());
|
log.info("任务{}获取视频开始!共{}", task.taskId, taskList.size());
|
||||||
Date taskStartTime = new Date();
|
Date taskStartTime = new Date();
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -99,6 +117,7 @@ public class VptPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
//noinspection BusyWait 得等待
|
||||||
Thread.sleep(1000L);
|
Thread.sleep(1000L);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package com.ycwl.basic.device.operator;
|
package com.ycwl.basic.device.operator;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.ycwl.basic.device.entity.common.FileObject;
|
import com.ycwl.basic.device.entity.common.FileObject;
|
||||||
import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig;
|
import com.ycwl.basic.device.entity.wvp_passive.WvpPassiveStorageConfig;
|
||||||
import com.ycwl.basic.storage.utils.StorageUtil;
|
import com.ycwl.basic.storage.utils.StorageUtil;
|
||||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -14,21 +17,29 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
|
public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
|
||||||
|
|
||||||
public static class Task {
|
public static class Task {
|
||||||
public Long taskId;
|
public Long taskId;
|
||||||
public Long scenicId;
|
public Long scenicId;
|
||||||
public Long deviceId;
|
public Long deviceId;
|
||||||
public String deviceNo;
|
public String deviceNo;
|
||||||
|
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
public Date startTime;
|
public Date startTime;
|
||||||
|
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
public Date endTime;
|
public Date endTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Task> taskList = new CopyOnWriteArrayList<>();
|
private static List<Task> taskList = new CopyOnWriteArrayList<>();
|
||||||
private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>();
|
private static ConcurrentHashMap<Long, FileObject> fileListMap = new ConcurrentHashMap<>();
|
||||||
|
private static RedisTemplate<String, String> redisTemplate = null;
|
||||||
|
private static final String TASK_KEY = "wvp:task:s%s:d%s:";
|
||||||
|
|
||||||
private WvpPassiveStorageConfig config;
|
private WvpPassiveStorageConfig config;
|
||||||
|
|
||||||
@ -36,6 +47,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
loadConfig(configJson);
|
loadConfig(configJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
|
||||||
|
WvpPassiveStorageOperator.redisTemplate = redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
public static void onReceiveResult(Long taskId, FileObject fileObject) {
|
public static void onReceiveResult(Long taskId, FileObject fileObject) {
|
||||||
if (fileObject == null) {
|
if (fileObject == null) {
|
||||||
log.info("任务{}获取视频失败!", taskId);
|
log.info("任务{}获取视频失败!", taskId);
|
||||||
@ -72,7 +88,11 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
}
|
}
|
||||||
task.startTime = startDate;
|
task.startTime = startDate;
|
||||||
task.endTime = endDate;
|
task.endTime = endDate;
|
||||||
|
if (redisTemplate == null) {
|
||||||
taskList.add(task);
|
taskList.add(task);
|
||||||
|
} else {
|
||||||
|
redisTemplate.opsForValue().set(String.format(TASK_KEY, task.scenicId, task.deviceNo) + task.taskId, JSON.toJSONString(task), 10 * 60L, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
Date taskStartTime = new Date();
|
Date taskStartTime = new Date();
|
||||||
while (true) {
|
while (true) {
|
||||||
if (new Date().getTime() - taskStartTime.getTime() > 60000L) {
|
if (new Date().getTime() - taskStartTime.getTime() > 60000L) {
|
||||||
@ -93,6 +113,7 @@ public class WvpPassiveStorageOperator extends ADeviceStorageOperator {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
//noinspection BusyWait 得等待
|
||||||
Thread.sleep(1000L);
|
Thread.sleep(1000L);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.ycwl.basic.device.starter;
|
||||||
|
|
||||||
|
import com.ycwl.basic.device.operator.VptPassiveStorageOperator;
|
||||||
|
import com.ycwl.basic.device.operator.WvpPassiveStorageOperator;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class DeviceStorageOperatorStarter implements InitializingBean {
|
||||||
|
@Autowired
|
||||||
|
private RedisTemplate<String, String> redisTemplate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() {
|
||||||
|
WvpPassiveStorageOperator.setRedisTemplate(redisTemplate);
|
||||||
|
VptPassiveStorageOperator.setRedisTemplate(redisTemplate);
|
||||||
|
}
|
||||||
|
}
|
@ -1,20 +0,0 @@
|
|||||||
package com.ycwl.basic.enums;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否同意用户协议枚举
|
|
||||||
*
|
|
||||||
* @author songmingsong
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public enum AgreementEnum {
|
|
||||||
AGREE(1, "同意"),
|
|
||||||
NOT_AGREE(0, "未同意");
|
|
||||||
private int type;
|
|
||||||
private String remark;
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
package com.ycwl.basic.enums;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author:longbinbin
|
|
||||||
* @Date:2024/12/6 16:46
|
|
||||||
*/
|
|
||||||
public enum GoodsTypeEnum {
|
|
||||||
VIDEO(1,"成片"),
|
|
||||||
SOURCE(2,"源素材")
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
public Integer code;
|
|
||||||
|
|
||||||
private String value;
|
|
||||||
public static final Map<Integer, GoodsTypeEnum> cacheMap;
|
|
||||||
|
|
||||||
static {
|
|
||||||
cacheMap = new HashMap<>(GoodsTypeEnum.values().length);
|
|
||||||
for (GoodsTypeEnum value : GoodsTypeEnum.values()) {
|
|
||||||
cacheMap.put(value.code, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static final java.util.Map<String, GoodsTypeEnum> valueMap;
|
|
||||||
|
|
||||||
static {
|
|
||||||
valueMap = new HashMap<>(GoodsTypeEnum.values().length);
|
|
||||||
for (GoodsTypeEnum value : GoodsTypeEnum.values()) {
|
|
||||||
valueMap.put(value.value, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GoodsTypeEnum(Integer code, String value) {
|
|
||||||
this.code = code;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取value值
|
|
||||||
*/
|
|
||||||
public static String getValue(Integer noticeMethod) {
|
|
||||||
if (noticeMethod == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
GoodsTypeEnum GoodsTypeEnum = cacheMap.get(noticeMethod);
|
|
||||||
if (GoodsTypeEnum == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return GoodsTypeEnum.value;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 获取code值
|
|
||||||
*/
|
|
||||||
public static Integer getCode(String noticeMethod) {
|
|
||||||
if (noticeMethod == null) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
GoodsTypeEnum GoodsTypeEnum = valueMap.get(noticeMethod);
|
|
||||||
if (GoodsTypeEnum == null) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return GoodsTypeEnum.code;
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,11 +2,13 @@ package com.ycwl.basic.exception;
|
|||||||
|
|
||||||
import com.ycwl.basic.enums.BizCodeEnum;
|
import com.ycwl.basic.enums.BizCodeEnum;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author songminsgong
|
* @author songminsgong
|
||||||
* @since 2022-11-23
|
* @since 2022-11-23
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class AppException extends RuntimeException {
|
public class AppException extends RuntimeException {
|
||||||
|
|
||||||
|
@ -2,11 +2,13 @@ package com.ycwl.basic.exception;
|
|||||||
|
|
||||||
import com.ycwl.basic.enums.BizCodeEnum;
|
import com.ycwl.basic.enums.BizCodeEnum;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author wenshijia
|
* @author wenshijia
|
||||||
* @date 2021年05月25日 22:41
|
* @date 2021年05月25日 22:41
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class BizException extends RuntimeException {
|
public class BizException extends RuntimeException {
|
||||||
|
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package com.ycwl.basic.exception;
|
package com.ycwl.basic.exception;
|
||||||
|
|
||||||
import com.ycwl.basic.aspectj.HttpSaver;
|
|
||||||
import com.ycwl.basic.enums.BizCodeEnum;
|
import com.ycwl.basic.enums.BizCodeEnum;
|
||||||
import com.ycwl.basic.notify.NotifyFactory;
|
|
||||||
import com.ycwl.basic.notify.entity.NotifyContent;
|
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException;
|
import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -12,14 +10,11 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.springframework.http.converter.HttpMessageNotReadableException;
|
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
|
||||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @date 2022年09月23日 10:19
|
* @date 2022年09月23日 10:19
|
||||||
@ -58,13 +53,21 @@ public class CustomExceptionHandle {
|
|||||||
* 自定义异常统一处理类
|
* 自定义异常统一处理类
|
||||||
*/
|
*/
|
||||||
@ExceptionHandler(value = BizException.class)
|
@ExceptionHandler(value = BizException.class)
|
||||||
public ApiResponse<String> handle(BizException bizException) {
|
public ApiResponse<String> handle(HttpServletResponse response, BizException bizException) {
|
||||||
|
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||||
return ApiResponse.buildResponse(bizException.getCode(), bizException.getMsg());
|
return ApiResponse.buildResponse(bizException.getCode(), bizException.getMsg());
|
||||||
}
|
}
|
||||||
|
@ExceptionHandler(value = MethodArgumentTypeMismatchException.class)
|
||||||
|
public ApiResponse<String> handle(HttpServletRequest request, HttpServletResponse response, MethodArgumentTypeMismatchException exception) {
|
||||||
|
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||||
|
LOGGER.error("参数错误 -> 请求地址:{},请求方式:{}", request.getRequestURI(), request.getMethod());
|
||||||
|
return ApiResponse.buildResponse(5000, "参数错误!");
|
||||||
|
}
|
||||||
|
|
||||||
@ExceptionHandler(value =IOException.class)
|
@ExceptionHandler(value =IOException.class)
|
||||||
public ApiResponse<String> handle(IOException e) {
|
public ApiResponse<String> handle(HttpServletResponse response, IOException e) {
|
||||||
LOGGER.error("系统异常 -> {}", e.getMessage(), e);
|
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||||
|
LOGGER.error("IO异常 -> {}", e.getMessage(), e);
|
||||||
return ApiResponse.buildResult(BizCodeEnum.SERVER_UNKONWN_ERROR);
|
return ApiResponse.buildResult(BizCodeEnum.SERVER_UNKONWN_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +75,8 @@ public class CustomExceptionHandle {
|
|||||||
* 异常统一返回处理
|
* 异常统一返回处理
|
||||||
*/
|
*/
|
||||||
@ExceptionHandler(value = Exception.class)
|
@ExceptionHandler(value = Exception.class)
|
||||||
public ApiResponse<String> handle(Exception e) {
|
public ApiResponse<String> handle(HttpServletResponse response, Exception e) {
|
||||||
|
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||||
LOGGER.error("系统异常 -> {}", e.getMessage(), e);
|
LOGGER.error("系统异常 -> {}", e.getMessage(), e);
|
||||||
return ApiResponse.buildResult(BizCodeEnum.SERVER_UNKONWN_ERROR);
|
return ApiResponse.buildResult(BizCodeEnum.SERVER_UNKONWN_ERROR);
|
||||||
}
|
}
|
||||||
@ -81,7 +85,8 @@ public class CustomExceptionHandle {
|
|||||||
* 移动端自定义异常统一处理类
|
* 移动端自定义异常统一处理类
|
||||||
*/
|
*/
|
||||||
@ExceptionHandler(value = AppException.class)
|
@ExceptionHandler(value = AppException.class)
|
||||||
public ApiResponse<String> handle(AppException appException) {
|
public ApiResponse<String> handle(HttpServletResponse response, AppException appException) {
|
||||||
|
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||||
return ApiResponse.buildResponse(appException.getCode(), appException.getMsg());
|
return ApiResponse.buildResponse(appException.getCode(), appException.getMsg());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +94,8 @@ public class CustomExceptionHandle {
|
|||||||
* 移动端自定义异常统一处理类
|
* 移动端自定义异常统一处理类
|
||||||
*/
|
*/
|
||||||
@ExceptionHandler(value = HttpMessageNotReadableException.class)
|
@ExceptionHandler(value = HttpMessageNotReadableException.class)
|
||||||
public ApiResponse<String> handle(HttpMessageNotReadableException httpMessageNotReadableException) {
|
public ApiResponse<String> handle(HttpServletResponse response, HttpMessageNotReadableException httpMessageNotReadableException) {
|
||||||
|
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
|
||||||
return ApiResponse.buildResponse(500, "请求参数格式错误");
|
return ApiResponse.buildResponse(500, "请求参数格式错误");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,14 +23,11 @@ public class FaceBodyFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static IFaceBodyAdapter getAdapter(FaceBodyAdapterType type) {
|
public static IFaceBodyAdapter getAdapter(FaceBodyAdapterType type) {
|
||||||
switch (type) {
|
return switch (type) {
|
||||||
case ALI:
|
case ALI -> new AliFaceBodyAdapter();
|
||||||
return new AliFaceBodyAdapter();
|
case BCE -> new BceFaceBodyAdapter();
|
||||||
case BCE:
|
default -> throw new FaceBodyUnsupportedException("不支持的Adapter类型");
|
||||||
return new BceFaceBodyAdapter();
|
};
|
||||||
default:
|
|
||||||
throw new FaceBodyUnsupportedException("不支持的Adapter类型");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -62,33 +63,31 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private IRateLimiter getLimiter(LOCK_TYPE type) {
|
private IRateLimiter getLimiter(LOCK_TYPE type) {
|
||||||
switch (type) {
|
return switch (type) {
|
||||||
case ADD_DB:
|
case ADD_DB ->
|
||||||
return addDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
addDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||||
case ADD_ENTITY:
|
case ADD_ENTITY ->
|
||||||
return addEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
addEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||||
case ADD_FACE:
|
case ADD_FACE ->
|
||||||
return addFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
addFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||||
case LIST_DB:
|
case LIST_DB ->
|
||||||
return listDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(500, TimeUnit.MILLISECONDS));
|
listDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(500, TimeUnit.MILLISECONDS));
|
||||||
case LIST_FACE:
|
case LIST_FACE -> listFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(2));
|
||||||
return listFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(2));
|
case SEARCH_FACE ->
|
||||||
case SEARCH_FACE:
|
searchFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(200, TimeUnit.MILLISECONDS));
|
||||||
return searchFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(200, TimeUnit.MILLISECONDS));
|
case DELETE_DB ->
|
||||||
case DELETE_DB:
|
deleteDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||||
return deleteDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
case DELETE_ENTITY ->
|
||||||
case DELETE_ENTITY:
|
deleteEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||||
return deleteEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
default -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS);
|
||||||
default:
|
};
|
||||||
return new FixedRateLimiter(600, TimeUnit.MILLISECONDS);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean addFaceDb(String dbName) {
|
public boolean addFaceDb(String dbName) {
|
||||||
IRateLimiter addDbLimiter = getLimiter(LOCK_TYPE.ADD_DB);
|
IRateLimiter addDbLimiter = getLimiter(LOCK_TYPE.ADD_DB);
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
CreateFaceDbRequest request = new CreateFaceDbRequest();
|
CreateFaceDbRequest request = new CreateFaceDbRequest();
|
||||||
request.setName(dbName);
|
request.setName(dbName);
|
||||||
try {
|
try {
|
||||||
@ -109,9 +108,10 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
IRateLimiter deleteEntityLimiter = getLimiter(LOCK_TYPE.DELETE_ENTITY);
|
IRateLimiter deleteEntityLimiter = getLimiter(LOCK_TYPE.DELETE_ENTITY);
|
||||||
IRateLimiter deleteDbLimiter = getLimiter(LOCK_TYPE.DELETE_DB);
|
IRateLimiter deleteDbLimiter = getLimiter(LOCK_TYPE.DELETE_DB);
|
||||||
request.setDbName(dbName);
|
request.setDbName(dbName);
|
||||||
|
request.setOrder("asc");
|
||||||
request.setLimit(200);
|
request.setLimit(200);
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
while (true) {
|
while (true) {
|
||||||
ListFaceEntitiesResponse response = client.getAcsResponse(request);
|
ListFaceEntitiesResponse response = client.getAcsResponse(request);
|
||||||
if (response.getData().getTotalCount() == 0) {
|
if (response.getData().getTotalCount() == 0) {
|
||||||
@ -150,7 +150,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
public List<String> listFaceDb() {
|
public List<String> listFaceDb() {
|
||||||
ListFaceDbsRequest request = new ListFaceDbsRequest();
|
ListFaceDbsRequest request = new ListFaceDbsRequest();
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
ListFaceDbsResponse response = client.getAcsResponse(request);
|
ListFaceDbsResponse response = client.getAcsResponse(request);
|
||||||
return response.getData().getDbList().stream().map(ListFaceDbsResponse.Data.DbListItem::getName).collect(Collectors.toList());
|
return response.getData().getDbList().stream().map(ListFaceDbsResponse.Data.DbListItem::getName).collect(Collectors.toList());
|
||||||
} catch (ClientException e) {
|
} catch (ClientException e) {
|
||||||
@ -167,7 +167,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
request.setDbName(dbName);
|
request.setDbName(dbName);
|
||||||
request.setEntityId(entityId);
|
request.setEntityId(entityId);
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
try {
|
try {
|
||||||
addEntityLimiter.acquire();
|
addEntityLimiter.acquire();
|
||||||
} catch (InterruptedException ignored) {
|
} catch (InterruptedException ignored) {
|
||||||
@ -206,7 +206,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
request.setDbName(dbName);
|
request.setDbName(dbName);
|
||||||
request.setEntityId(entityId);
|
request.setEntityId(entityId);
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
try {
|
try {
|
||||||
deleteEntityLimiter.acquire();
|
deleteEntityLimiter.acquire();
|
||||||
} catch (InterruptedException ignored) {
|
} catch (InterruptedException ignored) {
|
||||||
@ -230,16 +230,12 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
if (offset != null) {
|
if (offset != null) {
|
||||||
listFaceEntitiesRequest.setOffset(offset);
|
listFaceEntitiesRequest.setOffset(offset);
|
||||||
}
|
}
|
||||||
if (size != null) {
|
listFaceEntitiesRequest.setLimit(Objects.requireNonNullElse(size, 200));
|
||||||
listFaceEntitiesRequest.setLimit(size);
|
|
||||||
} else {
|
|
||||||
listFaceEntitiesRequest.setLimit(200);
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotEmpty(prefix)) {
|
if (StringUtils.isNotEmpty(prefix)) {
|
||||||
listFaceEntitiesRequest.setEntityIdPrefix(prefix);
|
listFaceEntitiesRequest.setEntityIdPrefix(prefix);
|
||||||
}
|
}
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
try {
|
try {
|
||||||
listFaceLimiter.acquire();
|
listFaceLimiter.acquire();
|
||||||
} catch (InterruptedException ignored) {
|
} catch (InterruptedException ignored) {
|
||||||
@ -249,7 +245,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
return response.getData().getEntities().stream().map(ListFaceEntitiesResponse.Data.Entity::getEntityId).collect(Collectors.toList());
|
return response.getData().getEntities().stream().map(ListFaceEntitiesResponse.Data.Entity::getEntityId).collect(Collectors.toList());
|
||||||
} catch (ClientException e) {
|
} catch (ClientException e) {
|
||||||
log.error("获取人脸数据失败!", e);
|
log.error("获取人脸数据失败!", e);
|
||||||
return null;
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -259,7 +255,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
SearchFaceResp resp = new SearchFaceResp();
|
SearchFaceResp resp = new SearchFaceResp();
|
||||||
IRateLimiter searchFaceLimiter = getLimiter(LOCK_TYPE.SEARCH_FACE);
|
IRateLimiter searchFaceLimiter = getLimiter(LOCK_TYPE.SEARCH_FACE);
|
||||||
try (ClientWrapper clientWrapper = getClient()) {
|
try (ClientWrapper clientWrapper = getClient()) {
|
||||||
IAcsClient client = clientWrapper.getClient();
|
IAcsClient client = clientWrapper.client();
|
||||||
SearchFaceRequest request = new SearchFaceRequest();
|
SearchFaceRequest request = new SearchFaceRequest();
|
||||||
request.setDbName(dbName);
|
request.setDbName(dbName);
|
||||||
request.setImageUrl(faceUrl);
|
request.setImageUrl(faceUrl);
|
||||||
@ -275,7 +271,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
resp.setOriginalFaceScore(0f);
|
resp.setOriginalFaceScore(0f);
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
SearchFaceResponse.Data.MatchListItem matchItem = matchList.get(0);
|
SearchFaceResponse.Data.MatchListItem matchItem = matchList.getFirst();
|
||||||
resp.setOriginalFaceScore(matchItem.getQualitieScore());
|
resp.setOriginalFaceScore(matchItem.getQualitieScore());
|
||||||
resp.setResult(matchItem.getFaceItems().stream().map(item -> {
|
resp.setResult(matchItem.getFaceItems().stream().map(item -> {
|
||||||
SearchFaceResultItem resultItem = new SearchFaceResultItem();
|
SearchFaceResultItem resultItem = new SearchFaceResultItem();
|
||||||
@ -286,7 +282,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
return resultItem;
|
return resultItem;
|
||||||
}).collect(Collectors.toList()));
|
}).collect(Collectors.toList()));
|
||||||
if (!resp.getResult().isEmpty()) {
|
if (!resp.getResult().isEmpty()) {
|
||||||
resp.setFirstMatchRate(resp.getResult().get(0).getScore());
|
resp.setFirstMatchRate(resp.getResult().getFirst().getScore());
|
||||||
}
|
}
|
||||||
return resp;
|
return resp;
|
||||||
} catch (ClientException e) {
|
} catch (ClientException e) {
|
||||||
@ -303,13 +299,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
return new ClientWrapper(client);
|
return new ClientWrapper(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
public record ClientWrapper(IAcsClient client) implements AutoCloseable {
|
||||||
public static class ClientWrapper implements AutoCloseable {
|
|
||||||
private final IAcsClient client;
|
|
||||||
|
|
||||||
public ClientWrapper(IAcsClient client) {
|
|
||||||
this.client = client;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
@ -318,7 +308,6 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
}
|
}
|
||||||
client.shutdown();
|
client.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
protected enum LOCK_TYPE {
|
protected enum LOCK_TYPE {
|
||||||
ADD_DB,
|
ADD_DB,
|
||||||
|
@ -2,13 +2,11 @@ package com.ycwl.basic.facebody.adapter;
|
|||||||
|
|
||||||
import com.baidu.aip.face.AipFace;
|
import com.baidu.aip.face.AipFace;
|
||||||
import com.ycwl.basic.facebody.entity.AddFaceResp;
|
import com.ycwl.basic.facebody.entity.AddFaceResp;
|
||||||
import com.ycwl.basic.facebody.entity.AliFaceBodyConfig;
|
|
||||||
import com.ycwl.basic.facebody.entity.BceFaceBodyConfig;
|
import com.ycwl.basic.facebody.entity.BceFaceBodyConfig;
|
||||||
import com.ycwl.basic.facebody.entity.SearchFaceResp;
|
import com.ycwl.basic.facebody.entity.SearchFaceResp;
|
||||||
import com.ycwl.basic.facebody.entity.SearchFaceResultItem;
|
import com.ycwl.basic.facebody.entity.SearchFaceResultItem;
|
||||||
import com.ycwl.basic.utils.ratelimiter.FixedRateLimiter;
|
import com.ycwl.basic.utils.ratelimiter.FixedRateLimiter;
|
||||||
import com.ycwl.basic.utils.ratelimiter.IRateLimiter;
|
import com.ycwl.basic.utils.ratelimiter.IRateLimiter;
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -23,7 +21,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
||||||
@ -172,6 +169,9 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
AipFace client = getClient();
|
AipFace client = getClient();
|
||||||
HashMap<String, String> options = new HashMap<>();
|
HashMap<String, String> options = new HashMap<>();
|
||||||
List<String> tokenList = listUserFace(dbName, entityId);
|
List<String> tokenList = listUserFace(dbName, entityId);
|
||||||
|
if (tokenList == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
AtomicInteger count = new AtomicInteger(0);
|
AtomicInteger count = new AtomicInteger(0);
|
||||||
tokenList.forEach(faceToken -> {
|
tokenList.forEach(faceToken -> {
|
||||||
try {
|
try {
|
||||||
@ -232,13 +232,19 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<String> listUserFace(String dbName, String entityId) {
|
public List<String> listUserFace(String dbName, String entityId) {
|
||||||
|
IRateLimiter listFaceLimiter = getLimiter(LOCK_TYPE.LIST_FACE);
|
||||||
try {
|
try {
|
||||||
AipFace client = getClient();
|
AipFace client = getClient();
|
||||||
HashMap<String, String> options = new HashMap<>();
|
HashMap<String, String> options = new HashMap<>();
|
||||||
|
try {
|
||||||
|
listFaceLimiter.acquire();
|
||||||
|
} catch (InterruptedException ignored) {
|
||||||
|
}
|
||||||
JSONObject response = client.faceGetlist(entityId, dbName, options);
|
JSONObject response = client.faceGetlist(entityId, dbName, options);
|
||||||
if (response.getInt("error_code") == 0) {
|
if (response.getInt("error_code") == 0) {
|
||||||
JSONObject resultObj = response.getJSONObject("result");
|
JSONObject resultObj = response.getJSONObject("result");
|
||||||
if (resultObj != null) {
|
if (resultObj != null) {
|
||||||
|
try {
|
||||||
JSONArray faceList = resultObj.getJSONArray("face_list");
|
JSONArray faceList = resultObj.getJSONArray("face_list");
|
||||||
List<String> result = new ArrayList<>();
|
List<String> result = new ArrayList<>();
|
||||||
for (int i = 0; i < faceList.length(); i++) {
|
for (int i = 0; i < faceList.length(); i++) {
|
||||||
@ -246,16 +252,22 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
result.add(jsonObject.getString("face_token"));
|
result.add(jsonObject.getString("face_token"));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} else {
|
} catch (Exception e) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn("获取人脸列表失败!{}", response);
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
} else if (response.getInt("error_code") == 223103) {
|
||||||
|
// 用户不存在
|
||||||
|
return Collections.emptyList();
|
||||||
|
} else {
|
||||||
|
log.warn("获取人脸列表失败!{}", response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("获取人脸列表失败!", e);
|
log.error("获取人脸列表失败!", e);
|
||||||
return Collections.emptyList();
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,7 +305,7 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
}
|
}
|
||||||
resp.setResult(result);
|
resp.setResult(result);
|
||||||
if (!result.isEmpty()) {
|
if (!result.isEmpty()) {
|
||||||
resp.setFirstMatchRate(result.get(0).getScore());
|
resp.setFirstMatchRate(result.getFirst().getScore());
|
||||||
}
|
}
|
||||||
return resp;
|
return resp;
|
||||||
} else {
|
} else {
|
||||||
@ -323,26 +335,25 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private IRateLimiter getLimiter(LOCK_TYPE type) {
|
private IRateLimiter getLimiter(LOCK_TYPE type) {
|
||||||
switch (type) {
|
return switch (type) {
|
||||||
case ADD_DB:
|
case ADD_DB ->
|
||||||
return addDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
addDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS));
|
||||||
case ADD_FACE:
|
case ADD_FACE ->
|
||||||
return addFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getAddQps()));
|
addFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getAddQps()));
|
||||||
case LIST_DB:
|
case LIST_DB ->
|
||||||
return listDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
listDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS));
|
||||||
case LIST_FACE:
|
case LIST_FACE ->
|
||||||
return listFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
listFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS));
|
||||||
case SEARCH_FACE:
|
case SEARCH_FACE ->
|
||||||
return searchFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getSearchQps()));
|
searchFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getSearchQps()));
|
||||||
case DELETE_DB:
|
case DELETE_DB ->
|
||||||
return deleteDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
deleteDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS));
|
||||||
case DELETE_ENTITY:
|
case DELETE_ENTITY ->
|
||||||
return deleteEntityLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
deleteEntityLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS));
|
||||||
case DELETE_FACE:
|
case DELETE_FACE ->
|
||||||
return deleteFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
deleteFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS));
|
||||||
default:
|
default -> new FixedRateLimiter(500, TimeUnit.MILLISECONDS);
|
||||||
return new FixedRateLimiter(500, TimeUnit.MILLISECONDS);
|
};
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected enum LOCK_TYPE {
|
protected enum LOCK_TYPE {
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
package com.ycwl.basic.filter;
|
|
||||||
|
|
||||||
import com.ycwl.basic.config.CachedBodyHttpServletRequest;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.servlet.*;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class RequestCacheFilter implements Filter {
|
|
||||||
@Override
|
|
||||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
|
|
||||||
throws IOException, ServletException {
|
|
||||||
// 包装原始请求
|
|
||||||
HttpServletRequestWrapper wrappedRequest = new CachedBodyHttpServletRequest((HttpServletRequest) request);
|
|
||||||
// 继续处理请求链
|
|
||||||
chain.doFilter(wrappedRequest, response);
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,15 +16,11 @@ public class ImageWatermarkFactory {
|
|||||||
return get(type);
|
return get(type);
|
||||||
}
|
}
|
||||||
public static IOperator get(ImageWatermarkOperatorEnum type) {
|
public static IOperator get(ImageWatermarkOperatorEnum type) {
|
||||||
switch (type) {
|
return switch (type) {
|
||||||
case WATERMARK:
|
case WATERMARK -> new DefaultImageWatermarkOperator();
|
||||||
return new DefaultImageWatermarkOperator();
|
case NORMAL -> new NormalWatermarkOperator();
|
||||||
case NORMAL:
|
case LEICA -> new LeicaWatermarkOperator();
|
||||||
return new NormalWatermarkOperator();
|
default -> throw new ImageWatermarkUnsupportedException("不支持的类型" + type.name());
|
||||||
case LEICA:
|
};
|
||||||
return new LeicaWatermarkOperator();
|
|
||||||
default:
|
|
||||||
throw new ImageWatermarkUnsupportedException("不支持的类型"+type.name());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,13 +106,13 @@ public class LeicaWatermarkOperator implements IOperator {
|
|||||||
int dtLineHeight = datetimeFontMetrics.getHeight();
|
int dtLineHeight = datetimeFontMetrics.getHeight();
|
||||||
int scenicLineWidth = scenicFontMetrics.stringWidth(info.getScenicLine());
|
int scenicLineWidth = scenicFontMetrics.stringWidth(info.getScenicLine());
|
||||||
int datetimeLineWidth = scenicFontMetrics.stringWidth(info.getDatetimeLine());
|
int datetimeLineWidth = scenicFontMetrics.stringWidth(info.getDatetimeLine());
|
||||||
g2d.drawImage(qrcodeImage, newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - newQrcodeWidth - QRCODE_OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + + OFFSET_Y, newQrcodeWidth, newQrcodeHeight, null);
|
g2d.drawImage(qrcodeImage, newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - newQrcodeWidth - QRCODE_OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + OFFSET_Y, newQrcodeWidth, newQrcodeHeight, null);
|
||||||
g2d.setFont(scenicFont);
|
g2d.setFont(scenicFont);
|
||||||
g2d.setColor(scenicColor);
|
g2d.setColor(scenicColor);
|
||||||
g2d.drawString(info.getScenicLine(), newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + + OFFSET_Y + scenicLineHeight + scenicLineHeight * FONT_GLOBAL_OFFSET_PERCENT);
|
g2d.drawString(info.getScenicLine(), newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + OFFSET_Y + scenicLineHeight + scenicLineHeight * FONT_GLOBAL_OFFSET_PERCENT);
|
||||||
g2d.setFont(datetimeFont);
|
g2d.setFont(datetimeFont);
|
||||||
g2d.setColor(datetimeColor);
|
g2d.setColor(datetimeColor);
|
||||||
g2d.drawString(info.getDatetimeLine(), newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + + OFFSET_Y + scenicLineHeight + dtLineHeight + dtLineHeight * FONT_GLOBAL_OFFSET_PERCENT);
|
g2d.drawString(info.getDatetimeLine(), newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + OFFSET_Y + scenicLineHeight + dtLineHeight + dtLineHeight * FONT_GLOBAL_OFFSET_PERCENT);
|
||||||
String fileName = info.getWatermarkedFile().getName();
|
String fileName = info.getWatermarkedFile().getName();
|
||||||
String formatName = "jpg"; // 默认格式为 jpg
|
String formatName = "jpg"; // 默认格式为 jpg
|
||||||
if (fileName.endsWith(".png")) {
|
if (fileName.endsWith(".png")) {
|
||||||
|
@ -8,7 +8,6 @@ import com.ycwl.basic.constant.RequestConstant;
|
|||||||
import com.ycwl.basic.exception.CheckTokenException;
|
import com.ycwl.basic.exception.CheckTokenException;
|
||||||
import com.ycwl.basic.exception.MissTokenException;
|
import com.ycwl.basic.exception.MissTokenException;
|
||||||
import com.ycwl.basic.exception.PermissionException;
|
import com.ycwl.basic.exception.PermissionException;
|
||||||
import com.ycwl.basic.exception.TokenExpireException;
|
|
||||||
import com.ycwl.basic.model.jwt.JwtInfo;
|
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||||
import com.ycwl.basic.utils.JwtTokenUtil;
|
import com.ycwl.basic.utils.JwtTokenUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -17,42 +16,36 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.method.HandlerMethod;
|
||||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
import jakarta.servlet.http.Cookie;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.ZoneId;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class AuthInterceptor extends HandlerInterceptorAdapter {
|
public class AuthInterceptor implements HandlerInterceptor {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
JwtTokenUtil jwtTokenUtil;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
RedisTemplate redisTemplate;
|
RedisTemplate redisTemplate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
if (!(handler instanceof HandlerMethod)) {
|
if (!(handler instanceof HandlerMethod handlerMethod)) {
|
||||||
return super.preHandle(request, response, handler);
|
return true;
|
||||||
}
|
}
|
||||||
String requestURI = request.getRequestURI();
|
String requestURI = request.getRequestURI();
|
||||||
|
|
||||||
HandlerMethod handlerMethod = (HandlerMethod) handler;
|
|
||||||
// 获取类上面的注解
|
// 获取类上面的注解
|
||||||
IgnoreToken ignoreClassToken = handlerMethod.getBeanType().getAnnotation(IgnoreToken.class);
|
IgnoreToken ignoreClassToken = handlerMethod.getBeanType().getAnnotation(IgnoreToken.class);
|
||||||
// 获取方法上的注解
|
// 获取方法上的注解
|
||||||
IgnoreToken ignoreMethodToken = handlerMethod.getMethodAnnotation(IgnoreToken.class);
|
IgnoreToken ignoreMethodToken = handlerMethod.getMethodAnnotation(IgnoreToken.class);
|
||||||
if (ignoreClassToken != null || ignoreMethodToken != null) {
|
if (ignoreClassToken != null || ignoreMethodToken != null) {
|
||||||
// 放行
|
// 放行
|
||||||
return super.preHandle(request, response, handler);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 放行白名单
|
// 放行白名单
|
||||||
@ -120,7 +113,6 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
BaseContextHandler.remove();
|
BaseContextHandler.remove();
|
||||||
super.afterCompletion(request, response, handler, ex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getToken(HttpServletRequest request) {
|
public String getToken(HttpServletRequest request) {
|
||||||
|
@ -30,7 +30,7 @@ public interface DeviceMapper {
|
|||||||
DeviceEntity getByDeviceId(Long deviceId);
|
DeviceEntity getByDeviceId(Long deviceId);
|
||||||
List<DeviceRespVO> listByScenicIdWithWVP(Long scenicId);
|
List<DeviceRespVO> listByScenicIdWithWVP(Long scenicId);
|
||||||
|
|
||||||
ScenicDeviceCountVO deviceCountByScenicId(@Param("scenicId") Long scenicId,@Param("userId") Long userId);
|
ScenicDeviceCountVO deviceCountByScenicId(@Param("scenicId") Long scenicId);
|
||||||
|
|
||||||
DeviceConfigEntity getConfigByDeviceId(Long deviceId);
|
DeviceConfigEntity getConfigByDeviceId(Long deviceId);
|
||||||
int addConfig(DeviceConfigEntity deviceConfigEntity);
|
int addConfig(DeviceConfigEntity deviceConfigEntity);
|
||||||
|
@ -23,6 +23,7 @@ public interface FaceMapper {
|
|||||||
FaceEntity get(Long id);
|
FaceEntity get(Long id);
|
||||||
int add(FaceEntity face);
|
int add(FaceEntity face);
|
||||||
int deleteById(Long id);
|
int deleteById(Long id);
|
||||||
|
int forceDeleteById(Long id);
|
||||||
int deleteByIds(@Param("list") List<Long> ids);
|
int deleteByIds(@Param("list") List<Long> ids);
|
||||||
int update(FaceEntity face);
|
int update(FaceEntity face);
|
||||||
|
|
||||||
@ -35,5 +36,5 @@ public interface FaceMapper {
|
|||||||
|
|
||||||
List<FaceRespVO> listByScenicAndUserId(String scenicId, Long userId);
|
List<FaceRespVO> listByScenicAndUserId(String scenicId, Long userId);
|
||||||
|
|
||||||
List<FaceEntity> listEntityBeforeDate(Long scenicId, Date endDate);
|
List<FaceEntity> listUnpaidEntityBeforeDate(Long scenicId, Date endDate);
|
||||||
}
|
}
|
||||||
|
@ -27,4 +27,6 @@ public interface FaceSampleMapper {
|
|||||||
|
|
||||||
FaceSampleEntity getEntity(Long faceSampleId);
|
FaceSampleEntity getEntity(Long faceSampleId);
|
||||||
List<FaceSampleEntity> listEntityBeforeDate(Long scenicId, Date endDate);
|
List<FaceSampleEntity> listEntityBeforeDate(Long scenicId, Date endDate);
|
||||||
|
|
||||||
|
void updateScore(Long id, Float score);
|
||||||
}
|
}
|
||||||
|
@ -17,4 +17,6 @@ public interface PriceConfigMapper extends BaseMapper<PriceConfigEntity> {
|
|||||||
List<PriceConfigRespVO> listByCondition(@Param("req") PriceConfigListReq req);
|
List<PriceConfigRespVO> listByCondition(@Param("req") PriceConfigListReq req);
|
||||||
|
|
||||||
PriceConfigEntity getPriceByScenicTypeGoods(Long scenicId, Integer type, String goodsId);
|
PriceConfigEntity getPriceByScenicTypeGoods(Long scenicId, Integer type, String goodsId);
|
||||||
|
|
||||||
|
int updateStatus(Integer id);
|
||||||
}
|
}
|
10
src/main/java/com/ycwl/basic/mapper/PrintTaskMapper.java
Normal file
10
src/main/java/com/ycwl/basic/mapper/PrintTaskMapper.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package com.ycwl.basic.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface PrintTaskMapper extends BaseMapper<PrintTaskEntity> {
|
||||||
|
int insertTask(PrintTaskEntity entity);
|
||||||
|
}
|
@ -2,6 +2,8 @@ package com.ycwl.basic.mapper;
|
|||||||
|
|
||||||
import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity;
|
import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity;
|
||||||
import com.ycwl.basic.model.pc.printer.entity.PrinterEntity;
|
import com.ycwl.basic.model.pc.printer.entity.PrinterEntity;
|
||||||
|
import com.ycwl.basic.model.pc.printer.resp.MemberPrintResp;
|
||||||
|
import com.ycwl.basic.model.pc.printer.resp.PrinterResp;
|
||||||
import com.ycwl.basic.model.printer.resp.PrintTaskResp;
|
import com.ycwl.basic.model.printer.resp.PrintTaskResp;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
@ -26,4 +28,26 @@ public interface PrinterMapper {
|
|||||||
int updateTaskStatus(@Param("id") Integer id, @Param("status") Integer status);
|
int updateTaskStatus(@Param("id") Integer id, @Param("status") Integer status);
|
||||||
|
|
||||||
PrintTaskEntity getTaskById(Integer id);
|
PrintTaskEntity getTaskById(Integer id);
|
||||||
|
|
||||||
|
List<PrinterResp> listByScenicId(@Param("scenicId") Long scenicId);
|
||||||
|
|
||||||
|
List<MemberPrintResp> listRelation(@Param("memberId") Long memberId, @Param("scenicId") Long scenicId);
|
||||||
|
|
||||||
|
int deleteUserPhoto(Long memberId, Long scenicId, Long relationId);
|
||||||
|
|
||||||
|
int addUserPhoto(Long memberId, Long scenicId, String url);
|
||||||
|
|
||||||
|
MemberPrintResp getUserPhoto(Long memberId, Long scenicId, Long id);
|
||||||
|
|
||||||
|
int setPhotoCropped(Long memberId, Long scenicId, Long id, String url);
|
||||||
|
|
||||||
|
int setPhotoQuantity(Long memberId, Long scenicId, Long id, Integer quantity);
|
||||||
|
|
||||||
|
List<MemberPrintResp> getUserPhotoByIds(List<Long> ids);
|
||||||
|
|
||||||
|
int setUserIsBuyItem(Long memberId, Long id, Long orderId);
|
||||||
|
|
||||||
|
void updateUserPhotoListToPrinter(Long memberId, Long scenicId, Integer printerId);
|
||||||
|
|
||||||
|
List<MemberPrintResp> listRelationByOrderId(Long orderId);
|
||||||
}
|
}
|
@ -19,4 +19,11 @@ public interface ScenicAccountMapper {
|
|||||||
ScenicAccountEntity findAccountById(String id);
|
ScenicAccountEntity findAccountById(String id);
|
||||||
List<ScenicAccountEntity> pageQuery(ScenicAccountReqQuery req);
|
List<ScenicAccountEntity> pageQuery(ScenicAccountReqQuery req);
|
||||||
|
|
||||||
|
int addAccountScenicRelation(Long accountId, Long scenicId, int isAdmin);
|
||||||
|
|
||||||
|
int deleteRelationByScenicId(Long scenicId);
|
||||||
|
|
||||||
|
List<Long> getAccountRelations(Long accountId);
|
||||||
|
|
||||||
|
int deleteRelationById(Long accountId);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.ycwl.basic.mapper;
|
||||||
|
|
||||||
|
import com.ycwl.basic.model.pc.scenicDeviceStats.entity.ScenicDeviceStatsEntity;
|
||||||
|
import com.ycwl.basic.model.pc.scenicDeviceStats.resp.ScenicDeviceStatsResp;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 景区设备统计Mapper接口
|
||||||
|
*/
|
||||||
|
public interface ScenicDeviceStatsMapper {
|
||||||
|
/**
|
||||||
|
* 插入景区设备统计记录
|
||||||
|
* @param stats 景区设备统计对象
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int insert(@Param("stats") ScenicDeviceStatsEntity stats);
|
||||||
|
|
||||||
|
List<ScenicDeviceStatsEntity> countDeviceStats(Date start, Date end);
|
||||||
|
|
||||||
|
List<ScenicDeviceStatsResp> countCachedStatsByScenicId(Long scenicId, Date start, Date end);
|
||||||
|
List<ScenicDeviceStatsResp> countRealtimeStatsByScenicId(Long scenicId, Date start, Date end);
|
||||||
|
}
|
@ -51,6 +51,7 @@ public interface SourceMapper {
|
|||||||
int addRelation(MemberSourceEntity source);
|
int addRelation(MemberSourceEntity source);
|
||||||
|
|
||||||
List<SourceRespVO> listUser(SourceReqQuery sourceReqQuery);
|
List<SourceRespVO> listUser(SourceReqQuery sourceReqQuery);
|
||||||
|
Integer countUser(SourceReqQuery sourceReqQuery);
|
||||||
SourceRespVO listUserOne(Long userId, Long sourceId);
|
SourceRespVO listUserOne(Long userId, Long sourceId);
|
||||||
|
|
||||||
int addRelations(List<MemberSourceEntity> list);
|
int addRelations(List<MemberSourceEntity> list);
|
||||||
@ -78,4 +79,6 @@ public interface SourceMapper {
|
|||||||
List<SourceWatermarkEntity> listSourceWatermark(List<Long> sourceIds, Long faceId, String watermarkType);
|
List<SourceWatermarkEntity> listSourceWatermark(List<Long> sourceIds, Long faceId, String watermarkType);
|
||||||
|
|
||||||
void addSourceWatermark(Long sourceId, Long faceId, String type, String url);
|
void addSourceWatermark(Long sourceId, Long faceId, String type, String url);
|
||||||
|
|
||||||
|
int deleteUselessSource();
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,12 @@ package com.ycwl.basic.mapper;
|
|||||||
|
|
||||||
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
||||||
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
|
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
|
||||||
|
import com.ycwl.basic.model.mobile.statistic.resp.AppStatisticsFunnelVO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -93,4 +95,11 @@ public interface StatisticsMapper {
|
|||||||
List<Long> getBrokerIdListForUser(Long memberId, Date startTime, Date endTime);
|
List<Long> getBrokerIdListForUser(Long memberId, Date startTime, Date endTime);
|
||||||
|
|
||||||
Long getUserRecentEnterType(Long memberId, Date endTime);
|
Long getUserRecentEnterType(Long memberId, Date endTime);
|
||||||
|
|
||||||
|
List<AppStatisticsFunnelVO> listStatByScenic(Long scenicId, Date startTime, Date endTime);
|
||||||
|
int insertStat(Long scenicId, Date date, AppStatisticsFunnelVO data);
|
||||||
|
|
||||||
|
List<HashMap<String, String>> orderChartByDate(CommonQueryReq query);
|
||||||
|
|
||||||
|
List<HashMap<String, String>> orderChartByHour(CommonQueryReq query);
|
||||||
}
|
}
|
||||||
|
@ -54,5 +54,5 @@ public interface TaskMapper {
|
|||||||
|
|
||||||
List<TaskEntity> listEntity(TaskReqQuery taskReqQuery);
|
List<TaskEntity> listEntity(TaskReqQuery taskReqQuery);
|
||||||
|
|
||||||
List<TaskRespVO> selectNotRunningByScenicId(Long scenicOnly);
|
List<TaskRespVO> selectNotRunningByScenicList(String scenicOnly);
|
||||||
}
|
}
|
||||||
|
@ -54,4 +54,6 @@ public interface VideoMapper {
|
|||||||
int deleteNotBuyRelations(Long scenicId, Date endDate);
|
int deleteNotBuyRelations(Long scenicId, Date endDate);
|
||||||
|
|
||||||
int deleteNotBuyFaceRelations(Long userId, Long faceId);
|
int deleteNotBuyFaceRelations(Long userId, Long faceId);
|
||||||
|
|
||||||
|
int deleteUselessVideo();
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ import java.time.LocalDateTime;
|
|||||||
@ToString
|
@ToString
|
||||||
public class JwtInfo implements Serializable {
|
public class JwtInfo implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 5452605590172369563L;
|
private static final long serialVersionUID = 5452605590172369563L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,11 +44,6 @@ public class JwtInfo implements Serializable {
|
|||||||
|
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
/**
|
|
||||||
* 景区id
|
|
||||||
*/
|
|
||||||
private Long scenicId;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成 token 的时间
|
* 生成 token 的时间
|
||||||
|
@ -3,7 +3,9 @@ package com.ycwl.basic.model.mobile.goods;
|
|||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -21,14 +23,8 @@ public class GoodsDetailVO {
|
|||||||
private Long scenicId;
|
private Long scenicId;
|
||||||
@ApiModelProperty("景区名称")
|
@ApiModelProperty("景区名称")
|
||||||
private String scenicName;
|
private String scenicName;
|
||||||
@ApiModelProperty("经度")
|
|
||||||
private BigDecimal longitude;
|
|
||||||
@ApiModelProperty("纬度")
|
|
||||||
private BigDecimal latitude;
|
|
||||||
@ApiModelProperty("商品类型 1:成片视频 2:源素材")
|
@ApiModelProperty("商品类型 1:成片视频 2:源素材")
|
||||||
private Integer goodsType;
|
private Integer goodsType;
|
||||||
@ApiModelProperty("源素材类型 1:视频 2:图片")
|
|
||||||
private Integer sourceType;
|
|
||||||
@ApiModelProperty("商品id goodsType=1时为videoId,goodsType=2时为sourceId")
|
@ApiModelProperty("商品id goodsType=1时为videoId,goodsType=2时为sourceId")
|
||||||
private Long goodsId;
|
private Long goodsId;
|
||||||
@ApiModelProperty("模版封面图片")
|
@ApiModelProperty("模版封面图片")
|
||||||
@ -44,4 +40,8 @@ public class GoodsDetailVO {
|
|||||||
@ApiModelProperty("是否已购买 0否 1是")
|
@ApiModelProperty("是否已购买 0否 1是")
|
||||||
private Integer isBuy;
|
private Integer isBuy;
|
||||||
private Integer isFree;
|
private Integer isFree;
|
||||||
|
private Integer parts;
|
||||||
|
public Integer getSourceType() {
|
||||||
|
return goodsType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,12 @@ public class IsBuyBatchRespVO {
|
|||||||
private BigDecimal slashPrice;
|
private BigDecimal slashPrice;
|
||||||
|
|
||||||
public BigDecimal getPrice() {
|
public BigDecimal getPrice() {
|
||||||
|
if (origPrice == null) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
if (couponPrice == null) {
|
||||||
|
return origPrice;
|
||||||
|
}
|
||||||
return origPrice.subtract(couponPrice);
|
return origPrice.subtract(couponPrice);
|
||||||
}
|
}
|
||||||
public BigDecimal getDiscountPrice() {
|
public BigDecimal getDiscountPrice() {
|
||||||
|
@ -18,6 +18,12 @@ public class IsBuyRespVO {
|
|||||||
private BigDecimal slashPrice;
|
private BigDecimal slashPrice;
|
||||||
|
|
||||||
public BigDecimal getPrice() {
|
public BigDecimal getPrice() {
|
||||||
|
if (origPrice == null) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
if (couponPrice == null) {
|
||||||
|
return origPrice;
|
||||||
|
}
|
||||||
return origPrice.subtract(couponPrice);
|
return origPrice.subtract(couponPrice);
|
||||||
}
|
}
|
||||||
public BigDecimal getDiscountPrice() {
|
public BigDecimal getDiscountPrice() {
|
||||||
|
@ -4,6 +4,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -12,6 +13,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 16:33
|
* @Date:2024/11/29 16:33
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value = "移动端订单查询对象")
|
@ApiModel(value = "移动端订单查询对象")
|
||||||
public class OrderAppPageReq extends BaseQueryParameterReq {
|
public class OrderAppPageReq extends BaseQueryParameterReq {
|
||||||
|
@ -70,7 +70,7 @@ public class ScenicAppVO {
|
|||||||
/**
|
/**
|
||||||
* 距离
|
* 距离
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty("距离")
|
@ApiModelProperty("距离米")
|
||||||
private BigDecimal distance;
|
private BigDecimal distance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
|
|||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/13 9:44
|
* @Date:2024/12/13 9:44
|
||||||
@ -13,7 +15,7 @@ import lombok.Data;
|
|||||||
public class ScenicLoginRespVO {
|
public class ScenicLoginRespVO {
|
||||||
private Long id;
|
private Long id;
|
||||||
@ApiModelProperty("景区id")
|
@ApiModelProperty("景区id")
|
||||||
private Long scenicId;
|
private List<Long> scenicId;
|
||||||
@ApiModelProperty("是否是超级管理员")
|
@ApiModelProperty("是否是超级管理员")
|
||||||
private Integer isSuper;
|
private Integer isSuper;
|
||||||
@ApiModelProperty("账号名称")
|
@ApiModelProperty("账号名称")
|
||||||
|
@ -18,6 +18,7 @@ public class CommonQueryReq {
|
|||||||
private Integer standard;
|
private Integer standard;
|
||||||
@ApiModelProperty(value = "景区id")
|
@ApiModelProperty(value = "景区id")
|
||||||
private Long scenicId;
|
private Long scenicId;
|
||||||
|
private boolean realtime;
|
||||||
private Date startTime;
|
private Date startTime;
|
||||||
private Date endTime;
|
private Date endTime;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package com.ycwl.basic.model.mobile.statistic.resp;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
@ -13,49 +15,118 @@ import lombok.Data;
|
|||||||
public class AppStatisticsFunnelVO {
|
public class AppStatisticsFunnelVO {
|
||||||
|
|
||||||
@ApiModelProperty("镜头检测游客数")
|
@ApiModelProperty("镜头检测游客数")
|
||||||
// private Integer cameraShotOfMemberNum;
|
private int cameraShotOfMemberNum; // cs1
|
||||||
private String cameraShotOfMemberNum;
|
|
||||||
@ApiModelProperty("镜头检测游客数_扫码访问人数_转化率")
|
|
||||||
private String csom_scaom;
|
|
||||||
@ApiModelProperty("扫码访问人数")
|
@ApiModelProperty("扫码访问人数")
|
||||||
private Integer scanCodeVisitorOfMemberNum;
|
private int scanCodeVisitorOfMemberNum; // sv1
|
||||||
@ApiModelProperty("扫码访问人数_上传头像人数_转化率")
|
|
||||||
private String scaom_ufom;
|
|
||||||
@ApiModelProperty("上传头像(人脸)人数")
|
@ApiModelProperty("上传头像(人脸)人数")
|
||||||
private Integer uploadFaceOfMemberNum;
|
private int uploadFaceOfMemberNum; // u1
|
||||||
@ApiModelProperty("上传头像人数_推送订阅人数_转化率")
|
|
||||||
private String ufom_pom;
|
|
||||||
@ApiModelProperty("推送订阅人数")
|
@ApiModelProperty("推送订阅人数")
|
||||||
private Integer pushOfMemberNum;
|
private int pushOfMemberNum; // m1
|
||||||
@ApiModelProperty("推送订阅人数_生成视频人数_转化率")
|
|
||||||
private String pom_cvom;
|
|
||||||
@ApiModelProperty("生成视频人数")
|
@ApiModelProperty("生成视频人数")
|
||||||
private Integer completeVideoOfMemberNum;
|
private int completeVideoOfMemberNum; // gv1
|
||||||
@ApiModelProperty("生成视频人数_预览视频人数_转化率")
|
|
||||||
private String cvom_pvom;
|
|
||||||
@ApiModelProperty("预览视频人数")
|
@ApiModelProperty("预览视频人数")
|
||||||
private Integer previewVideoOfMemberNum;
|
private int previewVideoOfMemberNum; // pv1
|
||||||
@ApiModelProperty("预览视频人数_点击购买人数_转化率")
|
|
||||||
private String pvom_cpom;
|
|
||||||
@ApiModelProperty("点击购买人数")
|
@ApiModelProperty("点击购买人数")
|
||||||
private Integer clickOnPayOfMemberNum;
|
private int clickOnPayOfMemberNum; // cp1
|
||||||
@ApiModelProperty("点击购买人数_支付订单人数_转化率")
|
|
||||||
private String cpom_pom;
|
|
||||||
@ApiModelProperty("支付订单人数")
|
@ApiModelProperty("支付订单人数")
|
||||||
private Integer payOfMemberNum;
|
private int payOfMemberNum; // p1
|
||||||
|
|
||||||
@ApiModelProperty("总访问人数")
|
@ApiModelProperty("总访问人数")
|
||||||
private Integer totalVisitorOfMemberNum;
|
private int totalVisitorOfMemberNum; // v1
|
||||||
@ApiModelProperty("生成视频条数")
|
@ApiModelProperty("生成视频条数")
|
||||||
private Integer completeOfVideoNum;
|
private int completeOfVideoNum; // gv2
|
||||||
@ApiModelProperty("预览视频条数")
|
@ApiModelProperty("预览视频条数")
|
||||||
private Integer previewOfVideoNum;
|
private int previewOfVideoNum; // pv2
|
||||||
@ApiModelProperty("支付订单数")
|
@ApiModelProperty("支付订单数")
|
||||||
private Integer payOfOrderNum;
|
private int payOfOrderNum; // p2
|
||||||
@ApiModelProperty("支付订单金额")
|
@ApiModelProperty("支付订单金额")
|
||||||
private String payOfOrderAmount;
|
private BigDecimal payOfOrderAmount; // o3
|
||||||
@ApiModelProperty("退款订单数")
|
@ApiModelProperty("退款订单数")
|
||||||
private Integer refundOfOrderNum;
|
private int refundOfOrderNum; // ro2
|
||||||
@ApiModelProperty("退款订单金额")
|
@ApiModelProperty("退款订单金额")
|
||||||
private String refundOfOrderAmount;
|
private BigDecimal refundOfOrderAmount; // ro3
|
||||||
|
|
||||||
|
@ApiModelProperty("镜头检测游客数_扫码访问人数_转化率")
|
||||||
|
public String getCsom_scaom() {
|
||||||
|
return "-"; // TODO: REAL
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty("扫码访问人数_上传头像人数_转化率")
|
||||||
|
public String getScaom_ufom() {
|
||||||
|
if (uploadFaceOfMemberNum == 0 || scanCodeVisitorOfMemberNum == 0) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return new BigDecimal(uploadFaceOfMemberNum)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.divide(new BigDecimal(scanCodeVisitorOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
@ApiModelProperty("上传头像人数_推送订阅人数_转化率")
|
||||||
|
public String getUfom_pom() {
|
||||||
|
if (pushOfMemberNum == 0 || uploadFaceOfMemberNum == 0) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return new BigDecimal(uploadFaceOfMemberNum)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.divide(new BigDecimal(pushOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
@ApiModelProperty("推送订阅人数_生成视频人数_转化率")
|
||||||
|
public String getPom_cvom() {
|
||||||
|
if (completeVideoOfMemberNum == 0 || pushOfMemberNum == 0) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return new BigDecimal(completeVideoOfMemberNum)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.divide(new BigDecimal(pushOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
@ApiModelProperty("生成视频人数_预览视频人数_转化率")
|
||||||
|
public String getCvom_pvom() {
|
||||||
|
if (previewVideoOfMemberNum == 0 || completeVideoOfMemberNum == 0) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return new BigDecimal(previewVideoOfMemberNum)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.divide(new BigDecimal(completeVideoOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
@ApiModelProperty("预览视频人数_点击购买人数_转化率")
|
||||||
|
public String getPvom_cpom() {
|
||||||
|
if (clickOnPayOfMemberNum == 0 || previewVideoOfMemberNum == 0) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return new BigDecimal(clickOnPayOfMemberNum)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.divide(new BigDecimal(previewVideoOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
@ApiModelProperty("点击购买人数_支付订单人数_转化率")
|
||||||
|
public String getCpom_pom() {
|
||||||
|
if (payOfMemberNum == 0 || clickOnPayOfMemberNum == 0) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return new BigDecimal(payOfMemberNum)
|
||||||
|
.multiply(new BigDecimal(100))
|
||||||
|
.divide(new BigDecimal(clickOnPayOfMemberNum), 2, RoundingMode.HALF_UP)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
public BigDecimal payOfOrderAmount() {
|
||||||
|
return payOfOrderAmount;
|
||||||
|
}
|
||||||
|
public String getPayOfOrderAmount() {
|
||||||
|
if (payOfOrderAmount == null) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return payOfOrderAmount.toString();
|
||||||
|
}
|
||||||
|
public BigDecimal refundOfOrderAmount() {
|
||||||
|
return refundOfOrderAmount;
|
||||||
|
}
|
||||||
|
public String getRefundOfOrderAmount() {
|
||||||
|
if (refundOfOrderAmount == null) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return refundOfOrderAmount.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,9 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value = "后台管理人员请求VO")
|
@ApiModel(value = "后台管理人员请求VO")
|
||||||
public class AdminUserListReqVO extends BaseQueryParameterReq {
|
public class AdminUserListReqVO extends BaseQueryParameterReq {
|
||||||
|
@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value = "")
|
@ApiModel()
|
||||||
public class UpdatePasswordReqVO {
|
public class UpdatePasswordReqVO {
|
||||||
@ApiModelProperty(value = "id",hidden = true)
|
@ApiModelProperty(value = "id",hidden = true)
|
||||||
private String id;
|
private String id;
|
||||||
|
@ -6,6 +6,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@ -13,6 +14,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/12/12 10:00
|
* @Date:2024/12/12 10:00
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("查询推客记录请求参数")
|
@ApiModel("查询推客记录请求参数")
|
||||||
public class BrokerRecordReqQuery extends BaseQueryParameterReq {
|
public class BrokerRecordReqQuery extends BaseQueryParameterReq {
|
||||||
|
@ -5,6 +5,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@ -12,6 +13,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 14:29
|
* @Date:2024/11/29 14:29
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("查询推客列表请求参数")
|
@ApiModel("查询推客列表请求参数")
|
||||||
public class BrokerReqQuery extends BaseQueryParameterReq {
|
public class BrokerReqQuery extends BaseQueryParameterReq {
|
||||||
|
@ -61,4 +61,5 @@ public class DeviceConfigEntity {
|
|||||||
private Integer imageFree;
|
private Integer imageFree;
|
||||||
private Integer videoFree;
|
private Integer videoFree;
|
||||||
private Long pairDevice;
|
private Long pairDevice;
|
||||||
|
private String videoCrop;
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@ -12,6 +13,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 14:53
|
* @Date:2024/11/29 14:53
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("设备查询参数")
|
@ApiModel("设备查询参数")
|
||||||
public class DeviceReqQuery extends BaseQueryParameterReq {
|
public class DeviceReqQuery extends BaseQueryParameterReq {
|
||||||
|
@ -8,6 +8,6 @@ public class DeviceSortRequest {
|
|||||||
@ApiModelProperty(value = "被操作模板的ID", required = true)
|
@ApiModelProperty(value = "被操作模板的ID", required = true)
|
||||||
private Long deviceId;
|
private Long deviceId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "排在其后的模板ID", required = false)
|
@ApiModelProperty(value = "排在其后的模板ID")
|
||||||
private Long afterDeviceId;
|
private Long afterDeviceId;
|
||||||
}
|
}
|
@ -33,8 +33,6 @@ public class DeviceRespVO {
|
|||||||
private Integer online;
|
private Integer online;
|
||||||
private String coverUrl;
|
private String coverUrl;
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private Date coverTime;
|
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
|
||||||
private Date createAt;
|
private Date createAt;
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private Date updateAt;
|
private Date updateAt;
|
||||||
|
@ -5,6 +5,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -13,6 +14,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 15:16
|
* @Date:2024/11/29 15:16
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("人脸查询参数")
|
@ApiModel("人脸查询参数")
|
||||||
public class FaceReqQuery extends BaseQueryParameterReq {
|
public class FaceReqQuery extends BaseQueryParameterReq {
|
||||||
|
@ -7,6 +7,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@ -14,6 +15,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 15:40
|
* @Date:2024/11/29 15:40
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("人脸样本查询参数")
|
@ApiModel("人脸样本查询参数")
|
||||||
public class FaceSampleReqQuery extends BaseQueryParameterReq {
|
public class FaceSampleReqQuery extends BaseQueryParameterReq {
|
||||||
@ -27,31 +29,6 @@ public class FaceSampleReqQuery extends BaseQueryParameterReq {
|
|||||||
*/
|
*/
|
||||||
@ApiModelProperty("来源设备")
|
@ApiModelProperty("来源设备")
|
||||||
private Long deviceId;
|
private Long deviceId;
|
||||||
/**
|
|
||||||
* 来源ID
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("来源ID")
|
|
||||||
private Long sourceId;
|
|
||||||
/**
|
|
||||||
* 人脸照片
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("人脸照片")
|
|
||||||
private String faceUrl;
|
|
||||||
/**
|
|
||||||
* 与样本匹配的ID,逗号隔开
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("与样本匹配的ID,逗号隔开")
|
|
||||||
private String matchSampleIds;
|
|
||||||
/**
|
|
||||||
* 匹配率
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("匹配率")
|
|
||||||
private String firstMatchRate;
|
|
||||||
/**
|
|
||||||
* 匹配的结果,JSON字符串
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("匹配的结果,JSON字符串")
|
|
||||||
private String matchResult;
|
|
||||||
/**
|
/**
|
||||||
* 是否匹配,0未匹配,1已匹配
|
* 是否匹配,0未匹配,1已匹配
|
||||||
*/
|
*/
|
||||||
@ -61,4 +38,6 @@ public class FaceSampleReqQuery extends BaseQueryParameterReq {
|
|||||||
private Date startTime;
|
private Date startTime;
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private Date endTime;
|
private Date endTime;
|
||||||
|
|
||||||
|
private String matchSampleIds;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@ -13,6 +14,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 15:59
|
* @Date:2024/11/29 15:59
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("查询用户列表请求参数")
|
@ApiModel("查询用户列表请求参数")
|
||||||
public class MemberReqQuery extends BaseQueryParameterReq {
|
public class MemberReqQuery extends BaseQueryParameterReq {
|
||||||
|
@ -7,6 +7,7 @@ import com.ycwl.basic.model.common.BaseQueryParameterReq;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -15,6 +16,7 @@ import java.util.Date;
|
|||||||
* @Author:longbinbin
|
* @Author:longbinbin
|
||||||
* @Date:2024/11/29 16:33
|
* @Date:2024/11/29 16:33
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value = "订单查询对象")
|
@ApiModel(value = "订单查询对象")
|
||||||
public class OrderReqQuery extends BaseQueryParameterReq {
|
public class OrderReqQuery extends BaseQueryParameterReq {
|
||||||
@ -31,16 +33,6 @@ public class OrderReqQuery extends BaseQueryParameterReq {
|
|||||||
*/
|
*/
|
||||||
@ApiModelProperty("微信openId")
|
@ApiModelProperty("微信openId")
|
||||||
private Long openId;
|
private Long openId;
|
||||||
/**
|
|
||||||
* 价格
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("价格")
|
|
||||||
private BigDecimal price;
|
|
||||||
/**
|
|
||||||
* 实际支付价格
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("实际支付价格")
|
|
||||||
private BigDecimal payPrice;
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.ycwl.basic.model.pc.order.resp;
|
package com.ycwl.basic.model.pc.order.resp;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.ycwl.basic.model.mobile.goods.GoodsDetailVO;
|
||||||
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
|
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
@ -111,6 +112,7 @@ public class OrderRespVO {
|
|||||||
private List<OrderItemVO> orderItemList;
|
private List<OrderItemVO> orderItemList;
|
||||||
private Long scenicId;
|
private Long scenicId;
|
||||||
private String scenicName;
|
private String scenicName;
|
||||||
|
private List<GoodsDetailVO> goodsList;
|
||||||
|
|
||||||
public BigDecimal getDiscountPrice() {
|
public BigDecimal getDiscountPrice() {
|
||||||
if (slashPrice == null) {
|
if (slashPrice == null) {
|
||||||
|
@ -6,22 +6,26 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@TableName("permission")
|
@TableName("permission")
|
||||||
public class PermissionEntity implements Serializable {
|
public class PermissionEntity implements Serializable {
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@TableId(value = "id", type = IdType.AUTO)
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
@TableField("user_id")
|
@TableField("user_id")
|
||||||
private Long userId; // 确保字段映射
|
private Long userId;
|
||||||
|
|
||||||
@TableField("perm_str")
|
@TableField("perm_str")
|
||||||
private String permString;
|
private String permString;
|
||||||
|
@TableField("menu_str")
|
||||||
|
private String menuString;
|
||||||
|
|
||||||
@TableField("create_time")
|
@TableField("create_time")
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
@ -7,4 +7,5 @@ import java.util.List;
|
|||||||
@Data
|
@Data
|
||||||
public class PermissionSaveReq {
|
public class PermissionSaveReq {
|
||||||
private List<String> permissions;
|
private List<String> permissions;
|
||||||
|
private List<String> menus;
|
||||||
}
|
}
|
@ -9,4 +9,5 @@ import java.util.List;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class PermissionResp {
|
public class PermissionResp {
|
||||||
private List<String> permissions;
|
private List<String> permissions;
|
||||||
|
private List<String> menus;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ public class PriceConfigEntity {
|
|||||||
* 划线价格
|
* 划线价格
|
||||||
*/
|
*/
|
||||||
private BigDecimal slashPrice;
|
private BigDecimal slashPrice;
|
||||||
|
private Integer status;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
}
|
}
|
@ -7,4 +7,5 @@ public class PriceConfigListReq {
|
|||||||
private Long scenicId;
|
private Long scenicId;
|
||||||
private Integer type;
|
private Integer type;
|
||||||
private Long goodsId;
|
private Long goodsId;
|
||||||
|
private Integer status;
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user