mirror of
https://github.com/FJ-OMS/oms-erp.git
synced 2024-09-20 15:26:28 +08:00
commit skyer service
This commit is contained in:
parent
88ba36f850
commit
6a3a6bf690
103
skyer-goods/.gitignore
vendored
Normal file
103
skyer-goods/.gitignore
vendored
Normal file
|
@ -0,0 +1,103 @@
|
|||
#======================================================================================================================
|
||||
#========================================= gitignore的基础用法 =========================================
|
||||
#======================================================================================================================
|
||||
# 一.基础语法
|
||||
# .gitignore配置文件的一些通用技巧 [参考:https://git-scm.com/docs/gitignore]
|
||||
# 1.空白行不匹配任何文件,所以可以作为可读性的分隔符,同时两端的空格将会被忽略.
|
||||
# 2.使用[#]开头,将会注释掉整行,使其不进行匹配操作,如果需要匹配#开头,可以使用转义字符[\].
|
||||
# 3.1匹配模式以[/]结尾,表示想要匹配一个目录及其子文件.(比如[foo/]会匹配foo目录及其下面的路径.)
|
||||
# 3.2匹配模式不包含[/],将会全局匹配该文件.
|
||||
# 4.通配符
|
||||
# [*]: 匹配除[/]以外的任何内容,也就意味着[*]不能跨目录.
|
||||
# [?]: 匹配除[/]和[[]以及[]]以外的任何一个字符.
|
||||
# [**]: 匹配所有的内容,或者说匹配任意目录下的内容.
|
||||
# 示例:
|
||||
# 1.[**/foo/bar] 将会匹配所有直接在foo目录下的bar,无论foo处在何处.
|
||||
# 2.[foo/**]则表示匹配foo目录下的所有文件和目录.
|
||||
# 3.[a/**/b]则可以匹配a/b, a/c/b, a/c/d/b,即此处的[**]可以表示0个或多个.
|
||||
# !!! 需要注意的是,除上面示例的用法外,剩余的[**]都是无效的..
|
||||
# 5.可以通过前缀[!]来表示不忽略某些文件,比如可以通过[!a]来确保文件a不会被忽略,即时前面已经声明了忽略其父目录,该模式优先级高于普通忽略模式.
|
||||
# 二.常用命令
|
||||
# 1.git -rm [https://git-scm.com/docs/git-rm]
|
||||
# 删除文件索引,或者同时删除文件索引和物理文件.可以使用通配符.
|
||||
# 2.git-check-ignore [https://git-scm.com/docs/git-check-ignore]
|
||||
# 调试.gitignore文件
|
||||
# 三.注意事项
|
||||
# 1.如果文件已经被git管理,那么后续添加的忽略模式将不会生效,具体解决方法,参考<<二.常用命令>>.
|
||||
|
||||
#=======================================================================================================================
|
||||
#============================== java忽略文件 =====================================
|
||||
#===================== https://github.com/github/gitignore/blob/master/Java.gitignore ==================
|
||||
#=======================================================================================================================
|
||||
# 编译后的class文件,忽略所有以[.class]结尾的文件
|
||||
*.class
|
||||
|
||||
# 日志文件,忽略所有以[.log]结尾的文件.
|
||||
*.log
|
||||
|
||||
# BlueJ 文件,忽略所有以[.ctxt]结尾的文件.
|
||||
*.ctxt
|
||||
|
||||
# Mobile Tools for Java (J2ME),忽略[.mtj.tmp/]目录及其子文件.
|
||||
.mtj.tmp/
|
||||
|
||||
# 打包文件,忽略所有以[.jar]或[.war]或[.nar]或[.ear]或[.zip]或[.tar.gz]或[rar]结尾的文件.
|
||||
*.jar
|
||||
*.war
|
||||
*.nar
|
||||
*.ear
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
|
||||
# 虚拟机崩溃日志,忽略所有以[hs_err_pid]开头的文件.[see http://www.java.com/en/download/help/error_hotspot.xml]
|
||||
hs_err_pid*
|
||||
#=======================================================================================================================
|
||||
#============================== maven忽略文件 ===================================
|
||||
#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ==================
|
||||
#=======================================================================================================================
|
||||
target/
|
||||
pom.xml.tag
|
||||
pom.xml.releaseBackup
|
||||
pom.xml.versionsBackup
|
||||
pom.xml.next
|
||||
release.properties
|
||||
dependency-reduced-pom.xml
|
||||
buildNumber.properties
|
||||
.mvn/timing.properties
|
||||
# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
|
||||
!/.mvn/wrapper/maven-wrapper.jar
|
||||
#=======================================================================================================================
|
||||
#============================== IDE环境忽略文件 ==================================
|
||||
#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ==================
|
||||
#=======================================================================================================================
|
||||
#----------------IDEA-------------
|
||||
.idea/*
|
||||
.idea/compiler.xml
|
||||
.idea/encodings.xml
|
||||
.idea/modules.xml
|
||||
*.iml
|
||||
#=======================================================================================================================
|
||||
#============================== other环境忽略文件 ================================
|
||||
#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ==================
|
||||
#=======================================================================================================================
|
||||
*.sw?
|
||||
.#*
|
||||
*#
|
||||
*~
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
bin
|
||||
build
|
||||
target
|
||||
dependency-reduced-pom.xml
|
||||
*.sublime-*
|
||||
/scratch
|
||||
.gradle
|
||||
Guardfile
|
||||
README.html
|
||||
*.iml
|
||||
.idea
|
||||
*/.DS_Store
|
||||
.DS_Store
|
11
skyer-goods/.gitlab-ci.yml
Normal file
11
skyer-goods/.gitlab-ci.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
include: http://api.k8s9.com/devops/v1/projects/285085540595404800/ci_contents/pipelines/ce450dff-5aa0-47a1-b397-6f0a71aed0c2/content.yaml
|
||||
|
||||
#include: http://api.k8s9.com/devops/v1/projects/285085540595404800/ci_contents/pipelines/3db66342-8915-49a4-b4e0-c0e57c08c657/content.yaml
|
||||
#
|
||||
##include: http://api.k8s9.com/devops/v1/projects/285085540595404800/ci_contents/pipelines/b2617c66-8f9a-4dca-9e4a-977a83404093/content.yaml
|
||||
##
|
||||
###include: http://api.k8s9.com/devops/v1/projects/285085540595404800/ci_contents/pipelines/a814fa4b-e039-4a7d-8bcf-e060b751925d/content.yaml
|
||||
###
|
||||
####include: http://api.baogicloud.com/devops/v1/projects/204888765897510912/ci_contents/pipelines/0cfdcff6-6fe6-43dd-a5d0-9db2c866a451/content.yaml
|
||||
####
|
||||
#####include: http://api.baogicloud.com/devops/v1/projects/187577360164982784/ci_contents/pipelines/903880b5-824b-42c1-9088-2f59c0598f7e/content.yaml
|
5
skyer-goods/charts/skyer-goods/Chart.yaml
Normal file
5
skyer-goods/charts/skyer-goods/Chart.yaml
Normal file
|
@ -0,0 +1,5 @@
|
|||
apiVersion: v1
|
||||
appVersion: "1.0"
|
||||
description: A Helm chart for Kubernetes
|
||||
name: skyer-goods
|
||||
version: 0.1.0
|
81
skyer-goods/charts/skyer-goods/README.md
Normal file
81
skyer-goods/charts/skyer-goods/README.md
Normal file
|
@ -0,0 +1,81 @@
|
|||
# skyer Base Service
|
||||
基于Spring Cloud Goods的微服务商品中心服务
|
||||
## Introduction
|
||||
|
||||
## Add Helm chart repository
|
||||
|
||||
``` bash
|
||||
helm repo add skyer https://chart.skyer.com.cn/skyer/c7n
|
||||
helm repo update
|
||||
```
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
```bash
|
||||
$ helm install c7n/skyer-platform --name skyer-platform
|
||||
```
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
```bash
|
||||
$ helm delete skyer-platform
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Parameter | Description | Default
|
||||
--- | --- | ---
|
||||
`replicaCount` | pod运行数量 | `1`
|
||||
`image.repository` | 镜像库地址 | `registry.skyer.com.cn/skyer/skyer-platform`
|
||||
`image.pullPolicy` | 镜像拉取策略 | `IfNotPresent`
|
||||
`preJob.timeout` | job超时时间 | `300`
|
||||
`preJob.image` | job镜像库地址 | `registry.cn-hangzhou.aliyuncs.com/skyer-tools/dbtool:0.6.4`
|
||||
`metrics.path` | 收集应用的指标数据路径 | `/actuator/prometheus`
|
||||
`metrics.group` | 性能指标应用分组 | `spring-boot`
|
||||
`logs.parser` | 日志收集格式 | `spring-boot`
|
||||
`deployment.managementPort` | 服务管理端口 | `8101`
|
||||
`ingress.enabled` | 是否创建k8s ingress | `false`
|
||||
`env.open.SPRING_DATASOURCE_URL` | 数据库连接地址 | `jdbc:mysql://localhost/base_service?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true`
|
||||
`env.open.SPRING_DATASOURCE_USERNAME` | 数据库用户名 | `skyer`
|
||||
`env.open.SPRING_DATASOURCE_PASSWORD` | 数据库密码 | `password`
|
||||
`env.open.SPRING_REDIS_HOST` | redis主机地址 | `localhost`
|
||||
`env.open.SPRING_REDIS_PORT` | redis端口 | `6379`
|
||||
`env.open.SPRING_REDIS_DATABASE` | redis db | `1`
|
||||
`env.open.EUREKA_CLIENT_SERVICEURL_DEFAULTZONE` | 注册服务地址 | `http://register-server:8000/eureka/`
|
||||
`service.enabled` | 是否创建k8s service | `false`
|
||||
`service.type` | service类型 | `ClusterIP`
|
||||
`service.port` | service端口 | `8100`
|
||||
`service.name` | service名称 | `skyer-platform`
|
||||
`resources.limits` | k8s中容器能使用资源的资源最大值 | `3Gi`
|
||||
`resources.requests` | k8s中容器使用的最小资源需求 | `2Gi`
|
||||
|
||||
### SkyWalking Configuration
|
||||
Parameter | Description
|
||||
--- | ---
|
||||
`javaagent` | SkyWalking 代理jar包(添加则开启 SkyWalking,删除则关闭)
|
||||
`skywalking.agent.application_code` | SkyWalking 应用名称
|
||||
`skywalking.agent.sample_n_per_3_secs` | SkyWalking 采样率配置
|
||||
`skywalking.agent.namespace` | SkyWalking 跨进程链路中的header配置
|
||||
`skywalking.agent.authentication` | SkyWalking 认证token配置
|
||||
`skywalking.agent.span_limit_per_segment` | SkyWalking 每segment中的最大span数配置
|
||||
`skywalking.agent.ignore_suffix` | SkyWalking 需要忽略的调用配置
|
||||
`skywalking.agent.is_open_debugging_class` | SkyWalking 是否保存增强后的字节码文件
|
||||
`skywalking.collector.backend_service` | SkyWalking OAP 服务地址和端口配置
|
||||
|
||||
```bash
|
||||
$ helm install c7n/skyer-platform \
|
||||
--set env.open.SKYWALKING_OPTS="-javaagent:/agent/skywalking-agent.jar -Dskywalking.agent.application_code=skyer-platform -Dskywalking.agent.sample_n_per_3_secs=-1 -Dskywalking.collector.backend_service=oap.skywalking:11800" \
|
||||
--name skyer-platform
|
||||
```
|
||||
|
||||
## 验证部署
|
||||
```bash
|
||||
curl -s $(kubectl get po -n c7n-system -l skyer.io/release=skyer-platform -o jsonpath="{.items[0].status.podIP}"):8081/actuator/health | jq -r .status
|
||||
```
|
||||
出现以下类似信息即为成功部署
|
||||
|
||||
```bash
|
||||
UP
|
||||
```
|
28
skyer-goods/charts/skyer-goods/templates/_helpers.tpl
Normal file
28
skyer-goods/charts/skyer-goods/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,28 @@
|
|||
{{/* vim: set filetype=mustache: */}}
|
||||
{{- /*
|
||||
service.labels.standard prints the standard service Helm labels.
|
||||
The standard labels are frequently used in metadata.
|
||||
*/ -}}
|
||||
|
||||
{{- define "service.image" -}}
|
||||
{{- printf "%s:%s" .Values.image.repository (default (.Chart.Version) .Values.image.tag) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Return the appropriate apiVersion for deployment.
|
||||
*/}}
|
||||
{{- define "app.deployment.apiVersion" -}}
|
||||
{{- if semverCompare "<1.9-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||
{{- print "apps/v1beta2" -}}
|
||||
{{- else -}}
|
||||
{{- print "apps/v1" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{- define "service.labels.kubesphere" -}}
|
||||
app: {{ .Release.Name | quote }}
|
||||
app.kubernetes.io/name: {{ .Values.kubesphere.app.name | quote }}
|
||||
app.kubernetes.io/version: {{ .Values.kubesphere.app.version | quote }}
|
||||
version: {{ .Values.kubesphere.app.version | quote }}
|
||||
{{- end -}}
|
121
skyer-goods/charts/skyer-goods/templates/deployment.yaml
Normal file
121
skyer-goods/charts/skyer-goods/templates/deployment.yaml
Normal file
|
@ -0,0 +1,121 @@
|
|||
apiVersion: {{ include "app.deployment.apiVersion" . }}
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}
|
||||
labels:
|
||||
{{ include "service.labels.kubesphere" . | indent 4 }}
|
||||
annotations:
|
||||
deployment.kubernetes.io/revision: '1'
|
||||
kubesphere.io/creator: {{ .Values.kubesphere.app.creator | quote }}
|
||||
servicemesh.kubesphere.io/enabled: '{{ .Values.kubesphere.app.servicemesh }}'
|
||||
spec:
|
||||
strategy:
|
||||
type: {{ .Values.deploymentUpdate.type }}
|
||||
{{- if eq .Values.deploymentUpdate.type "RollingUpdate" }}
|
||||
rollingUpdate:
|
||||
maxSurge: {{ .Values.deploymentUpdate.maxSurge }}
|
||||
maxUnavailable: {{ .Values.deploymentUpdate.maxUnavailable }}
|
||||
{{- else }}
|
||||
rollingUpdate: null
|
||||
{{- end}}
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{ include "service.labels.kubesphere" . | indent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
sidecar.istio.io/inject: '{{ .Values.kubesphere.app.servicemesh }}'
|
||||
labels:
|
||||
{{ include "service.labels.kubesphere" . | indent 8 }}
|
||||
spec:
|
||||
volumes:
|
||||
- name: host-time
|
||||
hostPath:
|
||||
path: /etc/localtime
|
||||
type: ''
|
||||
- name: data
|
||||
{{- if .Values.persistence.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Values.persistence.existingClaim | default ( .Release.Name ) }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Release.Name }}
|
||||
image: {{ include "service.image" . }}
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
env:
|
||||
{{- range $name, $value := .Values.env.open }}
|
||||
{{- if ne (len ($value | quote)) 0 }}
|
||||
- name: {{ $name | quote }}
|
||||
value: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http-{{ .Values.service.port }}
|
||||
containerPort: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
{{- if not (empty .Values.deployment.managementPort) }}
|
||||
- name: http-{{ .Values.deployment.managementPort }}
|
||||
containerPort: {{ .Values.deployment.managementPort }}
|
||||
protocol: TCP
|
||||
{{- end }}
|
||||
readinessProbe:
|
||||
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.readinessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- >
|
||||
nc -z localhost {{ .Values.env.open.SERVER_PORT }}
|
||||
&& curl -s --fail localhost:{{ .Values.env.open.MANAGEMENT_SERVER_PORT }}/actuator/health
|
||||
livenessProbe:
|
||||
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.livenessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- >
|
||||
nc -z localhost {{ .Values.env.open.SERVER_PORT }}
|
||||
&& curl -s --fail localhost:{{ .Values.env.open.MANAGEMENT_SERVER_PORT }}/actuator/health
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 12 }}
|
||||
volumeMounts:
|
||||
- name: host-time
|
||||
readOnly: true
|
||||
mountPath: /etc/localtime
|
||||
- mountPath: /Charts
|
||||
name: data
|
||||
{{- if not (empty .Values.persistence.subPath) }}
|
||||
subPath: {{ .Values.persistence.subPath }}
|
||||
{{- end }}
|
||||
terminationMessagePath: /dev/termination-log
|
||||
terminationMessagePolicy: File
|
||||
restartPolicy: Always
|
||||
terminationGracePeriodSeconds: 30
|
||||
dnsPolicy: ClusterFirst
|
||||
serviceAccountName: default
|
||||
serviceAccount: default
|
||||
securityContext: {}
|
||||
schedulerName: default-scheduler
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
41
skyer-goods/charts/skyer-goods/templates/service.yaml
Normal file
41
skyer-goods/charts/skyer-goods/templates/service.yaml
Normal file
|
@ -0,0 +1,41 @@
|
|||
{{- if .Values.service.enabled }}
|
||||
kind: Service
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ .Release.Name }}
|
||||
labels:
|
||||
{{ include "service.labels.kubesphere" . | indent 4 }}
|
||||
annotations:
|
||||
kubesphere.io/creator: {{ .Values.kubesphere.app.creator }}
|
||||
kubesphere.io/serviceType: {{ .Values.kubesphere.app.serviceType | quote }}
|
||||
{{- if .Values.kubesphere.app.ingress }}
|
||||
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: ''
|
||||
service.beta.kubernetes.io/qingcloud-load-balancer-type: '0'
|
||||
{{- end }}
|
||||
servicemesh.kubesphere.io/enabled: '{{ .Values.kubesphere.app.servicemesh }}'
|
||||
spec:
|
||||
ports:
|
||||
- name: http-{{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
port: {{ .Values.service.port }}
|
||||
targetPort: {{ .Values.service.port }}
|
||||
{{- if not (empty .Values.service.nodePort) }}
|
||||
nodePort: {{ .Values.service.nodePort }}
|
||||
{{- end }}
|
||||
{{- if not (empty .Values.deployment.managementPort) }}
|
||||
- name: http-{{ .Values.deployment.managementPort }}
|
||||
protocol: TCP
|
||||
port: {{ .Values.deployment.managementPort }}
|
||||
targetPort: {{ .Values.deployment.managementPort }}
|
||||
{{- if not (empty .Values.deployment.nodePort) }}
|
||||
nodePort: {{ .Values.deployment.nodePort }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
selector:
|
||||
{{ include "service.labels.kubesphere" . | indent 4 }}
|
||||
type: {{ .Values.service.type | quote }}
|
||||
sessionAffinity: None
|
||||
ipFamilies:
|
||||
- IPv4
|
||||
ipFamilyPolicy: SingleStack
|
||||
{{- end }}
|
128
skyer-goods/charts/skyer-goods/values.yaml
Normal file
128
skyer-goods/charts/skyer-goods/values.yaml
Normal file
|
@ -0,0 +1,128 @@
|
|||
## 实例运行数量
|
||||
replicaCount: 1
|
||||
|
||||
## 设置默认的 image、imageTag 和 imagePullPolicy。
|
||||
image:
|
||||
repository: harbor.k8s9.com/k8s9-skyer-ebc/skyer-goods
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
deployment:
|
||||
managementPort: 8311
|
||||
nodePort:
|
||||
|
||||
kubesphere:
|
||||
app:
|
||||
name: ebc
|
||||
version: v1
|
||||
creator: admin
|
||||
servicemesh: true
|
||||
# statelessservice statefulservice
|
||||
serviceType: statelessservice
|
||||
ingress: false
|
||||
|
||||
## Deployment 更新策略
|
||||
deploymentUpdate:
|
||||
type: RollingUpdate
|
||||
maxUnavailable: 25%
|
||||
maxSurge: 25%
|
||||
|
||||
## Pod 节点分配
|
||||
## ref: https://kubernetes.io/docs/user-guide/node-selection/
|
||||
##
|
||||
nodeSelector: {}
|
||||
tolerations: []
|
||||
affinity: {}
|
||||
## 实例运行时的环境变量
|
||||
env:
|
||||
open:
|
||||
# 本实例服务端口
|
||||
SERVER_PORT: 8310
|
||||
# 本实例管理端口
|
||||
MANAGEMENT_SERVER_PORT: 8311
|
||||
|
||||
# 是否启用配置中心
|
||||
SPRING_CLOUD_CONFIG_ENABLED: false
|
||||
# 配置中心地址
|
||||
SPRING_CLOUD_CONFIG_URI: http://skyer-config:8010
|
||||
|
||||
# Redis 主机地址
|
||||
SPRING_REDIS_HOST: skyer-redis
|
||||
# Redis 端口
|
||||
SPRING_REDIS_PORT: 6379
|
||||
# Redis db 固定数据不可更改
|
||||
SPRING_REDIS_DATABASE: 1
|
||||
|
||||
# 数据库连接地址
|
||||
SPRING_DATASOURCE_URL: jdbc:mysql://skyer-mysql:3306/skyer_goods?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true&serverTimezone=Asia/Shanghai
|
||||
# 数据库用户名
|
||||
SPRING_DATASOURCE_USERNAME: root
|
||||
# 数据库密码
|
||||
SPRING_DATASOURCE_PASSWORD: 123456
|
||||
|
||||
# 注册服务地址
|
||||
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://skyer-register:8000/eureka/
|
||||
|
||||
EUREKA_INSTANCE_PREFER_IP_ADDRESS: true
|
||||
|
||||
# 项目级API是否必须检查项目参数
|
||||
SKYER_GATEWAY_FILTER_COMMON_REQUEST_CHECK_PROJECT: true
|
||||
# 组织级API是否必须检查组织参数
|
||||
SKYER_GATEWAY_FILTER_COMMON_REQUEST_CHECK_ORGANIZATION: true
|
||||
# 是否启用标准的权限检查
|
||||
SKYER_GATEWAY_FILTER_COMMON_REQUEST_ENABLE: true
|
||||
# 是否统计API访问情况
|
||||
SKYER_GATEWAY_FILTER_COLLECT_SPAN_ENABLED: true
|
||||
# 是否打印 JWT
|
||||
SKYER_GATEWAY_HELPER_ENABLE_JWT_LOG: false
|
||||
# 主键加密配置 encrypt(主键加密) to_string(主键变字符串类型) do_nothing(关闭加密)
|
||||
SKYER_REQUEST_ENCRYPT_MODE: encrypt
|
||||
LOG_LEVEL: info
|
||||
SKYER_GATEWAY_AUTHENTICATE_REDIS: true
|
||||
|
||||
# 百分比使用物理内存,预留一部分用于堆外内存以及外部程序
|
||||
JAVA_OPTS: >-
|
||||
-XX:MaxRAMPercentage=80.0
|
||||
|
||||
## Liveness 和 Readiness 探针相关配置
|
||||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
|
||||
livenessProbe:
|
||||
initialDelaySeconds: 180
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 3
|
||||
successThreshold: 1
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 15
|
||||
timeoutSeconds: 3
|
||||
successThreshold: 1
|
||||
failureThreshold: 3
|
||||
|
||||
## 资源请求和限制相关配置
|
||||
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
|
||||
##
|
||||
resources:
|
||||
limits:
|
||||
cpu: 900m
|
||||
memory: 2Gi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 2Gi
|
||||
|
||||
## service 相关设置
|
||||
## ref: http://kubernetes.io/docs/user-guide/services/
|
||||
##
|
||||
service:
|
||||
enabled: true
|
||||
# LoadBalancer ClusterIP
|
||||
type: ClusterIP
|
||||
port: 8310
|
||||
nodePort:
|
||||
|
||||
persistence:
|
||||
enabled: false
|
||||
## A manually managed Persistent Volume and Claim
|
||||
## Requires persistence.enabled: true
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
# existingClaim:
|
||||
# subPath:
|
6
skyer-goods/docker/Dockerfile
Normal file
6
skyer-goods/docker/Dockerfile
Normal file
|
@ -0,0 +1,6 @@
|
|||
FROM registry.cn-shanghai.aliyuncs.com/c7n/javabase:0.10.0
|
||||
RUN mkdir /skyer && chown -R www-data:www-data /skyer
|
||||
COPY --chown=www-data:www-data app.jar /skyer/skyer-goods.jar
|
||||
WORKDIR /skyer
|
||||
USER 33
|
||||
CMD java $JAVA_OPTS $SKYWALKING_OPTS -jar /skyer/skyer-goods.jar
|
13
skyer-goods/init-local-database.sh
Normal file
13
skyer-goods/init-local-database.sh
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
mkdir -p target
|
||||
if [ ! -f target/skyer-tool-liquibase.jar ]
|
||||
then
|
||||
curl https://nexus.skyer.com.cn/repository/skyer-release/io/skyer/skyer-tool-liquibase/0.8.1.RELEASE/skyer-tool-liquibase-0.8.1.RELEASE.jar -o target/skyer-tool-liquibase.jar
|
||||
fi
|
||||
|
||||
java -Dspring.datasource.url="jdbc connection url" \
|
||||
-Dspring.datasource.username=username \
|
||||
-Dspring.datasource.password=password \
|
||||
-Ddata.drop=false -Ddata.init=init \
|
||||
-Ddata.dir=src/main/resources \
|
||||
-jar target/skyer-tool-liquibase.jar
|
346
skyer-goods/pom.xml
Normal file
346
skyer-goods/pom.xml
Normal file
|
@ -0,0 +1,346 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.skyer</groupId>
|
||||
<artifactId>skyer-parent</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>skyer-goods</artifactId>
|
||||
|
||||
|
||||
<properties>
|
||||
<lambok.version>1.18.16</lambok.version>
|
||||
<mapstruct.version>1.3.1.Final</mapstruct.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<!-- skyer starter -->
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-mybatis-mapper</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-export</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-feign-replay</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-websocket</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-config-client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-metric</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-keyencrypt</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- skyer boot -->
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-iam</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-platform</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-message</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-scheduler</artifactId>
|
||||
</dependency>
|
||||
<!-- 个性化插件boot-->
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-customize</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- api 客制化 -->
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-api-customize</artifactId>
|
||||
</dependency>
|
||||
<!-- 使用 api 客制化时,依赖的项目必须自行引入 tools.jar 热部署时用到,同时,需要在打包时将其打包进去 includeSystemScope=true -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>jdk.tools</groupId>-->
|
||||
<!-- <artifactId>jdk.tools</artifactId>-->
|
||||
<!-- <version>1.8</version>-->
|
||||
<!-- <scope>system</scope>-->
|
||||
<!-- <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<!-- db -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc7</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.microsoft.sqlserver</groupId>
|
||||
<artifactId>sqljdbc4</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct</artifactId>
|
||||
<version>${mapstruct.version}</version>
|
||||
</dependency>
|
||||
<!-- spring-boot -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-undertow</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.retrofit2</groupId>
|
||||
<artifactId>retrofit</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.retrofit2</groupId>
|
||||
<artifactId>converter-jackson</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- commons -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-collections4</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||
<artifactId>jackson-dataformat-yaml</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- jsr310 时间支持 -->
|
||||
<dependency>
|
||||
<groupId>org.mybatis</groupId>
|
||||
<artifactId>mybatis-typehandlers-jsr310</artifactId>
|
||||
<version>1.0.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- test -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- spock测试相关依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.spockframework</groupId>
|
||||
<artifactId>spock-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spockframework</groupId>
|
||||
<artifactId>spock-spring</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cglib</groupId>
|
||||
<artifactId>cglib-nodep</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- register and config -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-config-client</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<!-- lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.7.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.starter</groupId>
|
||||
<artifactId>skyer-starter-saga</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.skyer.boot</groupId>
|
||||
<artifactId>skyer-boot-search</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>app</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
</includes>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/**</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>saml/*.jks</exclude>
|
||||
</excludes>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src</directory>
|
||||
<includes>
|
||||
<include>**/*.sh</include>
|
||||
</includes>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<configuration>
|
||||
<nonFilteredFileExtensions>
|
||||
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
|
||||
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
|
||||
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
|
||||
<nonFilteredFileExtension>ttc</nonFilteredFileExtension>
|
||||
</nonFilteredFileExtensions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
<encoding>${project.build.sourceEncoding}</encoding>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</path>
|
||||
<path>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-processor</artifactId>
|
||||
<version>${mapstruct.version}</version>
|
||||
</path>
|
||||
<!-- other annotation processors -->
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<configuration>
|
||||
<skip>${maven.javadoc.skip}</skip>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<additionalOptions>
|
||||
<additionalOption>
|
||||
-Xdoclint:none
|
||||
</additionalOption>
|
||||
</additionalOptions>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<skip>false</skip>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*Test.java</include>
|
||||
<include>**/*Spec.java</include>
|
||||
</includes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,16 @@
|
|||
package org.skyer.autoconfigure.goods;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
/**
|
||||
* @author bojiangzhou 2018/10/25
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Import(GoodsAutoConfiguration.class)
|
||||
public @interface EnableSkyerGoods {
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
package org.skyer.autoconfigure.goods;
|
||||
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
import org.skyer.goods.infra.properties.DataHierarchyProperties;
|
||||
import org.skyer.goods.infra.properties.GoodsProperties;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
|
||||
import org.skyer.resource.annoation.EnableSkyerResourceServer;
|
||||
|
||||
import org.skyer.core.jackson.annotation.EnableObjectMapper;
|
||||
import org.skyer.core.util.CommonExecutor;
|
||||
|
||||
/**
|
||||
* @author bojiangzhou 2018/10/25
|
||||
*/
|
||||
@ComponentScan(value = {"org.hippius.wd", "org.skyer.goods.api", "org.skyer.goods.app",
|
||||
"org.skyer.goods.config", "org.skyer.goods.domain", "org.skyer.goods.infra"})
|
||||
@EnableFeignClients({"org.skyer.goods", "org.skyer", "org.skyer.plugin"})
|
||||
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
|
||||
@EnableSkyerResourceServer
|
||||
@EnableObjectMapper
|
||||
@EnableAsync
|
||||
@EnableConfigurationProperties({GoodsProperties.class, DataHierarchyProperties.class})
|
||||
public class GoodsAutoConfiguration {
|
||||
|
||||
/**
|
||||
* 通用线程池
|
||||
*/
|
||||
@Bean
|
||||
@Qualifier("commonAsyncTaskExecutor")
|
||||
public ThreadPoolExecutor commonAsyncTaskExecutor() {
|
||||
int coreSize = CommonExecutor.getCpuProcessors();
|
||||
int maxSize = coreSize * 8;
|
||||
ThreadPoolExecutor executor =
|
||||
new ThreadPoolExecutor(coreSize, maxSize, 30, TimeUnit.MINUTES, new LinkedBlockingQueue<>(16),
|
||||
new ThreadFactoryBuilder().setNameFormat("CommonExecutor-%d").build(),
|
||||
new ThreadPoolExecutor.CallerRunsPolicy());
|
||||
|
||||
CommonExecutor.displayThreadPoolStatus(executor, "HpfmCommonExecutor");
|
||||
CommonExecutor.hookShutdownThreadPool(executor, "HpfmCommonExecutor");
|
||||
|
||||
return executor;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package org.skyer.goods;
|
||||
|
||||
import org.skyer.autoconfigure.goods.EnableSkyerGoods;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
|
||||
/**
|
||||
* Skyer平台服务启动类 主要包含平台通用功能
|
||||
*
|
||||
* @author xianzhi.chen@hand-china.com 2018年6月7日下午6:09:44
|
||||
*/
|
||||
@EnableSkyerGoods
|
||||
@EnableDiscoveryClient
|
||||
@SpringBootApplication
|
||||
public class GoodsApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
SpringApplication.run(GoodsApplication.class, args);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.BrandPageReqDTO;
|
||||
import org.skyer.goods.api.dto.BrandReqDTO;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.api.dto.StatusReqDTO;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.service.BrandService;
|
||||
import org.skyer.goods.domain.vo.BrandPageResVO;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品品牌管理
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 9:41 上午
|
||||
*/
|
||||
@RestController("BrandController.v1")
|
||||
@RequestMapping(value = "/v1/goods/brand")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_BRAND)
|
||||
public class BrandController {
|
||||
|
||||
@Autowired
|
||||
private BrandService brandService;
|
||||
|
||||
|
||||
@ApiOperation(value = "商品品牌查询")
|
||||
@PostMapping("/page")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
public ResponseEntity<Page<BrandPageResVO>> pageBrand(@Valid @RequestBody BrandPageReqDTO brandPageReqDTO){
|
||||
return Results.success( brandService.pageBrand(brandPageReqDTO));
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "商品品牌查询")
|
||||
@PostMapping("/list")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
public ResponseEntity<List<BrandPageResVO>> listBrand(@Valid @RequestBody BrandPageReqDTO brandPageReqDTO){
|
||||
return Results.success( brandService.listBrand(brandPageReqDTO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建商品品牌")
|
||||
@PostMapping("/brand")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
public ResponseEntity<String> createBrand(@Valid @RequestBody BrandReqDTO brandReqDTO){
|
||||
brandService.saveOrUpdateBrand(brandReqDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "编辑商品品牌")
|
||||
@PutMapping("/brand")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
public ResponseEntity<String> updateBrand(@Valid @RequestBody BrandReqDTO brandReqDTO){
|
||||
brandService.saveOrUpdateBrand(brandReqDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "删除商品品牌")
|
||||
@PatchMapping("/batch-delete-brand")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
public ResponseEntity<String> deleteByIds(@RequestBody IdsReqDTO idsReqDTO) {
|
||||
brandService.deleteBrand(idsReqDTO.getIds());
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "更新状态")
|
||||
@PatchMapping("/status")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
public ResponseEntity<String> updateStatus(@Valid @RequestBody StatusReqDTO statusReqDTO){
|
||||
brandService.updateBrandStatus(statusReqDTO.getIds(),statusReqDTO.getStatus());
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.CategoryAttributeQueryDTO;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.repository.CategoryAttributeRepository;
|
||||
import org.skyer.goods.domain.vo.CategoryAttributeVO;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品分类属性表 管理 API
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
@RestController("categoryAttributeController.v1")
|
||||
@RequestMapping("/v1/category/attributes")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_CATEGORY_ATTRIBUTE)
|
||||
public class CategoryAttributeController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private CategoryAttributeRepository categoryAttributeRepository;
|
||||
|
||||
@ApiModelProperty(value = "查询商品分类属性表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/list/category/attribute")
|
||||
public ResponseEntity<List<CategoryAttributeVO>> queryCategoryAttribute(
|
||||
@RequestBody CategoryAttributeQueryDTO param){
|
||||
//控制 没有分类id 返回空
|
||||
if(ObjectUtils.isEmpty( param.getCategoryId() )){
|
||||
return Results.success(new ArrayList<>());
|
||||
}
|
||||
List<CategoryAttributeVO> categoryAttributeList = categoryAttributeRepository.listIncludedValue(param);
|
||||
return Results.success(categoryAttributeList);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.CategoryQueryDTO;
|
||||
import org.skyer.goods.api.dto.CategorySaveDTO;
|
||||
import org.skyer.goods.api.dto.CategoryTreeQueryDTO;
|
||||
import org.skyer.goods.api.dto.CategoryUpdateByStatusFlagDTO;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.repository.CategoryRepository;
|
||||
import org.skyer.goods.domain.service.CategoryManageService;
|
||||
import org.skyer.goods.domain.vo.CategoryTreeVO;
|
||||
import org.skyer.goods.domain.vo.CategoryVO;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
|
||||
/**
|
||||
* 商品分类表 管理 API
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
@RestController("categoryController.v1")
|
||||
@RequestMapping("/v1/categorys")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_CATEGORY)
|
||||
public class CategoryController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private CategoryRepository categoryRepository;
|
||||
|
||||
@Autowired
|
||||
private CategoryManageService categoryManageService;
|
||||
|
||||
@ApiOperation(value = "保存商品分类表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/save")
|
||||
public ResponseEntity<Void> save(@RequestBody @Valid CategorySaveDTO category) {
|
||||
categoryManageService.save(category);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
// @ApiOperation(value = "修改商品分类表")
|
||||
// @Permission(level = ResourceLevel.ORGANIZATION)
|
||||
// @PostMapping("/update")
|
||||
// public ResponseEntity<Category> update(@RequestBody Category category) {
|
||||
// categoryRepository.updateByPrimaryKeySelective(category);
|
||||
// return Results.success(category);
|
||||
// }
|
||||
@ApiOperation(value = "修改商品状态")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/update/status")
|
||||
public ResponseEntity<Void> updateByStatusFlag(
|
||||
@RequestBody @Valid CategoryUpdateByStatusFlagDTO categoryUpdateByStatusFlagDTO){
|
||||
categoryManageService.updateByStatusFlag(categoryUpdateByStatusFlagDTO);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "批量删除商品分类表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@DeleteMapping("/batch/delete")
|
||||
public ResponseEntity<Void> batchDelete(
|
||||
@Encrypt @ApiParam(value = "商品分类ids", required = true) @RequestBody List<Long> ids){
|
||||
|
||||
categoryManageService.batchDelete(ids);
|
||||
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询分类列表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/page")
|
||||
public ResponseEntity<Page<CategoryVO>> page(
|
||||
@RequestBody CategoryQueryDTO categoryQueryDTO ){
|
||||
Page<CategoryVO> categoryPage = categoryManageService.pageIncludedAttr(categoryQueryDTO);
|
||||
return Results.success(categoryPage);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取分类树")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/tree")
|
||||
public ResponseEntity<List<CategoryTreeVO>> tree(
|
||||
@RequestBody CategoryTreeQueryDTO queryDTO){
|
||||
|
||||
List<CategoryTreeVO> categoryTree = categoryManageService.getCategoryTree(queryDTO);
|
||||
|
||||
return Results.success(categoryTree);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.domain.entity.GoodsShop;
|
||||
import org.skyer.goods.domain.service.GoodsShopService;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 商品在店铺中的上下架关系表 管理 API
|
||||
*
|
||||
* @author chenzz
|
||||
* @date 2021-06-25 13:36:41
|
||||
*/
|
||||
@RestController("goodsShopController.v1")
|
||||
@RequestMapping("/v1/goodsshops")
|
||||
public class GoodsShopController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private GoodsShopService goodsShopService;
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
@ApiOperation(value = "商品在店铺中的上下架关系表列表")
|
||||
@GetMapping
|
||||
public ResponseEntity<?> list(GoodsShop goodsShop, @ApiIgnore @SortDefault(value = GoodsShop.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<GoodsShop> list = goodsShopService.pageAndSort(pageRequest, goodsShop);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 详细
|
||||
*/
|
||||
@ApiOperation(value = "商品在店铺中的上下架关系表明细")
|
||||
@RequestMapping("/{id}")
|
||||
public ResponseEntity<?> detail(@PathVariable Long id) {
|
||||
GoodsShop goodsShop = goodsShopService.selectByPrimaryKey(id);
|
||||
return Results.success(goodsShop);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建
|
||||
*/
|
||||
@ApiOperation(value = "创建商品在店铺中的上下架关系表")
|
||||
@PostMapping
|
||||
public ResponseEntity<?> create(@RequestBody GoodsShop goodsShop) {
|
||||
goodsShopService.insertSelective(goodsShop);
|
||||
return Results.success(goodsShop);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
@ApiOperation(value = "修改商品在店铺中的上下架关系表")
|
||||
@PutMapping
|
||||
public ResponseEntity<?> update(@RequestBody GoodsShop goodsShop) {
|
||||
goodsShopService.updateByPrimaryKeySelective(goodsShop);
|
||||
return Results.success(goodsShop);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@ApiOperation(value = "删除商品在店铺中的上下架关系表")
|
||||
@DeleteMapping("/{id}")
|
||||
public ResponseEntity<?> remove(@PathVariable Long id) {
|
||||
goodsShopService.deleteByPrimaryKey(id);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,134 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.*;
|
||||
import org.skyer.goods.app.service.SkuEsService;
|
||||
import org.skyer.goods.app.service.SkuService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.vo.GoodsSkuDetailVO;
|
||||
import org.skyer.goods.domain.vo.GoodsSkuPageVO;
|
||||
import org.skyer.goods.domain.vo.RpcGoodsResVO;
|
||||
import org.skyer.goods.domain.vo.RpcOrderResVO;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品sku表 管理 API
|
||||
*
|
||||
* @author zhanglb 2021-12-28
|
||||
*/
|
||||
@RestController("goodsSkuController.v1")
|
||||
@RequestMapping("/v1/goods/sku")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_SKU)
|
||||
public class GoodsSkuController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SkuService skuService;
|
||||
|
||||
@Autowired
|
||||
private SkuEsService skuEsService;
|
||||
|
||||
|
||||
@ApiOperation(value = "商品sku列表(分页)")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/page")
|
||||
public ResponseEntity<Page<GoodsSkuPageVO>> list(@Valid @RequestBody GoodsSkuPageDTO goodsSkuPageDTO) throws Exception {
|
||||
Page<GoodsSkuPageVO> list = skuEsService.listPage(goodsSkuPageDTO);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "sku明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<GoodsSkuDetailVO> detail(@Encrypt @PathVariable Long id,boolean isEdit) {
|
||||
GoodsSkuDetailVO goodsSku = skuService.getDetail(id,isEdit);
|
||||
return Results.success(goodsSku);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "根据商品id获取已经生成的sku")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping("/goods/{spuId}")
|
||||
public ResponseEntity<List<GoodsSkuDetailVO>> goodsSkuDetail(@PathVariable @Encrypt Long spuId) {
|
||||
List<GoodsSkuDetailVO> list = skuService.getSkuAndAttributeDataByGoodsId(spuId);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品sku(多个)")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> deleteByIds(@ApiParam("主键ID") @RequestBody IdsReqDTO idsReqDTO) {
|
||||
skuService.deleteByIds(idsReqDTO.getIds());
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建商品sku")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping
|
||||
public ResponseEntity<?> create(@RequestBody SkuBatchSaveDTO skuBatchSaveDTO) {
|
||||
skuService.saveSku(skuBatchSaveDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "编辑sku")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PutMapping("/update")
|
||||
public ResponseEntity<?> update(@RequestBody SkuUpdateDTO updateDTO) {
|
||||
skuService.updateSku(updateDTO);
|
||||
return Results.success("编辑成功");
|
||||
}
|
||||
|
||||
@ApiModelProperty(value = "根据skuCode查询sku--用于远程调用")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@PostMapping("/list/goods")
|
||||
public ResponseEntity<List<RpcGoodsResVO>> getGoodsList(@RequestBody List<String> skuCodeList) {
|
||||
return Results.success(skuService.queryRPCGoodsList(skuCodeList));
|
||||
}
|
||||
|
||||
|
||||
@ApiModelProperty(value = "套餐下商品的List")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@PostMapping("/meals-goods-list")
|
||||
public ResponseEntity<List<RpcOrderResVO>> getMealsGoodsList(@RequestBody List<String> skuCodeList) {
|
||||
return Results.success(skuService.getMealsGoodsList(skuCodeList));
|
||||
}
|
||||
|
||||
@ApiModelProperty(value = "根据skuCode查询订单skuVO--用于远程调用")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@PostMapping("/order/sku/list")
|
||||
public ResponseEntity<List<RpcOrderResVO>> queryOrderRpcList(@RequestBody List<String> skuCodeList) {
|
||||
return Results.success(skuService.queryOrderRpcList(skuCodeList));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "批量提交审批")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PutMapping("/batchAudit")
|
||||
public ResponseEntity<?> batchAudit(@RequestBody SkuBatchAuditDTO skuBatchAuditDTO) {
|
||||
skuService.batchAudit(skuBatchAuditDTO);
|
||||
return Results.success("提交成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "刷新es数据")
|
||||
@GetMapping("/es-test")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionPublic = true)
|
||||
public ResponseEntity<Void> esTest() throws Exception {
|
||||
skuEsService.delSkuEsAll();
|
||||
skuEsService.skuStatusUp();
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.app.service.InstallServiceService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.dto.InstallServiceDTO;
|
||||
import org.skyer.goods.domain.dto.MultiDelDTO;
|
||||
import org.skyer.goods.domain.dto.PageInstallServiceDTO;
|
||||
import org.skyer.goods.domain.entity.InstallService;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 安装服务 管理 API
|
||||
*
|
||||
* @author chenzz 2021-08-18 15:42:47
|
||||
*/
|
||||
@RestController("installServiceSiteController.v1")
|
||||
@RequestMapping("/v1/install-services")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_INSTALL_SERVICE)
|
||||
public class InstallServiceController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private InstallServiceService installServiceService;
|
||||
|
||||
@ApiOperation(value = "安装服务列表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<?>> list(PageInstallServiceDTO installService, @ApiIgnore @SortDefault(value = InstallService.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<Dict> list = installServiceService.page(pageRequest, installService);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "安装服务明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<?> detail(@Encrypt @PathVariable Long id) {
|
||||
Dict detail = installServiceService.detail(id);
|
||||
return Results.success(detail);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建安装服务")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PostMapping
|
||||
public ResponseEntity<?> create(@RequestBody InstallServiceDTO service) {
|
||||
validObject(service);
|
||||
boolean result = installServiceService.create(service);
|
||||
return result ? Results.success("添加成功") : Results.error("添加失败");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改安装服务")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping
|
||||
public ResponseEntity<?> update(@RequestBody InstallServiceDTO service) {
|
||||
// validObject(service);
|
||||
boolean result = installServiceService.update(service);
|
||||
return result ? Results.success("修改成功") : Results.error("修改失败");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除安装服务")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> batchRemove(@ApiParam("主键ID") @RequestBody MultiDelDTO idsReqDTO) {
|
||||
Boolean result = installServiceService.batchRemove(idsReqDTO.getIds());
|
||||
return result ? Results.success("操作成功") : Results.error("删除出错!");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.api.dto.MaterialDTO;
|
||||
import org.skyer.goods.api.dto.MaterialListDTO;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.service.MaterialService;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品素材
|
||||
* </p>
|
||||
*
|
||||
* @author chenzz
|
||||
* @since 2021-06-23
|
||||
*/
|
||||
@RestController("materialController.v1")
|
||||
@RequestMapping("/v1/goods/material")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_MATERIAL)
|
||||
public class MaterialController {
|
||||
|
||||
@Autowired
|
||||
private MaterialService materialService;
|
||||
|
||||
@ApiOperation(value = "分页获取信息")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping("/list")
|
||||
public ResponseEntity<?> pageList(MaterialListDTO materialListDTO, PageRequest pageRequest) {
|
||||
return Results.success(materialService.pageList(pageRequest, materialListDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 详细
|
||||
*/
|
||||
@ApiOperation(value = "商品素材明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<?> detail(@PathVariable("id") @Encrypt Long id) {
|
||||
return Results.success(materialService.getDetail(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 详细2
|
||||
*/
|
||||
@ApiOperation(value = "根据id获取商品素材明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping("/details")
|
||||
public ResponseEntity<?> showDetails(@ApiParam("主键ID") @RequestParam(value = "id") @Encrypt Long id) {
|
||||
return Results.success(materialService.getDetail(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增/添加
|
||||
*/
|
||||
@ApiOperation("新增")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/add")
|
||||
public ResponseEntity<Void> add(@Validated @RequestBody MaterialDTO materialDTO) {
|
||||
return Boolean.TRUE.equals(materialService.add(materialDTO)) ? Results.success() : Results.error();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*/
|
||||
@ApiOperation("修改")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PutMapping("/edit")
|
||||
public ResponseEntity<Void> edit(@Validated @RequestBody MaterialDTO materialDTO) {
|
||||
if (materialDTO.getId() != null && materialDTO.getId() > 0) {
|
||||
return Boolean.TRUE.equals(materialService.edit(materialDTO)) ? Results.success() : Results.error();
|
||||
} else {
|
||||
// 修改必须设置id
|
||||
return Results.error();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@ApiOperation("删除")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@DeleteMapping("/delete")
|
||||
public ResponseEntity<Void> deleteById(@ApiParam("主键ID") @RequestParam(value = "id") @Encrypt Long id) {
|
||||
return Boolean.TRUE.equals(materialService.deleteById(id)) ? Results.success() : Results.error();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "批量删除")
|
||||
@PatchMapping("/batch-delete")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<String> deleteByIds(@ApiParam("主键ID") @RequestBody IdsReqDTO idsReqDTO) {
|
||||
Boolean result = materialService.deleteByIds(idsReqDTO.getIds());
|
||||
return Boolean.TRUE.equals(result) ? Results.success("操作成功") : Results.error("删除出错!");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,202 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.boot.platform.lov.constant.LovConstants;
|
||||
import org.skyer.boot.platform.lov.dto.LovDTO;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.domain.PageInfo;
|
||||
import org.skyer.core.exception.CommonException;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.oauth.CustomUserDetails;
|
||||
import org.skyer.core.oauth.DetailsHelper;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.UpdatePriceItemValueDTO;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.infra.constant.Constants;
|
||||
import org.skyer.goods.infra.feign.LovManageRemoteService;
|
||||
import org.skyer.goods.infra.feign.LovRemoteService;
|
||||
import org.skyer.goods.infra.feign.dto.LovHeaderDto;
|
||||
import org.skyer.goods.infra.feign.dto.LovValueDto;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 租户价格项 设置 API
|
||||
*
|
||||
* @author chenzz
|
||||
* @date 2021-07-06
|
||||
*/
|
||||
@RestController("priceItemSettingController.v1")
|
||||
@RequestMapping("/v1/price/item/setting")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_PRICE_SETTING)
|
||||
public class PriceItemSettingController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
LovRemoteService lovRemoteService;
|
||||
|
||||
@Autowired
|
||||
LovManageRemoteService lovManageRemoteService;
|
||||
|
||||
/**
|
||||
* 租户价格项值集查询 PRICE.ITEM.TYPE
|
||||
**/
|
||||
@ApiOperation(value = "租户价格项值集查询(分页)")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping("/page")
|
||||
public ResponseEntity<Page<LovValueDto>> pagePriceItemSetting(PageRequest pageRequest) {
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
|
||||
ResponseEntity<List<LovValueDto>> mapResponseEntity = lovRemoteService.queryAllLovValue(Constants.HPFM_LOV_VALUES_PRICE_ITEM, tenantId, null, tenantId);
|
||||
List<LovValueDto> body = mapResponseEntity.getBody();
|
||||
|
||||
int pageSize = pageRequest.getSize();
|
||||
int pageIndex = pageRequest.getPage() + 1;
|
||||
List<LovValueDto> pageList = body.stream().skip((pageIndex) * pageSize).limit(pageSize).collect(Collectors.toList());
|
||||
|
||||
int totalPage = (body.size() + pageSize - 1) / pageSize;
|
||||
Page<LovValueDto> pageVOS = new Page<>(pageList, new PageInfo(totalPage, pageSize), body.size());
|
||||
return Results.success(pageVOS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 租户价格项值集查询 PRICE.ITEM.TYPE
|
||||
**/
|
||||
@ApiOperation(value = "租户价格项值集查询(所有数据列表)")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@GetMapping
|
||||
public ResponseEntity<List<LovValueDto>> getPriceItemSetting() {
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
|
||||
ResponseEntity<List<LovValueDto>> mapResponseEntity = lovRemoteService.queryAllLovValue(Constants.HPFM_LOV_VALUES_PRICE_ITEM, tenantId, null, tenantId);
|
||||
List<LovValueDto> body = mapResponseEntity.getBody();
|
||||
return Results.success(body);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "值集头创建")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/add-head")
|
||||
public ResponseEntity<LovDTO> saveHeadPriceItemSetting(@ApiParam("值集名称") @RequestParam String lovName) {
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
ResponseEntity<LovDTO> lovDTOResponseEntity = lovManageRemoteService.queryHeaderByCode(tenantId, Constants.HPFM_LOV_VALUES_PRICE_ITEM);
|
||||
if (HttpStatus.OK.equals(lovDTOResponseEntity.getStatusCode())) {
|
||||
throw new CommonException("该值集头已经存在");
|
||||
}
|
||||
LovHeaderDto lovDTO = new LovHeaderDto();
|
||||
lovDTO.setTenantId(tenantId);
|
||||
lovDTO.setLovCode(Constants.HPFM_LOV_VALUES_PRICE_ITEM);
|
||||
lovDTO.setLovName(lovName);
|
||||
lovDTO.setMustPageFlag(1);
|
||||
lovDTO.setEnabledFlag(1);
|
||||
lovDTO.setLovTypeCode(LovConstants.LovTypes.IDP);
|
||||
return lovManageRemoteService.addLovHeader(tenantId, lovDTO);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "值集value创建")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/addValue")
|
||||
public ResponseEntity<LovValueDto> saveValuePriceItemSetting(@RequestBody UpdatePriceItemValueDTO dto) {
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
String lovCode = Constants.HPFM_LOV_VALUES_PRICE_ITEM;
|
||||
ResponseEntity<LovDTO> lovDTOResponseEntity = lovManageRemoteService.queryHeaderByCode(tenantId, lovCode);
|
||||
if (HttpStatus.OK.equals(lovDTOResponseEntity.getStatusCode())) {
|
||||
LovDTO lov = lovDTOResponseEntity.getBody();
|
||||
if (null != lov) {
|
||||
LovValueDto lovValueDto = new LovValueDto();
|
||||
lovValueDto.setLovId(lov.getLovId());
|
||||
lovValueDto.setLovCode(lovCode);
|
||||
lovValueDto.setValue(dto.getValue());
|
||||
lovValueDto.setMeaning(dto.getMeaning());
|
||||
lovValueDto.setDescription(dto.getDescription());
|
||||
// 设置启用,禁用标志
|
||||
if (ObjectUtil.isNotNull(dto.getEnabledFlag())) {
|
||||
lovValueDto.setEnabledFlag(dto.getEnabledFlag());
|
||||
} else {
|
||||
lovValueDto.setEnabledFlag(1);
|
||||
}
|
||||
lovValueDto.setOrderSeq(dto.getOrderSeq());
|
||||
lovValueDto.setTenantId(tenantId);
|
||||
return lovManageRemoteService.addLovValues(tenantId, lovValueDto);
|
||||
} else {
|
||||
throw new CommonException("值集头不存在");
|
||||
}
|
||||
} else {
|
||||
throw new CommonException("值集头不存在");
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation(value = "值集value修改")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping("/value-update")
|
||||
public ResponseEntity<LovValueDto> updatePriceItemValueSettings(@RequestBody UpdatePriceItemValueDTO dto) {
|
||||
// 查询租户信息
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
String lovCode = Constants.HPFM_LOV_VALUES_PRICE_ITEM;
|
||||
// 根据租户和lovCode获取值集头信息
|
||||
ResponseEntity<LovDTO> lovDTOResponseEntity = lovManageRemoteService.queryHeaderByCode(tenantId, lovCode);
|
||||
LovDTO lov = lovDTOResponseEntity.getBody();
|
||||
if (HttpStatus.OK.equals(lovDTOResponseEntity.getStatusCode()) && null != lov) {
|
||||
// 查询租户下loveCode, value匹配的值集
|
||||
ResponseEntity<List<LovValueDto>> listResponseEntity = lovManageRemoteService.listValuesByLovId(tenantId, lov.getLovId(), dto.getValue(), null);
|
||||
List<LovValueDto> body = listResponseEntity.getBody();
|
||||
if (HttpStatus.OK.equals(listResponseEntity.getStatusCode()) && !CollectionUtils.isEmpty(body)) {
|
||||
LovValueDto lovValueDto = body.get(0);
|
||||
lovValueDto.setMeaning(dto.getMeaning());
|
||||
lovValueDto.setDescription(dto.getDescription());
|
||||
// 设置可用、禁用标志
|
||||
if (ObjectUtil.isNotNull(dto.getEnabledFlag())) {
|
||||
lovValueDto.setEnabledFlag(dto.getEnabledFlag());
|
||||
}
|
||||
lovValueDto.setOrderSeq(dto.getOrderSeq());
|
||||
return lovManageRemoteService.updateLovValuesByPrimaryKey(tenantId, lovValueDto);
|
||||
} else {
|
||||
throw new CommonException("值集值不存在");
|
||||
}
|
||||
} else {
|
||||
throw new CommonException("值集头不存在");
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation(value = "值集value删除")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping("/value-delete/{valueCode}")
|
||||
public ResponseEntity deletePriceItemValueSettings(@PathVariable("valueCode") String valueCode) {
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
String lovCode = Constants.HPFM_LOV_VALUES_PRICE_ITEM;
|
||||
ResponseEntity<LovDTO> lovDTOResponseEntity = lovManageRemoteService.queryHeaderByCode(tenantId, lovCode);
|
||||
LovDTO lov = lovDTOResponseEntity.getBody();
|
||||
if (HttpStatus.OK.equals(lovDTOResponseEntity.getStatusCode()) && null != lov) {
|
||||
ResponseEntity<List<LovValueDto>> listResponseEntity = lovManageRemoteService.listValuesByLovId(tenantId, lov.getLovId(), valueCode, null);
|
||||
List<LovValueDto> body = listResponseEntity.getBody();
|
||||
if (HttpStatus.OK.equals(listResponseEntity.getStatusCode()) && !CollectionUtils.isEmpty(body)) {
|
||||
LovValueDto lovValueDto = body.get(0);
|
||||
List<LovValueDto> lovValueDtos = new ArrayList<>();
|
||||
lovValueDtos.add(lovValueDto);
|
||||
return lovManageRemoteService.batchDeleteLovValuesByPrimaryKey(tenantId, lovValueDtos);
|
||||
} else {
|
||||
throw new CommonException("值集值不存在");
|
||||
}
|
||||
} else {
|
||||
throw new CommonException("值集头不存在");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.domain.entity.SkuAttributeValue;
|
||||
import org.skyer.goods.domain.repository.SkuAttributeValueRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.skyer.mybatis.helper.SecurityTokenHelper;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* sku属性关联表 管理 API
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-28 09:17:10
|
||||
*/
|
||||
@RestController("skuAttributeValueSiteController.v1")
|
||||
@RequestMapping("/v1/sku-attribute-values")
|
||||
public class SkuAttributeValueController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SkuAttributeValueRepository skuAttributeValueRepository;
|
||||
|
||||
@ApiOperation(value = "sku属性关联表列表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<SkuAttributeValue>> list(SkuAttributeValue skuAttributeValue, @ApiIgnore @SortDefault(value = SkuAttributeValue.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<SkuAttributeValue> list = skuAttributeValueRepository.pageAndSort(pageRequest, skuAttributeValue);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "sku属性关联表明细")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<SkuAttributeValue> detail(@PathVariable Long id) {
|
||||
SkuAttributeValue skuAttributeValue = skuAttributeValueRepository.selectByPrimaryKey(id);
|
||||
return Results.success(skuAttributeValue);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建sku属性关联表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PostMapping
|
||||
public ResponseEntity<SkuAttributeValue> create(@RequestBody SkuAttributeValue skuAttributeValue) {
|
||||
validObject(skuAttributeValue);
|
||||
skuAttributeValueRepository.insertSelective(skuAttributeValue);
|
||||
return Results.success(skuAttributeValue);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改sku属性关联表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PutMapping
|
||||
public ResponseEntity<SkuAttributeValue> update(@RequestBody SkuAttributeValue skuAttributeValue) {
|
||||
skuAttributeValueRepository.updateByPrimaryKeySelective(skuAttributeValue);
|
||||
return Results.success(skuAttributeValue);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除sku属性关联表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> remove(@RequestBody SkuAttributeValue skuAttributeValue) {
|
||||
skuAttributeValueRepository.deleteByPrimaryKey(skuAttributeValue);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.domain.entity.SkuAttributeValueDraft;
|
||||
import org.skyer.goods.domain.repository.SkuAttributeValueDraftRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.skyer.mybatis.helper.SecurityTokenHelper;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* sku属性关联草稿表 管理 API
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-29 11:23:43
|
||||
*/
|
||||
@RestController("skuAttributeValueDraftSiteController.v1")
|
||||
@RequestMapping("/v1/sku-attribute-value-drafts")
|
||||
public class SkuAttributeValueDraftController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SkuAttributeValueDraftRepository skuAttributeValueDraftRepository;
|
||||
|
||||
@ApiOperation(value = "sku属性关联草稿表列表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<SkuAttributeValueDraft>> list(SkuAttributeValueDraft skuAttributeValueDraft, @ApiIgnore @SortDefault(value = SkuAttributeValueDraft.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<SkuAttributeValueDraft> list = skuAttributeValueDraftRepository.pageAndSort(pageRequest, skuAttributeValueDraft);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "sku属性关联草稿表明细")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<SkuAttributeValueDraft> detail(@PathVariable Long id) {
|
||||
SkuAttributeValueDraft skuAttributeValueDraft = skuAttributeValueDraftRepository.selectByPrimaryKey(id);
|
||||
return Results.success(skuAttributeValueDraft);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建sku属性关联草稿表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PostMapping
|
||||
public ResponseEntity<SkuAttributeValueDraft> create(@RequestBody SkuAttributeValueDraft skuAttributeValueDraft) {
|
||||
validObject(skuAttributeValueDraft);
|
||||
skuAttributeValueDraftRepository.insertSelective(skuAttributeValueDraft);
|
||||
return Results.success(skuAttributeValueDraft);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改sku属性关联草稿表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PutMapping
|
||||
public ResponseEntity<SkuAttributeValueDraft> update(@RequestBody SkuAttributeValueDraft skuAttributeValueDraft) {
|
||||
skuAttributeValueDraftRepository.updateByPrimaryKeySelective(skuAttributeValueDraft);
|
||||
return Results.success(skuAttributeValueDraft);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除sku属性关联草稿表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> remove(@RequestBody SkuAttributeValueDraft skuAttributeValueDraft) {
|
||||
skuAttributeValueDraftRepository.deleteByPrimaryKey(skuAttributeValueDraft);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.app.service.SkuService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.dto.AuditDTO;
|
||||
import org.skyer.goods.domain.dto.SkuAuditDTO;
|
||||
import org.skyer.goods.domain.vo.SkuAuditVO;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
|
||||
/**
|
||||
* SKU审核管理s
|
||||
* @author lixiaoyang
|
||||
* @date 2021/12/30 10:58
|
||||
*/
|
||||
@RestController("skuAuditController.v1")
|
||||
@RequestMapping("/v1/sku/audit")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_SKU_AUDIT_MANAGER)
|
||||
public class SkuAuditController {
|
||||
@Autowired
|
||||
private SkuService skuService;
|
||||
|
||||
@ApiOperation(value = "SKU审核详情")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@PostMapping("/detail")
|
||||
public ResponseEntity<SkuAuditVO> detail( @RequestBody SkuAuditDTO dto) {
|
||||
return Results.success(skuService.getAuditDetail(dto));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "SKU审核操作")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@PostMapping
|
||||
public ResponseEntity<Boolean> audit( @RequestBody AuditDTO dto) {
|
||||
return Results.success(skuService.skuAudit(dto));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.app.service.SkuAuditSettingService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.entity.SkuAuditSetting;
|
||||
import org.skyer.goods.domain.repository.SkuAuditSettingRepository;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
|
||||
/**
|
||||
* 商品SKU审核 管理 API
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-27 10:09:56
|
||||
*/
|
||||
@RestController("skuAuditSettingSiteController.v1")
|
||||
@RequestMapping("/v1/sku-audit-settings")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_SKU_AUDIT_SETTING)
|
||||
public class SkuAuditSettingController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SkuAuditSettingRepository skuAuditSettingRepository;
|
||||
@Autowired
|
||||
private SkuAuditSettingService auditSettingService;
|
||||
|
||||
@ApiOperation(value = "商品SKU审核设置明细")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping("/default")
|
||||
public ResponseEntity<SkuAuditSetting> detail() {
|
||||
SkuAuditSetting skuAuditSetting = skuAuditSettingRepository.selectDefault();
|
||||
return Results.success(skuAuditSetting);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改商品SKU审核设置")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PutMapping("/update")
|
||||
public ResponseEntity<SkuAuditSetting> update(@RequestBody SkuAuditSetting skuAuditSetting) {
|
||||
skuAuditSettingRepository.updateDefault(skuAuditSetting);
|
||||
return Results.success(skuAuditSetting);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.domain.entity.SkuDraft;
|
||||
import org.skyer.goods.domain.repository.SkuDraftRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.skyer.mybatis.helper.SecurityTokenHelper;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 商品规格草稿表 管理 API
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-29 11:12:15
|
||||
*/
|
||||
@RestController("skuDraftSiteController.v1")
|
||||
@RequestMapping("/v1/sku-drafts")
|
||||
public class SkuDraftController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SkuDraftRepository skuDraftRepository;
|
||||
|
||||
@ApiOperation(value = "商品规格草稿表列表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<SkuDraft>> list(SkuDraft skuDraft, @ApiIgnore @SortDefault(value = SkuDraft.FIELD_SKU_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<SkuDraft> list = skuDraftRepository.pageAndSort(pageRequest, skuDraft);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品规格草稿表明细")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@GetMapping("/{skuId}")
|
||||
public ResponseEntity<SkuDraft> detail(@PathVariable Long skuId) {
|
||||
SkuDraft skuDraft = skuDraftRepository.selectByPrimaryKey(skuId);
|
||||
return Results.success(skuDraft);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建商品规格草稿表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PostMapping
|
||||
public ResponseEntity<SkuDraft> create(@RequestBody SkuDraft skuDraft) {
|
||||
validObject(skuDraft);
|
||||
skuDraftRepository.insertSelective(skuDraft);
|
||||
return Results.success(skuDraft);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改商品规格草稿表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@PutMapping
|
||||
public ResponseEntity<SkuDraft> update(@RequestBody SkuDraft skuDraft) {
|
||||
skuDraftRepository.updateByPrimaryKeySelective(skuDraft);
|
||||
return Results.success(skuDraft);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品规格草稿表")
|
||||
@Permission(level = ResourceLevel.SITE)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> remove(@RequestBody SkuDraft skuDraft) {
|
||||
skuDraftRepository.deleteByPrimaryKey(skuDraft);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.api.dto.GoodsGroupReqDTO;
|
||||
import org.skyer.goods.api.dto.GroupPageReqDTO;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.service.SkuGroupService;
|
||||
import org.skyer.goods.domain.vo.GroupPageResVO;
|
||||
import org.skyer.goods.domain.vo.SkuGroupResVO;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* Sku组合表 管理 API
|
||||
*
|
||||
* @author wushaochuan 2021-08-13 09:55:04
|
||||
*/
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_GROUP)
|
||||
@RestController("skuGroupController.v1")
|
||||
@RequestMapping("/v1/sku-groups")
|
||||
public class SkuGroupController extends BaseController {
|
||||
@Autowired
|
||||
private SkuGroupService skuGroupService;
|
||||
|
||||
@ApiOperation(value = "创建或者更新sku组合")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
@PostMapping("/sku-group")
|
||||
public ResponseEntity<String> createOrUpdateSkuGroup(@RequestBody GoodsGroupReqDTO goodsGroupReqDTO){
|
||||
skuGroupService.createOrUpdateSkuGroup(goodsGroupReqDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "sku组合查询")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@GetMapping("/detail/{groupId}")
|
||||
public ResponseEntity<SkuGroupResVO> skuGroupDetail(@Encrypt @PathVariable("groupId") Long groupId) {
|
||||
SkuGroupResVO skuGroupResVO = skuGroupService.skuGroupDetail(groupId);
|
||||
return Results.success(skuGroupResVO);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品组合分页")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@PostMapping("/page")
|
||||
public ResponseEntity<Page<GroupPageResVO>> pageGroup(@RequestBody GroupPageReqDTO groupPageReqDTO) {
|
||||
return Results.success(skuGroupService.pageGroup(groupPageReqDTO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品组合")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION,permissionLogin = true)
|
||||
@DeleteMapping("/group")
|
||||
public ResponseEntity<String> delGroup(@RequestBody IdsReqDTO idsReqDTO) {
|
||||
skuGroupService.delGroup(idsReqDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.domain.entity.SpuAttrValueRelation;
|
||||
import org.skyer.goods.domain.repository.SpuAttrValueRelationRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.skyer.mybatis.helper.SecurityTokenHelper;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 商品和属性值关联关系 管理 API
|
||||
*
|
||||
* @author wushaochuan 2021-07-19 09:18:33
|
||||
*/
|
||||
@RestController("goodsAttrValueRelationController.v1")
|
||||
@RequestMapping("/v1/{organizationId}/goods-attr-value-relations")
|
||||
public class SpuAttrValueRelationController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SpuAttrValueRelationRepository spuAttrValueRelationRepository;
|
||||
|
||||
@ApiOperation(value = "商品和属性值关联关系列表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<SpuAttrValueRelation>> list(SpuAttrValueRelation spuAttrValueRelation, @ApiIgnore @SortDefault(value = SpuAttrValueRelation.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<SpuAttrValueRelation> list = spuAttrValueRelationRepository.pageAndSort(pageRequest, spuAttrValueRelation);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品和属性值关联关系明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<SpuAttrValueRelation> detail(@PathVariable Long id) {
|
||||
SpuAttrValueRelation spuAttrValueRelation = spuAttrValueRelationRepository.selectByPrimaryKey(id);
|
||||
return Results.success(spuAttrValueRelation);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建商品和属性值关联关系")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PostMapping
|
||||
public ResponseEntity<SpuAttrValueRelation> create(@RequestBody SpuAttrValueRelation spuAttrValueRelation) {
|
||||
validObject(spuAttrValueRelation);
|
||||
spuAttrValueRelationRepository.insertSelective(spuAttrValueRelation);
|
||||
return Results.success(spuAttrValueRelation);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改商品和属性值关联关系")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping
|
||||
public ResponseEntity<SpuAttrValueRelation> update(@RequestBody SpuAttrValueRelation spuAttrValueRelation) {
|
||||
SecurityTokenHelper.validToken(spuAttrValueRelation);
|
||||
spuAttrValueRelationRepository.updateByPrimaryKeySelective(spuAttrValueRelation);
|
||||
return Results.success(spuAttrValueRelation);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品和属性值关联关系")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> remove(@RequestBody SpuAttrValueRelation spuAttrValueRelation) {
|
||||
SecurityTokenHelper.validToken(spuAttrValueRelation);
|
||||
spuAttrValueRelationRepository.deleteByPrimaryKey(spuAttrValueRelation);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.domain.entity.SpuAttribute;
|
||||
import org.skyer.goods.domain.repository.SpuAttributeRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.skyer.mybatis.helper.SecurityTokenHelper;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 属性表 管理 API
|
||||
*
|
||||
* @author linzhuanghuang@ebc.com 2021-12-28 16:40:03
|
||||
*/
|
||||
@RestController("spuAttributeController.v1")
|
||||
@RequestMapping("/v1/spu-attributes")
|
||||
public class SpuAttributeController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SpuAttributeRepository spuAttributeRepository;
|
||||
|
||||
@ApiOperation(value = "属性表列表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<SpuAttribute>> list(SpuAttribute spuAttribute, @ApiIgnore @SortDefault(value = SpuAttribute.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<SpuAttribute> list = spuAttributeRepository.pageAndSort(pageRequest, spuAttribute);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "属性表明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<SpuAttribute> detail(@PathVariable Long id) {
|
||||
SpuAttribute spuAttribute = spuAttributeRepository.selectByPrimaryKey(id);
|
||||
return Results.success(spuAttribute);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建属性表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PostMapping
|
||||
public ResponseEntity<SpuAttribute> create(@RequestBody SpuAttribute spuAttribute) {
|
||||
validObject(spuAttribute);
|
||||
spuAttributeRepository.insertSelective(spuAttribute);
|
||||
return Results.success(spuAttribute);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改属性表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping
|
||||
public ResponseEntity<SpuAttribute> update(@RequestBody SpuAttribute spuAttribute) {
|
||||
SecurityTokenHelper.validToken(spuAttribute);
|
||||
spuAttributeRepository.updateByPrimaryKeySelective(spuAttribute);
|
||||
return Results.success(spuAttribute);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除属性表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> remove(@RequestBody SpuAttribute spuAttribute) {
|
||||
SecurityTokenHelper.validToken(spuAttribute);
|
||||
spuAttributeRepository.deleteByPrimaryKey(spuAttribute);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品属性")
|
||||
@PatchMapping("/batch-delete-attribute")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<String> deleteByIds(@RequestBody IdsReqDTO idsReqDTO) {
|
||||
spuAttributeRepository.deleteAttribute(idsReqDTO.getIds());
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.goods.domain.entity.SpuAttributeValue;
|
||||
import org.skyer.goods.domain.repository.SpuAttributeValueRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.skyer.mybatis.helper.SecurityTokenHelper;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 属性值表 管理 API
|
||||
*
|
||||
* @author linzhuanghuang@ebc.com 2021-12-28 16:40:03
|
||||
*/
|
||||
@RestController("spuAttributeValueController.v1")
|
||||
@RequestMapping("/v1/spu-attribute-values")
|
||||
public class SpuAttributeValueController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SpuAttributeValueRepository spuAttributeValueRepository;
|
||||
|
||||
@ApiOperation(value = "属性值表列表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<SpuAttributeValue>> list(SpuAttributeValue spuAttributeValue, @ApiIgnore @SortDefault(value = SpuAttributeValue.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<SpuAttributeValue> list = spuAttributeValueRepository.pageAndSort(pageRequest, spuAttributeValue);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "属性值表明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<SpuAttributeValue> detail(@PathVariable Long id) {
|
||||
SpuAttributeValue spuAttributeValue = spuAttributeValueRepository.selectByPrimaryKey(id);
|
||||
return Results.success(spuAttributeValue);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建属性值表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PostMapping
|
||||
public ResponseEntity<SpuAttributeValue> create(@RequestBody SpuAttributeValue spuAttributeValue) {
|
||||
validObject(spuAttributeValue);
|
||||
spuAttributeValueRepository.insertSelective(spuAttributeValue);
|
||||
return Results.success(spuAttributeValue);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改属性值表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping
|
||||
public ResponseEntity<SpuAttributeValue> update(@RequestBody SpuAttributeValue spuAttributeValue) {
|
||||
SecurityTokenHelper.validToken(spuAttributeValue);
|
||||
spuAttributeValueRepository.updateByPrimaryKeySelective(spuAttributeValue);
|
||||
return Results.success(spuAttributeValue);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除属性值表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> remove(@RequestBody SpuAttributeValue spuAttributeValue) {
|
||||
SecurityTokenHelper.validToken(spuAttributeValue);
|
||||
spuAttributeValueRepository.deleteByPrimaryKey(spuAttributeValue);
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.GoodsPageReqDTO;
|
||||
import org.skyer.goods.api.dto.GoodsRequestDTO;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.api.dto.StatusReqDTO;
|
||||
import org.skyer.goods.app.service.SpuEsService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.service.SpuService;
|
||||
import org.skyer.goods.domain.vo.GoodsDetailsVO;
|
||||
import org.skyer.goods.domain.vo.GoodsPageResVO;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
|
||||
/**
|
||||
* 商品管理
|
||||
*
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 10:36 上午
|
||||
*/
|
||||
@RestController("GoodsController.v1")
|
||||
@RequestMapping(value = "/v1/goods/manager")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_MANAGER)
|
||||
public class SpuController {
|
||||
|
||||
@Autowired
|
||||
private SpuService spuService;
|
||||
@Autowired
|
||||
private SpuEsService spuEsService;
|
||||
|
||||
@ApiOperation(value = "商品页面查询")
|
||||
@PostMapping("/page")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<Page<GoodsPageResVO>> pageGoods(@Valid @RequestBody GoodsPageReqDTO goodsPageReqDTO) throws Exception {
|
||||
if (StringUtils.isNotBlank(goodsPageReqDTO.getName())) {
|
||||
return Results.success(spuEsService.querySpuEs(goodsPageReqDTO));
|
||||
}
|
||||
return Results.success(spuService.pageGoods(goodsPageReqDTO));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询spu的商品List")
|
||||
@PostMapping("/goods-list-spu")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<List<GoodsPageResVO>> queryGoodsBySpuList(@RequestBody List<String> spuCodeList) {
|
||||
return Results.success(spuService.queryGoodsBySpuList(spuCodeList));
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "更新商品")
|
||||
@PutMapping("/goods")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<String> updateGoods(@Valid @RequestBody GoodsRequestDTO goodsRequestDTO) {
|
||||
spuService.insertOrUpdateGoods(goodsRequestDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation("创建商品")
|
||||
@PostMapping("/goods")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<String> createGoods(@Valid @RequestBody GoodsRequestDTO goodsRequestDTO) {
|
||||
spuService.insertOrUpdateGoods(goodsRequestDTO);
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品")
|
||||
@PatchMapping("/batch-delete-goods")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<String> deleteByIds(@RequestBody IdsReqDTO idsReqDTO) {
|
||||
spuService.deleteByIds(idsReqDTO.getIds());
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询商品详情")
|
||||
@GetMapping("/detail/{id}")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<GoodsDetailsVO> queryDetail(@ApiParam("主键ID") @Encrypt @PathVariable("id") Long id) {
|
||||
GoodsDetailsVO goodsDetailsVO = spuService.getDetailsById(id);
|
||||
return Results.success(goodsDetailsVO);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改商品状态")
|
||||
@PatchMapping("/goods")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionLogin = true)
|
||||
public ResponseEntity<String> updateGoodsStatus(@Valid @RequestBody StatusReqDTO statusReqDTO) {
|
||||
spuService.updateGoodsStatus(statusReqDTO.getIds(), statusReqDTO.getStatus());
|
||||
return Results.success("操作成功");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品批量上传ES测试")
|
||||
@GetMapping("/es-test")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION, permissionPublic = true)
|
||||
public ResponseEntity<Void> esTest() throws IOException {
|
||||
spuEsService.productStatusUp();
|
||||
return Results.success();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.app.service.SpuInstallServiceService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.dto.PageSpuInstallServiceDTO;
|
||||
import org.skyer.goods.domain.dto.SpuInstallServiceDTO;
|
||||
import org.skyer.goods.domain.entity.SpuInstallService;
|
||||
import org.skyer.goods.domain.entity.SpuSonMum;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 商品安装服务 管理 API
|
||||
*
|
||||
* @author chenzz 2021-08-18 16:42:11
|
||||
*/
|
||||
@RestController("spuInstallServiceSiteController.v1")
|
||||
@RequestMapping("/v1/spu-install-services")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_SPU_INSTALL_SERVICE)
|
||||
public class SpuInstallServiceController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SpuInstallServiceService spuInstallServiceService;
|
||||
|
||||
@ApiOperation(value = "商品安装服务列表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<?>> list(PageSpuInstallServiceDTO serviceDTO, @ApiIgnore @SortDefault(value = SpuInstallService.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<Dict> list = spuInstallServiceService.page(pageRequest, serviceDTO);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品安装服务明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<?> detail(@Encrypt @PathVariable Long id) {
|
||||
Dict installService = spuInstallServiceService.detail(id);
|
||||
return Results.success(installService);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建商品安装服务")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PostMapping
|
||||
public ResponseEntity<SpuSonMum> create(@RequestBody SpuInstallServiceDTO dto) {
|
||||
validObject(dto);
|
||||
boolean result = spuInstallServiceService.create(dto);
|
||||
return result ? Results.success() : Results.error();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改商品安装服务")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping
|
||||
public ResponseEntity<SpuSonMum> update(@RequestBody SpuInstallServiceDTO dto) {
|
||||
validObject(dto);
|
||||
boolean result = spuInstallServiceService.update(dto);
|
||||
return result ? Results.success() : Results.error();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除商品安装服务")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> batchRemove(@ApiParam("主键ID") @RequestBody IdsReqDTO idsReqDTO) {
|
||||
Boolean result = spuInstallServiceService.batchRemove(idsReqDTO.getIds());
|
||||
return result ? Results.success("操作成功") : Results.error("删除出错!");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
package org.skyer.goods.api.controller.v1;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.skyer.core.base.BaseController;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.core.util.Results;
|
||||
import org.skyer.goods.api.dto.IdsReqDTO;
|
||||
import org.skyer.goods.app.service.SpuSonMumService;
|
||||
import org.skyer.goods.config.GoodsSwaggerApiConfig;
|
||||
import org.skyer.goods.domain.dto.PageSonMumDTO;
|
||||
import org.skyer.goods.domain.dto.SpuSonMumDTO;
|
||||
import org.skyer.goods.domain.entity.SpuSonMum;
|
||||
import org.skyer.mybatis.pagehelper.annotation.SortDefault;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.pagehelper.domain.Sort;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
import org.skyer.swagger.annotation.Permission;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
/**
|
||||
* 子母商品 管理 API
|
||||
*
|
||||
* @author chenzz 2021-08-16 15:04:38
|
||||
*/
|
||||
@RestController("spuSonMumController.v1")
|
||||
@RequestMapping("/v1/spu-son-mums")
|
||||
@Api(tags = GoodsSwaggerApiConfig.GOODS_SPU_SON_MUM)
|
||||
public class SpuSonMumController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private SpuSonMumService spuSonMumService;
|
||||
|
||||
@ApiOperation(value = "子母商品列表")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping
|
||||
public ResponseEntity<Page<?>> list(PageSonMumDTO spuSonMum, @ApiIgnore @SortDefault(value = SpuSonMum.FIELD_ID,
|
||||
direction = Sort.Direction.DESC) PageRequest pageRequest) {
|
||||
Page<Dict> list = spuSonMumService.page(pageRequest, spuSonMum);
|
||||
return Results.success(list);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "子母商品明细")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<?> detail(@Encrypt @PathVariable Long id) {
|
||||
Dict spuSonMum = spuSonMumService.detail(id);
|
||||
return Results.success(spuSonMum);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "创建子母商品")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PostMapping
|
||||
public ResponseEntity<?> create(@RequestBody SpuSonMumDTO spuSonMumDTO) {
|
||||
validObject(spuSonMumDTO);
|
||||
boolean result = spuSonMumService.create(spuSonMumDTO);
|
||||
return result ? Results.success("添加成功") : Results.error("添加失败");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "修改子母商品")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@PutMapping
|
||||
public ResponseEntity<?> update(@RequestBody SpuSonMumDTO spuSonMumDTO) {
|
||||
validObject(spuSonMumDTO);
|
||||
boolean result = spuSonMumService.update(spuSonMumDTO);
|
||||
return result ? Results.success("修改成功") : Results.error("修改失败");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除子母商品")
|
||||
@Permission(level = ResourceLevel.ORGANIZATION)
|
||||
@DeleteMapping
|
||||
public ResponseEntity<?> batchRemove(@ApiParam("主键ID") @RequestBody IdsReqDTO idsReqDTO) {
|
||||
Boolean result = spuSonMumService.batchRemove(idsReqDTO.getIds());
|
||||
return result ? Results.success("操作成功") : Results.error("删除出错!");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.skyer.goods.domain.entity.SpuAttributeValue;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
/**
|
||||
* @author: lzh
|
||||
* @date: 2021-12-28
|
||||
* @description:
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("spu属性列表入参")
|
||||
public class AttrListRequestDTO {
|
||||
|
||||
@ApiModelProperty("id")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("属性编码")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty("是否用于生产sku")
|
||||
private Boolean isSku;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "1-系统默认属性 2-分类属性 0-商品属性 3附加属性")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(value = "属性类别 1单选2复选3文本4下拉")
|
||||
private Integer submissionsType;
|
||||
|
||||
@ApiModelProperty("属性名称")
|
||||
@NotBlank(message = "属性名称不可为空")
|
||||
private String attributeName;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty("属性值")
|
||||
private List<SpuAttributeValue> values;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @description sku属性
|
||||
* @Author zhanglongbing@ebc.com
|
||||
* @create 2021/12/27
|
||||
*/
|
||||
@Data
|
||||
public class AttributeDTO {
|
||||
|
||||
@ApiModelProperty("attributeId")
|
||||
@Encrypt
|
||||
private Long attributeId;
|
||||
|
||||
@ApiModelProperty("类型")
|
||||
private Integer attributeType;
|
||||
|
||||
@ApiModelProperty("属性名称")
|
||||
private String attributeName;
|
||||
|
||||
@ApiModelProperty("属性值")
|
||||
private String attributeValue;
|
||||
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 9:50 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("商品品牌查询条件")
|
||||
public class BrandPageReqDTO extends PageReqDTO {
|
||||
|
||||
@ApiModelProperty("主键")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
|
||||
@ApiModelProperty("品牌名称")
|
||||
private String brandName;
|
||||
|
||||
@ApiModelProperty("品牌状态")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty("品牌编码")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty("租户Id")
|
||||
@JsonIgnore
|
||||
private Long tenantId;
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 9:59 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("新增或者编辑商品品牌")
|
||||
public class BrandReqDTO {
|
||||
|
||||
@ApiModelProperty("主键")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("品牌编码")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty("品牌名称")
|
||||
private String brandName;
|
||||
|
||||
@ApiModelProperty("品牌logo")
|
||||
private String logo;
|
||||
|
||||
@ApiModelProperty("制造商")
|
||||
private String manufacturer;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
@Data
|
||||
@ApiModel(value ="商品分类属性查询对象")
|
||||
public class CategoryAttributeQueryDTO {
|
||||
@Encrypt
|
||||
@ApiModelProperty("分类属性id")
|
||||
private Long id;
|
||||
|
||||
@Encrypt
|
||||
@ApiModelProperty(value = "分类id,null返回空集", required = true)
|
||||
private Long categoryId;
|
||||
|
||||
@ApiModelProperty(value = "表单方式 1单选2复选3文本4下拉")
|
||||
private Integer formType;
|
||||
|
||||
@ApiModelProperty(value = "是否用于生成sku true是 false否")
|
||||
private Boolean skuFlag;
|
||||
|
||||
@ApiModelProperty(value = "状态 true启用 false禁用")
|
||||
private Boolean statusFlag;
|
||||
|
||||
@ApiModelProperty(value = "来源类型 0新增 1系统 2分级分类")
|
||||
private Integer sourceType;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ApiModel("商品分类属性")
|
||||
public class CategoryAttributeSaveDTO {
|
||||
// @Encrypt
|
||||
// @ApiModelProperty("id")
|
||||
// private Long id;
|
||||
//
|
||||
// @Encrypt
|
||||
// @ApiModelProperty(value = "分类id sgoo_category.id",required = true)
|
||||
// private Long categoryId;
|
||||
|
||||
@ApiModelProperty(value = "属性名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "属性编码")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Long sort;
|
||||
|
||||
@ApiModelProperty(value = "表单方式 1单选2复选3文本4下拉")
|
||||
private Integer formType;
|
||||
|
||||
@ApiModelProperty(value = "是否用于生成sku true是 false否")
|
||||
private Boolean skuFlag;
|
||||
|
||||
@ApiModelProperty(value = "状态 true启用 false禁用")
|
||||
private Boolean statusFlag;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "来源类型")
|
||||
private Integer sourceType;
|
||||
|
||||
@ApiModelProperty(value = "属性值列表")
|
||||
private List<CategoryAttributeValueSaveDTO> attributeValueList;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel("分类属性值")
|
||||
public class CategoryAttributeValueSaveDTO {
|
||||
|
||||
// @Encrypt
|
||||
// @ApiModelProperty("id")
|
||||
// private Long id;
|
||||
//
|
||||
// @Encrypt
|
||||
// @ApiModelProperty(value = "属性id sgoo_category_attribute.id")
|
||||
// private Long attributeId;
|
||||
|
||||
@ApiModelProperty(value = "属性值")
|
||||
private String value;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Long sort;
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
|
||||
@Data
|
||||
@ApiModel("商品分类查询")
|
||||
public class CategoryQueryDTO extends PageRequest {
|
||||
@Encrypt
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "分类编码")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty(value = "分类名称")
|
||||
private String name;
|
||||
|
||||
@Encrypt
|
||||
@ApiModelProperty(value = "父id 0,代表一级")
|
||||
private Long parentId;
|
||||
|
||||
@ApiModelProperty(value = "状态 true启用 false禁用")
|
||||
private Boolean statusFlag;
|
||||
|
||||
@ApiModelProperty(value = "类目等级")
|
||||
private Integer level;
|
||||
|
||||
@ApiModelProperty(value = "是否叶子类目 true是 false否")
|
||||
private Boolean subFlag;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ApiModel("商品分类保存")
|
||||
public class CategorySaveDTO {
|
||||
@Encrypt
|
||||
@ApiModelProperty("id 为空代表新增")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "分类编码")
|
||||
@Pattern(regexp = "^[A-Za-z0-9]*$")
|
||||
private String code;
|
||||
|
||||
@NotNull
|
||||
@Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9]+$")
|
||||
@ApiModelProperty(value = "分类名称")
|
||||
private String name;
|
||||
|
||||
@Encrypt
|
||||
@ApiModelProperty(value = "父id 0,代表一级")
|
||||
private Long parentId;
|
||||
|
||||
@ApiModelProperty(value = "状态 true启用 false禁用")
|
||||
private Boolean statusFlag;
|
||||
|
||||
@ApiModelProperty(value = "类目等级 一级开始 默认1")
|
||||
private Integer level;
|
||||
|
||||
@ApiModelProperty(value = "是否叶子类目 false否 true是")
|
||||
private Boolean subFlag;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Long sort;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "商品属性表(包含属性值)")
|
||||
private List<CategoryAttributeSaveDTO> attributeList;
|
||||
|
||||
@ApiModelProperty(value = "版本号")
|
||||
private Long objectVersionNumber;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel("商品分类树筛选条件")
|
||||
public class CategoryTreeQueryDTO {
|
||||
@ApiModelProperty(value = "状态 true启用 false禁用")
|
||||
private Boolean statusFlag;
|
||||
|
||||
@ApiModelProperty(value = "是否叶子类目 true是 false否")
|
||||
private Boolean subFlag;
|
||||
|
||||
@ApiModelProperty(value = "是否移除子孙没有叶子分类的普通分类 true移除 false不移除")
|
||||
private Boolean removeNotSubFlag;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@ApiModel("商品分类修改状态")
|
||||
public class CategoryUpdateByStatusFlagDTO {
|
||||
@Encrypt
|
||||
@ApiModelProperty(value = "id", required = true)
|
||||
@NotNull
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "状态 true启用 false禁用", required = true)
|
||||
@NotNull
|
||||
private Boolean statusFlag;
|
||||
|
||||
@ApiModelProperty(value = "版本号")
|
||||
private Long objectVersionNumber;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/8/13 10:11 上午
|
||||
*/
|
||||
@ApiModel("商品组合")
|
||||
@Data
|
||||
public class GoodsGroupReqDTO {
|
||||
|
||||
@ApiModelProperty("id")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "spuId")
|
||||
@Encrypt
|
||||
private Long spuId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("套餐名")
|
||||
private String groupName;
|
||||
|
||||
|
||||
@ApiModelProperty("店铺id")
|
||||
@Encrypt
|
||||
private List<Long> storeIdList;
|
||||
|
||||
@ApiModelProperty("是否全部店铺")
|
||||
private Boolean isAllStore;
|
||||
|
||||
@ApiModelProperty("组合商品sku")
|
||||
private List<GoodsGroupSkuReqDTO> goodsGroupSkuReqDTOS;
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* skuId 数量
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/8/13 10:43 上午
|
||||
*/
|
||||
@ApiModel("商品组合sku")
|
||||
@Data
|
||||
public class GoodsGroupSkuReqDTO {
|
||||
@ApiModelProperty("skuId")
|
||||
@Encrypt
|
||||
private Long skuId;
|
||||
|
||||
@ApiModelProperty("数量")
|
||||
private BigDecimal num;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 11:33 上午
|
||||
*/
|
||||
@Data
|
||||
public class GoodsPageReqDTO extends PageReqDTO{
|
||||
|
||||
@ApiModelProperty("主键id")
|
||||
@Encrypt
|
||||
private String id;
|
||||
|
||||
|
||||
@ApiModelProperty("spu编码")
|
||||
private String spuCode;
|
||||
|
||||
@ApiModelProperty("商品名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("商品类别")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("目录编码")
|
||||
@Encrypt
|
||||
private List<Long> categoryIdList;
|
||||
|
||||
@ApiModelProperty(value = "状态")
|
||||
private Integer status;
|
||||
|
||||
|
||||
@ApiModelProperty("套餐标识:0-单品,1-套餐")
|
||||
private Integer setFlag;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("新增或者编辑商品")
|
||||
public class GoodsReqDTO {
|
||||
|
||||
@ApiModelProperty("主键id")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("商品编码")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty("类别")
|
||||
@NotNull(message = "类别不能为空")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("商品名称")
|
||||
@NotBlank(message = "名称不能为空")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("类别id")
|
||||
@NotNull(message = "类别id不能为空")
|
||||
@Encrypt
|
||||
private Long categoryId;
|
||||
|
||||
@ApiModelProperty("品牌Id")
|
||||
@Encrypt
|
||||
private Long brandId;
|
||||
|
||||
@ApiModelProperty("素材Id")
|
||||
@Encrypt
|
||||
private Long materialId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private Integer status;
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.skyer.goods.domain.entity.SpuAttributeValue;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
/**
|
||||
* @author: lzh
|
||||
* @date: 2021-12-28
|
||||
* @description:
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("添加编辑商品参数")
|
||||
public class GoodsRequestDTO {
|
||||
@ApiModelProperty("主键id")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("商品编码")
|
||||
@NotBlank(message = "编码不能为空")
|
||||
private String spuCode;
|
||||
|
||||
@ApiModelProperty("类别")
|
||||
@NotNull(message = "类别不能为空")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("商品名称")
|
||||
@NotBlank(message = "名称不能为空")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("类别id")
|
||||
@NotNull(message = "商品类别不能为空")
|
||||
@Encrypt
|
||||
private Long categoryId;
|
||||
|
||||
@ApiModelProperty("品牌Id")
|
||||
@Encrypt
|
||||
private Long brandId;
|
||||
|
||||
@ApiModelProperty("素材Id")
|
||||
@Encrypt
|
||||
private Long materialId;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty("套餐标识:0-单品,1-套餐")
|
||||
private Integer setFlag;
|
||||
|
||||
@ApiModelProperty("属性")
|
||||
private List<AttrListRequestDTO> attrs;
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品规格表
|
||||
*
|
||||
* @author chenzz 2021-07-06 10:35:43
|
||||
*/
|
||||
@ApiModel("商品SKU")
|
||||
@Data
|
||||
public class GoodsSkuPageDTO extends PageRequest {
|
||||
|
||||
@ApiModelProperty(value = "商品名称")
|
||||
private String spuName;
|
||||
|
||||
@ApiModelProperty(value = "商品编码")
|
||||
private String spuCode;
|
||||
|
||||
@ApiModelProperty(value = "商品类别")
|
||||
private String spuType;
|
||||
|
||||
@ApiModelProperty("套餐标识:0-单品,1-套餐")
|
||||
private Integer setFlag;
|
||||
|
||||
@ApiModelProperty("目录编码")
|
||||
@Encrypt
|
||||
private List<Long> categoryIdList;
|
||||
|
||||
@ApiModelProperty(value = "0草稿 1被驳回 2审核中 3已生效 4已生效(修改中) ")
|
||||
private List<String> status;
|
||||
|
||||
@ApiModelProperty(value = "sku名称")
|
||||
private String skuName;
|
||||
|
||||
@ApiModelProperty(value = "skuCode")
|
||||
private String skuCode;
|
||||
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/8/16 5:15 下午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("分组传入参数")
|
||||
public class GroupPageReqDTO extends PageReqDTO{
|
||||
|
||||
@ApiModelProperty(value = "spu编码")
|
||||
private String spuCode;
|
||||
|
||||
@ApiModelProperty("spu名称")
|
||||
private String spuName;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/30 11:20 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("删除id")
|
||||
public class IdsReqDTO {
|
||||
|
||||
@ApiModelProperty("主键id")
|
||||
@Encrypt
|
||||
private List<Long> ids;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/25 5:29 下午
|
||||
*/
|
||||
@Data
|
||||
public class LevelCategoryDTO {
|
||||
|
||||
/**
|
||||
* 分类等级
|
||||
*/
|
||||
@ApiModelProperty("分类等级")
|
||||
private Integer level;
|
||||
|
||||
/**
|
||||
* 分类id
|
||||
*/
|
||||
@ApiModelProperty("分类id")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 分类名称
|
||||
*/
|
||||
@ApiModelProperty("分类名称")
|
||||
private String name;
|
||||
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品素材
|
||||
* </p>
|
||||
*
|
||||
* @author chenzz
|
||||
* @since 2021-06-23
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@ApiModel("商品素材")
|
||||
public class MaterialDTO {
|
||||
|
||||
@ApiModelProperty("id,添加时不需要设置")
|
||||
@Encrypt
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 编码
|
||||
*/
|
||||
@ApiModelProperty("编码")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 素材名称
|
||||
*/
|
||||
@ApiModelProperty("素材名称")
|
||||
@NotNull
|
||||
private String materialName;
|
||||
|
||||
/**
|
||||
* 主图
|
||||
*/
|
||||
@ApiModelProperty("主图")
|
||||
private List<String> mainImage;
|
||||
|
||||
/**
|
||||
* 详情图
|
||||
*/
|
||||
@ApiModelProperty("详情图")
|
||||
private List<String> detailImage;
|
||||
|
||||
|
||||
/**
|
||||
* 详情内容
|
||||
*/
|
||||
@ApiModelProperty("详情内容")
|
||||
private String detailHtml;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 商品素材
|
||||
* </p>
|
||||
*
|
||||
* @author chenzz
|
||||
* @since 2021-06-23
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@ApiModel("商品素材")
|
||||
public class MaterialListDTO {
|
||||
|
||||
/**
|
||||
* 编码
|
||||
*/
|
||||
@ApiModelProperty("编码")
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 素材名称
|
||||
*/
|
||||
@ApiModelProperty("素材名称")
|
||||
private String materialName;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.domain.PageInfo;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/23 2:58 下午
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ApiModel(description = "分页请求类")
|
||||
public class PageReqDTO implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "每页条数", example = "10")
|
||||
private Integer size;
|
||||
|
||||
@ApiModelProperty(value = "当前页数", example = "1")
|
||||
private Integer page;
|
||||
|
||||
public PageInfo createPage() {
|
||||
int page = this.page == null || this.page < 0 ? 0: this.page;
|
||||
int size = this.size == null || this.size < 0 ? 10: this.size;
|
||||
return new PageInfo(page, size);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhanglb
|
||||
*/
|
||||
@Data
|
||||
public class SkuBatchAuditDTO {
|
||||
|
||||
@ApiModelProperty("skuId列表")
|
||||
@Encrypt
|
||||
List<Long> skuIds;
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@JsonInclude(value = JsonInclude.Include.NON_NULL)
|
||||
public class SkuBatchSaveDTO {
|
||||
@ApiModelProperty(value = "SKU列表")
|
||||
private List<SkuListRequestDTO> skuList;
|
||||
|
||||
@ApiModelProperty(value = "true保存为草稿 false提交")
|
||||
private Boolean flag;
|
||||
|
||||
@ApiModelProperty("套餐标识:0-单品,1-套餐")
|
||||
private Integer setFlag;
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.goods.domain.entity.SkuPackage;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author zhanglongbing@ebc.com
|
||||
* @create 2021/12/27
|
||||
*/
|
||||
@Data
|
||||
public class SkuListRequestDTO {
|
||||
@ApiModelProperty("spuId")
|
||||
@Encrypt
|
||||
@NotNull(message = "spuId不能为空")
|
||||
private Long spuId;
|
||||
|
||||
@ApiModelProperty("skuCode")
|
||||
@NotBlank(message = "skuCode不能为空")
|
||||
private String skuCode;
|
||||
|
||||
@ApiModelProperty("sku名称")
|
||||
@NotBlank(message = "skuName不能为空")
|
||||
private String skuName;
|
||||
|
||||
@ApiModelProperty("商品重量")
|
||||
private BigDecimal weight;
|
||||
|
||||
@ApiModelProperty("商品长度")
|
||||
private BigDecimal length;
|
||||
|
||||
@ApiModelProperty("商品宽度")
|
||||
private BigDecimal width;
|
||||
|
||||
@ApiModelProperty("商品高度")
|
||||
private BigDecimal height;
|
||||
|
||||
@ApiModelProperty("成本价")
|
||||
private BigDecimal costPrice;
|
||||
|
||||
@ApiModelProperty("销售价")
|
||||
private BigDecimal salesPrice;
|
||||
|
||||
@ApiModelProperty("活动价")
|
||||
private BigDecimal activityPrice;
|
||||
|
||||
@ApiModelProperty("市场价")
|
||||
private BigDecimal marketPrice;
|
||||
|
||||
@ApiModelProperty("分销价")
|
||||
private BigDecimal distributionPrice;
|
||||
|
||||
@ApiModelProperty("批发价")
|
||||
private BigDecimal wholesalePrice;
|
||||
|
||||
@ApiModelProperty("结算价")
|
||||
private BigDecimal clearingPrice;
|
||||
|
||||
@ApiModelProperty("原始属性列表")
|
||||
private List<AttributeDTO> skuAttributeList;
|
||||
|
||||
@ApiModelProperty("附加属性列表")
|
||||
private List<AttributeDTO> otherAttributeList;
|
||||
|
||||
@ApiModelProperty("套餐信息 sku明细")
|
||||
@Encrypt
|
||||
private List<SkuPackage> skuDetailList;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.goods.domain.entity.Sku;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhanglb
|
||||
*/
|
||||
@Data
|
||||
public class SkuUpdateDTO {
|
||||
|
||||
@ApiModelProperty(value = "sku更改信息")
|
||||
private SkuUpdateInfoDTO sku;
|
||||
|
||||
@ApiModelProperty(value = "true保存为草稿 false提交")
|
||||
private Boolean flag;
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.goods.domain.entity.SkuAttributeValue;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhanglongbing
|
||||
*/
|
||||
@Data
|
||||
public class SkuUpdateInfoDTO {
|
||||
|
||||
@ApiModelProperty("id")
|
||||
@Encrypt
|
||||
@NotNull(message = "id不能为空")
|
||||
private Long id;
|
||||
@ApiModelProperty(value = "skuCode")
|
||||
private String skuCode;
|
||||
@ApiModelProperty(value = "sku名称")
|
||||
private String skuName;
|
||||
@ApiModelProperty(value = "成本价")
|
||||
private BigDecimal costPrice;
|
||||
@ApiModelProperty(value = "销售价")
|
||||
private BigDecimal salesPrice;
|
||||
@ApiModelProperty(value = "活动价")
|
||||
private BigDecimal activityPrice;
|
||||
@ApiModelProperty(value = "市场价")
|
||||
private BigDecimal marketPrice;
|
||||
@ApiModelProperty(value = "分销价")
|
||||
private BigDecimal distributionPrice;
|
||||
@ApiModelProperty(value = "批发价")
|
||||
private BigDecimal wholesalePrice;
|
||||
@ApiModelProperty(value = "结算价")
|
||||
private BigDecimal clearingPrice;
|
||||
@ApiModelProperty(value = "商品重量")
|
||||
private BigDecimal weight;
|
||||
@ApiModelProperty(value = "商品长度")
|
||||
private BigDecimal length;
|
||||
@ApiModelProperty(value = "商品宽度")
|
||||
private BigDecimal width;
|
||||
@ApiModelProperty(value = "商品高度")
|
||||
private BigDecimal height;
|
||||
|
||||
@ApiModelProperty("原始属性列表")
|
||||
private List<SkuAttributeValue> skuAttributeList;
|
||||
|
||||
@ApiModelProperty("附加属性列表")
|
||||
private List<SkuAttributeValue> otherAttributeList;
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.skyer.goods.domain.entity.Spu;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author wusc 2021-01-07 17:53
|
||||
*/
|
||||
@ApiModel("SPU集合")
|
||||
@JsonInclude(value = JsonInclude.Include.NON_NULL)
|
||||
@Data
|
||||
public class SpuListDTO {
|
||||
public SpuListDTO(){}
|
||||
public SpuListDTO(Spu spu){
|
||||
this.spuList = new ArrayList<Spu>(){{add(spu);}};
|
||||
}
|
||||
public SpuListDTO(List<Spu> spuList){
|
||||
this.spuList = spuList;
|
||||
}
|
||||
@ApiModelProperty("spu集合")
|
||||
private List<Spu> spuList;
|
||||
|
||||
private Boolean deleteFlag;
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.skyer.starter.keyencrypt.core.Encrypt;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @Author wusc
|
||||
* @create 2021/6/24 10:18 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("用于编辑状态")
|
||||
public class StatusReqDTO {
|
||||
|
||||
@ApiModelProperty("主键id")
|
||||
@NotEmpty(message = "主键id不能为空")
|
||||
@Encrypt
|
||||
private List<Long> ids;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private Integer status;
|
||||
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package org.skyer.goods.api.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("更新值集")
|
||||
@Data
|
||||
public class UpdatePriceItemValueDTO {
|
||||
|
||||
|
||||
@ApiModelProperty("value编码")
|
||||
String value;
|
||||
|
||||
@ApiModelProperty("value含义")
|
||||
String meaning;
|
||||
|
||||
@ApiModelProperty("排序标识")
|
||||
Integer orderSeq;
|
||||
|
||||
@ApiModelProperty("描述")
|
||||
private String description;
|
||||
|
||||
@ApiModelProperty("生效标识")
|
||||
private Integer enabledFlag;
|
||||
|
||||
|
||||
//====================
|
||||
|
||||
// @ApiModelProperty("值集值ID")
|
||||
// private Long lovValueId;
|
||||
//
|
||||
// @ApiModelProperty("值集ID")
|
||||
// private Long lovId;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品分类属性表应用服务
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
public interface CategoryAttributeService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品分类属性值表应用服务
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
public interface CategoryAttributeValueService {
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品分类表应用服务
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
public interface CategoryService {
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.goods.domain.dto.InstallServiceDTO;
|
||||
import org.skyer.goods.domain.dto.PageInstallServiceDTO;
|
||||
import org.skyer.goods.domain.entity.InstallService;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 安装服务应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-18 15:42:47
|
||||
*/
|
||||
public interface InstallServiceService {
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*
|
||||
* @param installServiceDTO
|
||||
* @return
|
||||
*/
|
||||
List<InstallService> list(PageInstallServiceDTO installServiceDTO);
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
* @param pageRequest
|
||||
* @param installServiceDTO
|
||||
* @return
|
||||
*/
|
||||
Page<Dict> page(PageRequest pageRequest, PageInstallServiceDTO installServiceDTO);
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Dict detail(Long id);
|
||||
|
||||
/**
|
||||
* 添加,创建
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
Boolean create(@RequestBody InstallServiceDTO dto);
|
||||
|
||||
/**
|
||||
* 更新,修改
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
Boolean update(@RequestBody InstallServiceDTO dto);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
Boolean batchRemove(List<Long> ids);
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 加密工具(针对字符串,id等进行加密)
|
||||
*
|
||||
* @author chenzz
|
||||
*/
|
||||
public interface MyEncryptionService {
|
||||
|
||||
/**
|
||||
* 加密字符串
|
||||
*
|
||||
* @param text
|
||||
* @return
|
||||
*/
|
||||
String encrypt(String text);
|
||||
|
||||
/**
|
||||
* 加密id
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
String encrypt(Long id);
|
||||
|
||||
/**
|
||||
* 加密id
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
String encrypt(Integer id);
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* sku属性关联草稿表应用服务
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-29 11:23:43
|
||||
*/
|
||||
public interface SkuAttributeValueDraftService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* sku属性关联表应用服务
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-28 09:17:10
|
||||
*/
|
||||
public interface SkuAttributeValueService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品SKU审核应用服务
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-27 10:09:56
|
||||
*/
|
||||
public interface SkuAuditSettingService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品规格草稿表应用服务
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-29 11:12:15
|
||||
*/
|
||||
public interface SkuDraftService {
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.goods.api.dto.GoodsSkuPageDTO;
|
||||
import org.skyer.goods.domain.entity.Sku;
|
||||
import org.skyer.goods.domain.vo.GoodsSkuPageVO;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* @author zhanglb
|
||||
*/
|
||||
public interface SkuEsService {
|
||||
|
||||
|
||||
/**
|
||||
* 创建skuList异步saga任务
|
||||
* @param skuList skuList
|
||||
* @return List
|
||||
*/
|
||||
List<Sku> syncSkuListEsSage(List<Sku> skuList);
|
||||
|
||||
/**
|
||||
* 消费异步saga任务
|
||||
* @param skuListJsonStr skuListJsonStr
|
||||
* @return List<Sku>
|
||||
* @throws IOException 转换异常
|
||||
*/
|
||||
List<Sku> syncSkuListEsSageTask(String skuListJsonStr) throws IOException;
|
||||
|
||||
/**
|
||||
* 批量删除es数据 到saga
|
||||
* @param skuList skuList
|
||||
* @return List<Sku>
|
||||
*/
|
||||
List<Sku> syncDelSkuListEsSage(List<Sku> skuList);
|
||||
|
||||
/**
|
||||
* 批量删除es数据
|
||||
* @param skuListJsonStr skuListJsonStr
|
||||
* @return List<Sku>
|
||||
* @throws IOException 删除异常
|
||||
*/
|
||||
List<Sku> syncDelSkuListEsSageTask(String skuListJsonStr) throws IOException;
|
||||
|
||||
/**
|
||||
* 清空sku所有记录
|
||||
*/
|
||||
void delSkuEsAll() throws Exception;
|
||||
|
||||
/**
|
||||
* es查询sku列表
|
||||
* @param goodsSkuPageDTO skuPage
|
||||
* @return Page<GoodsSkuPageVO>
|
||||
*/
|
||||
Page<GoodsSkuPageVO> listPage(GoodsSkuPageDTO goodsSkuPageDTO) throws Exception;
|
||||
|
||||
/**
|
||||
* 批量导入sku的所有数据
|
||||
* @throws IOException 导入异常
|
||||
*/
|
||||
void skuStatusUp() throws IOException;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 应用服务
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2022-03-03 10:45:30
|
||||
*/
|
||||
public interface SkuPackageService {
|
||||
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.goods.api.dto.*;
|
||||
import org.skyer.goods.domain.dto.AuditDTO;
|
||||
import org.skyer.goods.domain.dto.SkuAuditDTO;
|
||||
import org.skyer.goods.domain.vo.*;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品规格表应用服务
|
||||
*
|
||||
* @author chenzz 2021-07-06 10:35:43
|
||||
*/
|
||||
public interface SkuService {
|
||||
|
||||
/**
|
||||
* sku商品分页,返回商品的资料
|
||||
* @param goodsSku
|
||||
* @return
|
||||
*/
|
||||
Page<GoodsSkuPageVO> listPage( GoodsSkuPageDTO goodsSku);
|
||||
|
||||
/**
|
||||
* 查看商品详情
|
||||
* @param id skuId
|
||||
* @param isEdit 是否编辑
|
||||
* @return
|
||||
*/
|
||||
GoodsSkuDetailVO getDetail(Long id, boolean isEdit);
|
||||
|
||||
/**
|
||||
* 保存sku
|
||||
*
|
||||
* @param skuBatchSaveDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean saveSku(SkuBatchSaveDTO skuBatchSaveDTO);
|
||||
|
||||
/**
|
||||
* 删除sku
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
Boolean deleteByIds(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 变更sku信息
|
||||
*
|
||||
* @param updateDTO
|
||||
* @return
|
||||
*/
|
||||
boolean updateSku(SkuUpdateDTO updateDTO);
|
||||
|
||||
/**
|
||||
* 批量提交数据
|
||||
*
|
||||
* @param batchAuditDTO
|
||||
* @return
|
||||
*/
|
||||
int batchAudit(SkuBatchAuditDTO batchAuditDTO);
|
||||
|
||||
|
||||
/**
|
||||
* 根据商品id获取sku列表和属性列表
|
||||
*
|
||||
* @param spuId
|
||||
* @return
|
||||
*/
|
||||
List<GoodsSkuDetailVO> getSkuAndAttributeDataByGoodsId(Long spuId);
|
||||
|
||||
|
||||
/**
|
||||
* 查询rpc商品
|
||||
*
|
||||
* @param skuCodeList
|
||||
* @return
|
||||
*/
|
||||
List<RpcGoodsResVO> queryRPCGoodsList(List<String> skuCodeList);
|
||||
|
||||
|
||||
/**
|
||||
* 查询套餐内的详情
|
||||
* @param skuCodeList
|
||||
* @return
|
||||
*/
|
||||
List<RpcOrderResVO> getMealsGoodsList(List<String> skuCodeList);
|
||||
/**
|
||||
* 查询订单RpcVo
|
||||
* @param skuCodeList skuList
|
||||
* @return List<RpcOrderResVO>
|
||||
*/
|
||||
List<RpcOrderResVO> queryOrderRpcList(List<String> skuCodeList);
|
||||
|
||||
|
||||
/**
|
||||
* 获取审核详情
|
||||
*
|
||||
* @author lixiaoyang
|
||||
* @date 2021/12/30 11:11
|
||||
*/
|
||||
SkuAuditVO getAuditDetail(SkuAuditDTO dto);
|
||||
|
||||
/**
|
||||
* SKU审核操作
|
||||
*
|
||||
* @author lixiaoyang
|
||||
* @date 2021/12/30 14:44
|
||||
*/
|
||||
Boolean skuAudit(AuditDTO dto);
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 属性表应用服务
|
||||
*
|
||||
* @author linzhuanghuang@ebc.com 2021-12-28 16:40:03
|
||||
*/
|
||||
public interface SpuAttributeService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 属性值表应用服务
|
||||
*
|
||||
* @author linzhuanghuang@ebc.com 2021-12-28 16:40:03
|
||||
*/
|
||||
public interface SpuAttributeValueService {
|
||||
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.goods.api.dto.GoodsPageReqDTO;
|
||||
import org.skyer.goods.api.dto.SpuListDTO;
|
||||
import org.skyer.goods.domain.entity.Spu;
|
||||
import org.skyer.goods.domain.vo.GoodsPageResVO;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 查询或者更新es
|
||||
*
|
||||
* @description
|
||||
* @Author lzh
|
||||
* @create 2022/1/6
|
||||
*/
|
||||
public interface SpuEsService {
|
||||
|
||||
/**
|
||||
* 生成spu集合数据,同步到es
|
||||
* @param spuListDTO 包含spu列表的DTO
|
||||
*/
|
||||
SpuListDTO syncSpuEsSage(SpuListDTO spuListDTO);
|
||||
|
||||
/**
|
||||
* saga task消费同步es数据
|
||||
* @param spuListJSONStr spuListDTO的json串
|
||||
* @return SpuListDTO
|
||||
* @throws IOException
|
||||
*/
|
||||
SpuListDTO syncSpuEsSageTask(String spuListJSONStr) throws IOException;
|
||||
|
||||
/**
|
||||
* 将spu数据存入es
|
||||
*
|
||||
* @param
|
||||
*/
|
||||
void createOrUpdateSpuEs(Spu spu);
|
||||
|
||||
/**
|
||||
* 查询商品
|
||||
* @param goodsPageReqDTO
|
||||
* @return
|
||||
*/
|
||||
Page<GoodsPageResVO> querySpuEs(GoodsPageReqDTO goodsPageReqDTO) throws Exception;
|
||||
|
||||
/**
|
||||
* 删除es数据
|
||||
*/
|
||||
void delSpuEs(List<Spu> spuList);
|
||||
|
||||
/**
|
||||
* 清空库存所有记录
|
||||
*/
|
||||
void delSpuEsAll();
|
||||
|
||||
/**
|
||||
* 批量导入商品数据
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
void productStatusUp() throws IOException;
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.goods.domain.dto.PageSpuInstallServiceDTO;
|
||||
import org.skyer.goods.domain.dto.SpuInstallServiceDTO;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品安装服务应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-18 16:42:11
|
||||
*/
|
||||
public interface SpuInstallServiceService {
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
* @param pageRequest
|
||||
* @param spuInstallService
|
||||
* @return
|
||||
*/
|
||||
Page<Dict> page(PageRequest pageRequest, PageSpuInstallServiceDTO spuInstallService);
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Dict detail(Long id);
|
||||
|
||||
/**
|
||||
* 添加,创建
|
||||
*
|
||||
* @param spuInstallServiceDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean create(@RequestBody SpuInstallServiceDTO spuInstallServiceDTO);
|
||||
|
||||
/**
|
||||
* 更新,修改
|
||||
*
|
||||
* @param spuInstallServiceDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean update(@RequestBody SpuInstallServiceDTO spuInstallServiceDTO);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
Boolean batchRemove(List<Long> ids);
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品安装服务sku表应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-18 16:42:11
|
||||
*/
|
||||
public interface SpuInstallServiceSkuService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 商品安装服务售卖门店应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-18 16:42:11
|
||||
*/
|
||||
public interface SpuInstallServiceStoreService {
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.goods.domain.dto.PageSonMumDTO;
|
||||
import org.skyer.goods.domain.dto.SpuSonMumDTO;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 子母商品应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-16 15:04:38
|
||||
*/
|
||||
public interface SpuSonMumService {
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
* @param pageRequest
|
||||
* @param spuSonMum
|
||||
* @return
|
||||
*/
|
||||
Page<Dict> page(PageRequest pageRequest, PageSonMumDTO spuSonMum);
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Dict detail(Long id);
|
||||
|
||||
/**
|
||||
* 添加,创建
|
||||
*
|
||||
* @param spuSonMumDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean create(@RequestBody SpuSonMumDTO spuSonMumDTO);
|
||||
|
||||
/**
|
||||
* 更新,修改
|
||||
*
|
||||
* @param spuSonMumDTO
|
||||
* @return
|
||||
*/
|
||||
Boolean update(@RequestBody SpuSonMumDTO spuSonMumDTO);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
Boolean batchRemove(List<Long> ids);
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 子母商品sku表应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-17 15:49:14
|
||||
*/
|
||||
public interface SpuSonMumSkuService {
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package org.skyer.goods.app.service;
|
||||
|
||||
/**
|
||||
* 子母商品售卖门店应用服务
|
||||
*
|
||||
* @author chenzz 2021-08-16 15:04:38
|
||||
*/
|
||||
public interface SpuSonMumStoreService {
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.CategoryAttributeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 商品分类属性表应用服务默认实现
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
@Service
|
||||
public class CategoryAttributeServiceImpl implements CategoryAttributeService {
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.CategoryAttributeValueService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 商品分类属性值表应用服务默认实现
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
@Service
|
||||
public class CategoryAttributeValueServiceImpl implements CategoryAttributeValueService {
|
||||
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.core.exception.CommonException;
|
||||
import org.skyer.goods.app.service.CategoryService;
|
||||
import org.skyer.goods.domain.entity.Category;
|
||||
import org.skyer.goods.domain.repository.CategoryRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品分类表应用服务默认实现
|
||||
*
|
||||
* @author xurongfa 2021-12-24 09:12:57
|
||||
*/
|
||||
@Service
|
||||
public class CategoryServiceImpl implements CategoryService {
|
||||
}
|
|
@ -0,0 +1,218 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.domain.PageInfo;
|
||||
import org.skyer.core.exception.CommonException;
|
||||
import org.skyer.core.oauth.CustomUserDetails;
|
||||
import org.skyer.core.oauth.DetailsHelper;
|
||||
import org.skyer.goods.app.service.InstallServiceService;
|
||||
import org.skyer.goods.app.service.MyEncryptionService;
|
||||
import org.skyer.goods.domain.dto.InstallServiceDTO;
|
||||
import org.skyer.goods.domain.dto.PageInstallServiceDTO;
|
||||
import org.skyer.goods.domain.dto.ServiceZoneDTO;
|
||||
import org.skyer.goods.domain.entity.InstallService;
|
||||
import org.skyer.goods.domain.repository.InstallServiceRepository;
|
||||
import org.skyer.goods.domain.vo.ChinaZoingRemoteVO;
|
||||
import org.skyer.goods.infra.feign.ChinaZoingRemoteService;
|
||||
import org.skyer.mybatis.domian.Condition;
|
||||
import org.skyer.mybatis.pagehelper.PageHelper;
|
||||
import org.skyer.mybatis.pagehelper.domain.PageRequest;
|
||||
import org.skyer.mybatis.util.Sqls;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 安装服务应用服务默认实现
|
||||
*
|
||||
* @author chenzz 2021-08-18 15:42:47
|
||||
*/
|
||||
@Service
|
||||
public class InstallServiceServiceImpl implements InstallServiceService {
|
||||
|
||||
@Autowired
|
||||
private InstallServiceRepository installServiceRepository;
|
||||
|
||||
@Autowired
|
||||
private ChinaZoingRemoteService chinaZoingRemoteService;
|
||||
|
||||
@Autowired
|
||||
private MyEncryptionService myEncryptionService;
|
||||
|
||||
@Override
|
||||
public List<InstallService> list(PageInstallServiceDTO installServiceDTO) {
|
||||
// 根据条件查找
|
||||
return installServiceRepository.selectByCondition(Condition.builder(InstallService.class)
|
||||
.andWhere(Sqls.custom()
|
||||
.andLike(InstallService.FIELD_SERVICE_CODE, installServiceDTO.getServiceCode(), true)
|
||||
.andLike(InstallService.FIELD_NAME, installServiceDTO.getName(), true)
|
||||
.andEqualTo(InstallService.FIELD_DELETE_FLAG, false))
|
||||
.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Dict> page(PageRequest pageRequest, PageInstallServiceDTO installServiceDTO) {
|
||||
Page<InstallService> page = PageHelper.doPageAndSort(pageRequest, () -> installServiceRepository.selectByCondition(Condition.builder(InstallService.class)
|
||||
.andWhere(Sqls.custom()
|
||||
.andLike(InstallService.FIELD_SERVICE_CODE, installServiceDTO.getServiceCode(), true)
|
||||
.andLike(InstallService.FIELD_NAME, installServiceDTO.getName(), true)
|
||||
.andEqualTo(InstallService.FIELD_DELETE_FLAG, false))
|
||||
.build()));
|
||||
|
||||
List<InstallService> pageListContent = page.getContent();
|
||||
if (CollUtil.isNotEmpty(pageListContent)) {
|
||||
List<Dict> dictList = pageListContent.stream().map(xx -> {
|
||||
Dict item = Dict.create();
|
||||
|
||||
item.set("id", myEncryptionService.encrypt(xx.getId()));
|
||||
item.set("name", xx.getName());
|
||||
item.set("money", xx.getMoney());
|
||||
item.set("installServiceCode", xx.getServiceCode());
|
||||
item.set("peopleAmount", xx.getPeopleAmount());
|
||||
item.set("type", xx.getType());
|
||||
item.set("remark", xx.getRemark());
|
||||
item.set("createdBy", xx.getCreatedBy());
|
||||
item.set("creationDate", DateUtil.formatDateTime(xx.getCreationDate()));
|
||||
|
||||
String serviceZone = xx.getServiceZone();
|
||||
if (StrUtil.isNotEmpty(serviceZone)) {
|
||||
|
||||
List<ServiceZoneDTO> listServiceZone = JSONUtil.toList(serviceZone, ServiceZoneDTO.class);
|
||||
|
||||
List<Dict> listDict = listServiceZone.stream().map(ooo -> {
|
||||
Dict itemDict = Dict.create().parseBean(ooo);
|
||||
|
||||
ResponseEntity<ChinaZoingRemoteVO> showDetails = chinaZoingRemoteService.showDetails(ooo.getCityId());
|
||||
if (HttpStatus.OK.equals(showDetails.getStatusCode())) {
|
||||
ChinaZoingRemoteVO detailsBody = showDetails.getBody();
|
||||
if (null != detailsBody) {
|
||||
itemDict.set("cityDetail", Dict.create()
|
||||
.set("levelThreeAreaName", detailsBody.getLevelThreeAreaName())
|
||||
.set("levelTwoAreaName", detailsBody.getLevelTwoAreaName())
|
||||
.set("levelOneAreaName", detailsBody.getLevelOneAreaName())
|
||||
);
|
||||
} else {
|
||||
itemDict.set("cityDetail", null);
|
||||
}
|
||||
}
|
||||
|
||||
return itemDict;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
item.set("serviceZone", listDict);
|
||||
}
|
||||
|
||||
return item;
|
||||
}).collect(Collectors.toList());
|
||||
return new Page<>(dictList, new PageInfo(page.getTotalPages(), page.getSize()), page.getTotalElements());
|
||||
}
|
||||
|
||||
return new Page<>(new ArrayList<>(), new PageInfo(0, page.getSize()), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dict detail(Long id) {
|
||||
InstallService installService = installServiceRepository.selectByPrimaryKey(id);
|
||||
|
||||
if (ObjectUtil.isNotNull(installService)) {
|
||||
Dict dict = Dict.create();
|
||||
|
||||
dict.set("id", myEncryptionService.encrypt(installService.getId()));
|
||||
dict.set("name", installService.getName());
|
||||
dict.set("money", installService.getMoney());
|
||||
dict.set("installServiceCode", installService.getServiceCode());
|
||||
dict.set("peopleAmount", installService.getPeopleAmount());
|
||||
dict.set("type", installService.getType());
|
||||
dict.set("remark", installService.getRemark());
|
||||
dict.set("createdBy", installService.getCreatedBy());
|
||||
dict.set("objectVersionNumber", installService.getObjectVersionNumber());
|
||||
dict.set("creationDate", DateUtil.formatDateTime(installService.getCreationDate()));
|
||||
|
||||
String serviceZone = installService.getServiceZone();
|
||||
if (StrUtil.isNotEmpty(serviceZone)) {
|
||||
List<ServiceZoneDTO> listServiceZone = JSONUtil.toList(serviceZone, ServiceZoneDTO.class);
|
||||
|
||||
List<Dict> listDict = listServiceZone.stream().map(ooo -> {
|
||||
Dict itemDict = Dict.create().parseBean(ooo);
|
||||
|
||||
ResponseEntity<ChinaZoingRemoteVO> showDetails = chinaZoingRemoteService.showDetails(ooo.getCityId());
|
||||
if (HttpStatus.OK.equals(showDetails.getStatusCode())) {
|
||||
ChinaZoingRemoteVO detailsBody = showDetails.getBody();
|
||||
if (null != detailsBody) {
|
||||
itemDict.set("cityDetail", Dict.create()
|
||||
.set("levelThreeAreaName", detailsBody.getLevelThreeAreaName())
|
||||
.set("levelTwoAreaName", detailsBody.getLevelTwoAreaName())
|
||||
.set("levelOneAreaName", detailsBody.getLevelOneAreaName())
|
||||
);
|
||||
} else {
|
||||
itemDict.set("cityDetail", null);
|
||||
}
|
||||
}
|
||||
|
||||
return itemDict;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
dict.set("serviceZone", listDict);
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
return Dict.create().parseBean(installService);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean create(InstallServiceDTO dto) {
|
||||
if (CollUtil.isEmpty(dto.getServiceZone())) {
|
||||
throw new CommonException("没有设置服务区域!");
|
||||
}
|
||||
InstallService installService = new InstallService();
|
||||
BeanUtils.copyProperties(dto, installService);
|
||||
|
||||
if (StrUtil.isEmpty(dto.getServiceCode())) {
|
||||
installService.setServiceCode(RandomUtil.randomString(6) + RandomUtil.randomNumbers(3) + RandomUtil.randomString(2));
|
||||
}
|
||||
|
||||
// 获取租户的id
|
||||
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
|
||||
Long tenantId = userDetails.getTenantId();
|
||||
installService.setServiceZone(JSONUtil.parse(dto.getServiceZone()).toString());
|
||||
installService.setDeleteFlag(false);
|
||||
installService.setTenantId(tenantId);
|
||||
|
||||
return installServiceRepository.insert(installService) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean update(InstallServiceDTO dto) {
|
||||
InstallService installService = new InstallService();
|
||||
BeanUtils.copyProperties(dto, installService);
|
||||
|
||||
if (CollUtil.isNotEmpty(dto.getServiceZone())) {
|
||||
installService.setServiceZone(JSONUtil.parse(dto.getServiceZone()).toString());
|
||||
}
|
||||
|
||||
return installServiceRepository.updateByPrimaryKeySelective(installService) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean batchRemove(List<Long> ids) {
|
||||
List<InstallService> installServiceList = installServiceRepository.selectByCondition(Condition.builder(InstallService.class)
|
||||
.andWhere(Sqls.custom()
|
||||
.andIn(InstallService.FIELD_ID, ids, true))
|
||||
.build());
|
||||
|
||||
return installServiceRepository.batchDelete(installServiceList) > 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.MyEncryptionService;
|
||||
import org.skyer.starter.keyencrypt.core.EncryptProperties;
|
||||
import org.skyer.starter.keyencrypt.core.EncryptionService;
|
||||
import org.skyer.starter.keyencrypt.core.IEncryptionService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class MyEncryptionServiceImpl implements MyEncryptionService {
|
||||
@Autowired
|
||||
private EncryptProperties encryptProperties;
|
||||
|
||||
private IEncryptionService encryptionService = null;
|
||||
|
||||
private IEncryptionService getEncryptionService() {
|
||||
if (encryptionService == null) {
|
||||
encryptionService = new EncryptionService(encryptProperties);
|
||||
}
|
||||
return encryptionService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String encrypt(String text) {
|
||||
return getEncryptionService().encrypt(text, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String encrypt(Long id) {
|
||||
return encrypt(String.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String encrypt(Integer id) {
|
||||
return encrypt(String.valueOf(id));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SkuAttributeValueDraftService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* sku属性关联草稿表应用服务默认实现
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-29 11:23:43
|
||||
*/
|
||||
@Service
|
||||
public class SkuAttributeValueDraftServiceImpl implements SkuAttributeValueDraftService {
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SkuAttributeValueService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* sku属性关联表应用服务默认实现
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-28 09:17:10
|
||||
*/
|
||||
@Service
|
||||
public class SkuAttributeValueServiceImpl implements SkuAttributeValueService {
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SkuAuditSettingService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 商品SKU审核应用服务默认实现
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-27 10:09:56
|
||||
*/
|
||||
@Service
|
||||
public class SkuAuditSettingServiceImpl implements SkuAuditSettingService {
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SkuDraftService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 商品规格草稿表应用服务默认实现
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2021-12-29 11:12:15
|
||||
*/
|
||||
@Service
|
||||
public class SkuDraftServiceImpl implements SkuDraftService {
|
||||
|
||||
}
|
|
@ -0,0 +1,435 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.elasticsearch.action.bulk.BulkRequest;
|
||||
import org.elasticsearch.action.bulk.BulkResponse;
|
||||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.search.*;
|
||||
import org.elasticsearch.client.RequestOptions;
|
||||
import org.elasticsearch.client.RestHighLevelClient;
|
||||
import org.elasticsearch.client.indices.GetIndexRequest;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.search.SearchHits;
|
||||
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
||||
import org.elasticsearch.search.sort.SortOrder;
|
||||
import org.skyer.core.domain.Page;
|
||||
import org.skyer.core.iam.ResourceLevel;
|
||||
import org.skyer.goods.api.dto.GoodsSkuPageDTO;
|
||||
import org.skyer.goods.app.service.SkuEsService;
|
||||
import org.skyer.goods.domain.entity.Material;
|
||||
import org.skyer.goods.domain.entity.Sku;
|
||||
import org.skyer.goods.domain.entity.SkuAttributeValue;
|
||||
import org.skyer.goods.domain.entity.Spu;
|
||||
import org.skyer.goods.domain.repository.*;
|
||||
import org.skyer.goods.domain.vo.GoodsSkuPageVO;
|
||||
import org.skyer.goods.domain.vo.SpuEsModel;
|
||||
import org.skyer.goods.infra.constant.ObjectConstant;
|
||||
import org.skyer.goods.infra.util.EsBoolQueryUtil;
|
||||
import org.skyer.mybatis.domain.AuditDomain;
|
||||
import org.skyer.mybatis.domian.Condition;
|
||||
import org.skyer.mybatis.util.Sqls;
|
||||
import org.skyer.saga.saga.SagaDefinition;
|
||||
import org.skyer.saga.saga.annotation.Saga;
|
||||
import org.skyer.saga.saga.annotation.SagaTask;
|
||||
import org.skyer.saga.saga.producer.StartSagaBuilder;
|
||||
import org.skyer.saga.saga.producer.TransactionalProducer;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.skyer.goods.domain.entity.Sku.*;
|
||||
|
||||
/**
|
||||
* @author zhanglb
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SkuEsServiceImpl implements SkuEsService {
|
||||
|
||||
@Autowired
|
||||
private RestHighLevelClient client;
|
||||
@Autowired
|
||||
private CategoryRepository categoryRepository;
|
||||
@Autowired
|
||||
private SkuRepository skuRepository;
|
||||
@Autowired
|
||||
private SpuRepository spuRepository;
|
||||
@Autowired
|
||||
private MaterialRepository materialRepository;
|
||||
@Autowired
|
||||
private SkuAttributeValueRepository skuAttributeValueRepository;
|
||||
@Autowired
|
||||
private TransactionalProducer transactionalProducer;
|
||||
|
||||
|
||||
@Override
|
||||
@Saga(description = "同步skuList到saga", code = "sync-sku-list-es")
|
||||
public List<Sku> syncSkuListEsSage(List<Sku> skuList) {
|
||||
List<String> skuCodeList = skuList.stream().map(Sku::getSkuCode).collect(Collectors.toList());
|
||||
List<Sku> skuEsList = skuRepository.selectByCondition(Condition.builder(Sku.class)
|
||||
.andWhere(Sqls.custom().andIn(FIELD_SKU_CODE,skuCodeList)).build());
|
||||
|
||||
return transactionalProducer.applyAndReturn(
|
||||
StartSagaBuilder.newBuilder()
|
||||
.withSagaCode("sync-sku-list-es").withLevel(ResourceLevel.ORGANIZATION)
|
||||
.withRefType("listSku")
|
||||
.withSourceId(1L),
|
||||
build -> {
|
||||
build.withPayloadAndSerialize(skuEsList)
|
||||
.withRefId(skuEsList.hashCode() + " time:" + System.currentTimeMillis());
|
||||
return skuEsList;
|
||||
});
|
||||
}
|
||||
|
||||
@SagaTask(description = "同步skuList到es sage task",
|
||||
code = "sync-sku-es-list-sage-task",
|
||||
sagaCode = "sync-sku-list-es",
|
||||
concurrentLimitNum = 2,
|
||||
concurrentLimitPolicy = SagaDefinition.ConcurrentLimitPolicy.NONE,
|
||||
seq = 1)
|
||||
@Override
|
||||
public List<Sku> syncSkuListEsSageTask(String skuListJsonStr) throws IOException {
|
||||
List<Sku> skuList = JSON.parseArray(skuListJsonStr, Sku.class);
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
skuList.forEach(x -> {
|
||||
//构造保存请求
|
||||
String jsonString = JSON.toJSONString(x);
|
||||
IndexRequest indexRequest = new IndexRequest(ObjectConstant.EsKey.SKU_INDEX);
|
||||
indexRequest.id(x.getId().toString());
|
||||
indexRequest.source(jsonString, XContentType.JSON);
|
||||
bulkRequest.add(indexRequest);
|
||||
});
|
||||
client.bulk(bulkRequest, RequestOptions.DEFAULT);
|
||||
return skuList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Page<GoodsSkuPageVO> listPage(GoodsSkuPageDTO goodsSkuPageDTO) throws Exception {
|
||||
|
||||
// 判断索引库是否存在
|
||||
if (!isExistsIndex(ObjectConstant.EsKey.SKU_INDEX)){
|
||||
return new Page<>();
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(goodsSkuPageDTO.getCategoryIdList())) {
|
||||
goodsSkuPageDTO.setCategoryIdList(categoryRepository.getLaterCategoryId(goodsSkuPageDTO.getCategoryIdList()));
|
||||
}
|
||||
Page<GoodsSkuPageVO> skuPage = new Page<>();
|
||||
int size = goodsSkuPageDTO.getSize();
|
||||
skuPage.setSize(size);
|
||||
skuPage.setNumber(goodsSkuPageDTO.getPage() + 1);
|
||||
SearchRequest searchRequest = this.buildSearchRequest(goodsSkuPageDTO);
|
||||
try {
|
||||
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
SearchHits hits = search.getHits();
|
||||
long totalElements = hits.getTotalHits().value;
|
||||
skuPage.setTotalElements(totalElements);
|
||||
int total = (int) totalElements;
|
||||
int page = total / size;
|
||||
skuPage.setTotalPages(page);
|
||||
List<Sku> esSkuList = Arrays.stream(hits.getHits()).map(s -> JSON.parseObject(s.getSourceAsString()).toJavaObject(Sku.class)).collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(esSkuList)){
|
||||
List<Long> skuIdList = esSkuList.stream().map(Sku::getId).collect(Collectors.toList());
|
||||
//查询数据库获取最新数据
|
||||
List<Sku> skuList = skuRepository.selectByCondition(Condition.builder(Sku.class)
|
||||
.andWhere(Sqls.custom().andIn(FIELD_ID,skuIdList)).orderByDesc(AuditDomain.FIELD_CREATION_DATE).build());
|
||||
skuPage.setContent(this.getPageList(skuList));
|
||||
}else {
|
||||
skuPage.setContent(new ArrayList<>());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return skuPage;
|
||||
}
|
||||
|
||||
|
||||
private List<GoodsSkuPageVO> getPageList(List<Sku> skuList) {
|
||||
List<GoodsSkuPageVO> pageList = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(skuList)) {
|
||||
// 找出所有的商品数据
|
||||
Set<Long> goodsIds = skuList.stream().map(Sku::getSpuId).collect(Collectors.toSet());
|
||||
List<Spu> spuList = spuRepository.selectByCondition(Condition.builder(Spu.class)
|
||||
.andWhere(Sqls.custom()
|
||||
.andIn(org.skyer.goods.domain.entity.Spu.ID, goodsIds, true)
|
||||
.andEqualTo(org.skyer.goods.domain.entity.Spu.DELETE_FLAG, false))
|
||||
.build());
|
||||
// 找出所有素材
|
||||
Set<Long> materialIds = spuList.stream().map(Spu::getMaterialId).collect(Collectors.toSet());
|
||||
List<Material> materialList = materialRepository.selectByCondition(Condition.builder(Material.class)
|
||||
.andWhere(Sqls.custom()
|
||||
.andIn("id", materialIds, true)
|
||||
.andEqualTo(org.skyer.goods.domain.entity.Spu.DELETE_FLAG, false))
|
||||
.build());
|
||||
//属性
|
||||
List<Long> skuIdList = skuList.stream().map(Sku::getId).collect(Collectors.toList());
|
||||
List<SkuAttributeValue> skuAttrValueRelationList = skuAttributeValueRepository.selectByCondition(Condition.builder(SkuAttributeValue.class)
|
||||
.andWhere(Sqls.custom().andIn(SkuAttributeValue.FIELD_SKU_ID, skuIdList, true))
|
||||
.build());
|
||||
|
||||
//组装返回数据
|
||||
Map<Long,String> categoryMap = Maps.newHashMap();
|
||||
skuList.forEach(o -> {
|
||||
GoodsSkuPageVO skuPageVO = new GoodsSkuPageVO();
|
||||
//复制id 价格等信息
|
||||
BeanUtils.copyProperties(o, skuPageVO);
|
||||
//找到与sku匹配的spu
|
||||
Spu tempSpu = spuList.stream().filter(xx -> xx.getId().longValue() == o.getSpuId().longValue()).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotNull(tempSpu)) {
|
||||
//设置sku属性字段
|
||||
skuPageVO.setMaterialId(tempSpu.getMaterialId());
|
||||
skuPageVO.setSpuName(tempSpu.getName());
|
||||
skuPageVO.setSpuType(tempSpu.getType());
|
||||
skuPageVO.setCategoryCode(tempSpu.getCategoryCode());
|
||||
skuPageVO.setSpuCode(tempSpu.getSpuCode());
|
||||
if (ObjectUtil.isNotNull(tempSpu.getRemark())) {
|
||||
skuPageVO.setGoodsRemark(tempSpu.getRemark());
|
||||
}
|
||||
|
||||
String categoryName = categoryMap.get(tempSpu.getCategoryId());
|
||||
if (StringUtils.isEmpty(categoryName)){
|
||||
categoryName = categoryRepository.getCategoryNameById(tempSpu.getCategoryId());
|
||||
categoryMap.put(tempSpu.getCategoryId(),categoryName);
|
||||
}
|
||||
skuPageVO.setCategoryName(categoryName);
|
||||
//匹配素材
|
||||
if (ObjectUtil.isNotNull(tempSpu.getMaterialId())) {
|
||||
skuPageVO.setMaterialId(tempSpu.getMaterialId());
|
||||
Material tempMaterial = materialList.stream().filter(xx -> xx.getId().longValue() == skuPageVO.getMaterialId().longValue()).findFirst().orElse(null);
|
||||
if (ObjectUtil.isNotNull(tempMaterial)) {
|
||||
skuPageVO.setMaterialMainImages(Arrays.asList(Optional.ofNullable(tempMaterial.getMainImage()).orElse("").split(",")));
|
||||
skuPageVO.setMaterialName(tempMaterial.getMaterialName());
|
||||
}
|
||||
}
|
||||
//查询属性值 是带入初始属性 否放入到额外属性
|
||||
List<SkuAttributeValue> skuAttrValueRelationLists= skuAttrValueRelationList.stream().filter(xx -> xx.getSkuId().longValue() == o.getId().longValue()).collect(Collectors.toList());
|
||||
|
||||
if (CollUtil.isNotEmpty(skuAttrValueRelationLists)) {
|
||||
List<SkuAttributeValue> originalAttributeList = skuAttrValueRelationLists.stream().filter(SkuAttributeValue::getIsSku).collect(Collectors.toList());
|
||||
skuPageVO.setSkuAttributeList(originalAttributeList);
|
||||
|
||||
List<SkuAttributeValue> attachedAttributeList = skuAttrValueRelationLists.stream().filter(f -> !f.getIsSku()).collect(Collectors.toList());
|
||||
skuPageVO.setOtherAttributeList(attachedAttributeList);
|
||||
}
|
||||
}
|
||||
pageList.add(skuPageVO);
|
||||
});
|
||||
}
|
||||
return pageList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Saga(description = "删除skuList到saga", code = "sync-del-sku-list-es")
|
||||
public List<Sku> syncDelSkuListEsSage(List<Sku> skuList) {
|
||||
return transactionalProducer.applyAndReturn(
|
||||
StartSagaBuilder.newBuilder()
|
||||
.withSagaCode("sync-del-sku-list-es").withLevel(ResourceLevel.ORGANIZATION)
|
||||
.withRefType("listSku")
|
||||
.withSourceId(1L),
|
||||
build -> {
|
||||
build.withPayloadAndSerialize(skuList)
|
||||
.withRefId(skuList.hashCode() + " time:" + System.currentTimeMillis());
|
||||
return skuList;
|
||||
});
|
||||
}
|
||||
|
||||
@SagaTask(description = "同步skuList到es sage task",
|
||||
code = "sync-del-sku-es-list-sage-task",
|
||||
sagaCode = "sync-del-sku-list-es",
|
||||
concurrentLimitNum = 2,
|
||||
concurrentLimitPolicy = SagaDefinition.ConcurrentLimitPolicy.NONE,
|
||||
seq = 1)
|
||||
@Override
|
||||
public List<Sku> syncDelSkuListEsSageTask(String skuListJsonStr) throws IOException {
|
||||
List<Sku> skuList = JSON.parseArray(skuListJsonStr, Sku.class);
|
||||
List<String> keys = Lists.newArrayList();
|
||||
skuList.forEach(item -> keys.add(String.valueOf(item.getId())));
|
||||
DeleteByQueryRequest request = new DeleteByQueryRequest(ObjectConstant.EsKey.SKU_INDEX);
|
||||
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
|
||||
queryBuilder = EsBoolQueryUtil.inStringQuery(queryBuilder, "id", keys);
|
||||
request.setQuery(queryBuilder);
|
||||
request.setTimeout(TimeValue.timeValueMinutes(2));
|
||||
client.deleteByQuery(request, RequestOptions.DEFAULT);
|
||||
return skuList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delSkuEsAll() throws Exception {
|
||||
if (isExistsIndex(ObjectConstant.EsKey.SKU_INDEX)) {
|
||||
DeleteByQueryRequest request = new DeleteByQueryRequest(ObjectConstant.EsKey.SKU_INDEX);
|
||||
BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
|
||||
request.setQuery(queryBuilder);
|
||||
request.setTimeout(TimeValue.timeValueMinutes(2));
|
||||
client.deleteByQuery(request, RequestOptions.DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void skuStatusUp() throws IOException {
|
||||
List<Sku> skuList = skuRepository.selectAll();
|
||||
BulkRequest bulkRequest = new BulkRequest();
|
||||
skuList.forEach(x -> {
|
||||
//构造保存请求
|
||||
IndexRequest indexRequest = new IndexRequest(ObjectConstant.EsKey.SKU_INDEX);
|
||||
indexRequest.id(x.getId().toString());
|
||||
String jsonString = JSON.toJSONString(x);
|
||||
indexRequest.source(jsonString, XContentType.JSON);
|
||||
bulkRequest.add(indexRequest);
|
||||
});
|
||||
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取ES查询编辑器
|
||||
*
|
||||
* @param goodsSkuPageDTO
|
||||
* @return
|
||||
*/
|
||||
private SearchRequest buildSearchRequest(GoodsSkuPageDTO goodsSkuPageDTO) {
|
||||
BoolQueryBuilder builder = QueryBuilders.boolQuery();
|
||||
|
||||
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getCategoryIdList())||
|
||||
ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSpuName()) ||
|
||||
ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSpuCode()) ||
|
||||
ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSpuType())) {
|
||||
List<Long> spuIds = this.esQuerySpuIds(goodsSkuPageDTO);
|
||||
if (ObjectUtil.isEmpty(spuIds)){
|
||||
builder = EsBoolQueryUtil.andTermQuery(builder, "spuId", "-1");
|
||||
}else {
|
||||
builder = EsBoolQueryUtil.inTermQuery(builder, "spuId", spuIds);
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSkuCode())) {
|
||||
builder = EsBoolQueryUtil.andStringQuery(builder, "skuCode",goodsSkuPageDTO.getSkuCode());
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSkuName())) {
|
||||
builder.must(QueryBuilders.matchPhraseQuery("skuName",goodsSkuPageDTO.getSkuName()));
|
||||
}
|
||||
if (Objects.nonNull(goodsSkuPageDTO.getSetFlag())) {
|
||||
builder = EsBoolQueryUtil.andTermQuery(builder, "setFlag", goodsSkuPageDTO.getSetFlag());
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getStatus())) {
|
||||
builder = EsBoolQueryUtil.inTermQuery(builder, "status", goodsSkuPageDTO.getStatus());
|
||||
}
|
||||
|
||||
|
||||
searchSourceBuilder.query(builder);
|
||||
// 排序
|
||||
searchSourceBuilder.sort("creationDate",SortOrder.DESC);
|
||||
searchSourceBuilder.trackTotalHits(true);
|
||||
EsBoolQueryUtil.page(searchSourceBuilder, goodsSkuPageDTO.getPage(), goodsSkuPageDTO.getSize());
|
||||
return new SearchRequest(new String[]{ObjectConstant.EsKey.SKU_INDEX}, searchSourceBuilder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 在es中查询复核条件的spuId
|
||||
*
|
||||
* @param goodsSkuPageDTO 查询条件
|
||||
* @return spuIdList
|
||||
*/
|
||||
private List<Long> esQuerySpuIds(GoodsSkuPageDTO goodsSkuPageDTO) {
|
||||
|
||||
BoolQueryBuilder builder = QueryBuilders.boolQuery();
|
||||
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getCategoryIdList())) {
|
||||
builder = EsBoolQueryUtil.inTermQuery(builder, "categoryId", goodsSkuPageDTO.getCategoryIdList());
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSpuName())) {
|
||||
builder.must(QueryBuilders.matchPhraseQuery("name",goodsSkuPageDTO.getSpuName()));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSpuCode())) {
|
||||
builder = EsBoolQueryUtil.andStringQuery(builder, "spuCode",goodsSkuPageDTO.getSpuCode());
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(goodsSkuPageDTO.getSpuType())) {
|
||||
builder = EsBoolQueryUtil.andStringQuery(builder, "type", goodsSkuPageDTO.getSpuType());
|
||||
}
|
||||
|
||||
searchSourceBuilder.size(9000);
|
||||
searchSourceBuilder.query(builder);
|
||||
searchSourceBuilder.trackTotalHits(true);
|
||||
SearchRequest searchRequest = new SearchRequest(ObjectConstant.EsKey.SPU_INDEX);
|
||||
searchRequest.source(searchSourceBuilder);
|
||||
searchRequest.scroll(TimeValue.timeValueMinutes(2L));
|
||||
|
||||
List<Long> spuIds = Lists.newArrayList();
|
||||
try {
|
||||
// 执行检索请求
|
||||
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
String scrollId = searchResponse.getScrollId();
|
||||
|
||||
SearchHits hits = searchResponse.getHits();
|
||||
if (hits.getHits() != null && hits.getHits().length > 0) {
|
||||
for (SearchHit hit : hits.getHits()) {
|
||||
SpuEsModel spu = JSON.parseObject(hit.getSourceAsString()).toJavaObject(SpuEsModel.class);
|
||||
spuIds.add(spu.getId());
|
||||
}
|
||||
}
|
||||
while (true) {
|
||||
// 5、循环创建SearchScrollRequest
|
||||
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
|
||||
//6、再指定scroll的生存时间,若不指定它会归零
|
||||
scrollRequest.scroll(TimeValue.timeValueMinutes(2L));
|
||||
//7、执行查询获取结果
|
||||
SearchResponse scrollResp = client.scroll(scrollRequest, RequestOptions.DEFAULT);
|
||||
//8、判断是否查询到了数据输出
|
||||
SearchHit[] scrollHits = scrollResp.getHits().getHits();
|
||||
if (scrollHits != null && scrollHits.length > 0) {
|
||||
for (SearchHit hit : hits) {
|
||||
SpuEsModel spu = JSON.parseObject(hit.getSourceAsString()).toJavaObject(SpuEsModel.class);
|
||||
spuIds.add(spu.getId());
|
||||
}
|
||||
} else {
|
||||
//9、若无数据则退出
|
||||
break;
|
||||
}
|
||||
}
|
||||
//10、创建ClearScrollRequest
|
||||
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
|
||||
//11、指定scrollId
|
||||
clearScrollRequest.addScrollId(scrollId);
|
||||
//12、删除scrollId
|
||||
ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
|
||||
//13、根据它返回判断删除成功没
|
||||
clearScrollResponse.isSucceeded();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return spuIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断一个索引是否存在
|
||||
* @param indexName
|
||||
* @return
|
||||
*/
|
||||
private boolean isExistsIndex(String indexName) throws Exception{
|
||||
GetIndexRequest request = new GetIndexRequest(indexName);
|
||||
return client.indices().exists(request, RequestOptions.DEFAULT);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SkuPackageService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 应用服务默认实现
|
||||
*
|
||||
* @author zhanglongbing@ebc.com 2022-03-03 10:45:30
|
||||
*/
|
||||
@Service
|
||||
public class SkuPackageServiceImpl implements SkuPackageService {
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SpuAttributeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 属性表应用服务默认实现
|
||||
*
|
||||
* @author linzhuanghuang@ebc.com 2021-12-28 16:40:03
|
||||
*/
|
||||
@Service
|
||||
public class SpuAttributeServiceImpl implements SpuAttributeService {
|
||||
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package org.skyer.goods.app.service.impl;
|
||||
|
||||
import org.skyer.goods.app.service.SpuAttributeValueService;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* 属性值表应用服务默认实现
|
||||
*
|
||||
* @author linzhuanghuang@ebc.com 2021-12-28 16:40:03
|
||||
*/
|
||||
@Service
|
||||
public class SpuAttributeValueServiceImpl implements SpuAttributeValueService {
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue