Compare commits
No commits in common. "46c7ff60c822547e6ee035b123716b3b3eac4fab" and "3dd6b192056298147e4a6c4bdec697e36dca011f" have entirely different histories.
46c7ff60c8
...
3dd6b19205
52
.drone.yml
52
.drone.yml
@ -7,7 +7,36 @@ name: filesystem-drone # 定义流水线名称
|
|||||||
|
|
||||||
steps: # 定义流水线执行步骤,这些步骤将顺序执行
|
steps: # 定义流水线执行步骤,这些步骤将顺序执行
|
||||||
|
|
||||||
- name: package-and-push-image
|
- name: package # 流水线名称
|
||||||
|
|
||||||
|
image: maven:3-jdk-8 # 定义创建容器的Docker镜像
|
||||||
|
|
||||||
|
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
|
||||||
|
|
||||||
|
- name: maven-cache
|
||||||
|
|
||||||
|
path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
|
||||||
|
|
||||||
|
- name: maven-build
|
||||||
|
|
||||||
|
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
|
||||||
|
|
||||||
|
commands: # 定义在Docker容器中执行的shell命令
|
||||||
|
|
||||||
|
- mvn package -Dmaven.test.skip=true # 应用打包命令
|
||||||
|
|
||||||
|
# - cd yudao-server/target/
|
||||||
|
# - ls
|
||||||
|
|
||||||
|
- cp yudao-server/target/yudao-server.jar /app/build/yudao-server.jar
|
||||||
|
|
||||||
|
- cp yudao-server/Dockerfile /app/build/Dockerfile
|
||||||
|
|
||||||
|
- cp yudao-server/run.sh /app/build/run.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- name: copy package
|
||||||
|
|
||||||
image: appleboy/drone-ssh # SSH工具镜像
|
image: appleboy/drone-ssh # SSH工具镜像
|
||||||
|
|
||||||
@ -26,17 +55,8 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
|
|||||||
command_timeout: 5m # 远程执行命令超时时间
|
command_timeout: 5m # 远程执行命令超时时间
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cd /root/allLikeMall
|
|
||||||
- git fetch origin
|
|
||||||
- git reset --hard origin/main
|
|
||||||
- git clean -fd
|
|
||||||
- mvn package -Dmaven.test.skip=true
|
|
||||||
- cd yudao-server
|
|
||||||
- chmod +x push.sh
|
|
||||||
- ./push.sh
|
|
||||||
- scp ./run.sh root@1.14.205.126:/zymail
|
|
||||||
# - ls
|
# - ls
|
||||||
# - scp -r /zymail/maven/build root@1.14.205.126:/zymail
|
- scp -r /zymail/maven/build root@1.14.205.126:/zymail
|
||||||
# - ssh root@1.14.205.126
|
# - ssh root@1.14.205.126
|
||||||
# - ls
|
# - ls
|
||||||
|
|
||||||
@ -66,3 +86,13 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
|
|||||||
- cd /zymail/build
|
- cd /zymail/build
|
||||||
- chmod +x run.sh # 更改为可执行脚本
|
- chmod +x run.sh # 更改为可执行脚本
|
||||||
- ./run.sh # 运行脚本打包应用镜像并运行
|
- ./run.sh # 运行脚本打包应用镜像并运行
|
||||||
|
|
||||||
|
volumes: # 定义流水线挂载目录,用于共享数据
|
||||||
|
|
||||||
|
- name: maven-build
|
||||||
|
host:
|
||||||
|
path: /zymail/maven/build # 从宿主机中挂载的目录
|
||||||
|
|
||||||
|
- name: maven-cache
|
||||||
|
host:
|
||||||
|
path: /zymail/maven/cache # 从宿主机中挂载的目录
|
@ -24,8 +24,3 @@ export const getWallet = async (params: PayWalletUserReqVO) => {
|
|||||||
export const getWalletPage = async (params) => {
|
export const getWalletPage = async (params) => {
|
||||||
return await request.get({ url: `/pay/wallet/page`, params })
|
return await request.get({ url: `/pay/wallet/page`, params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改会员钱包余额
|
|
||||||
export const updateWalletBalance = async (data: any) => {
|
|
||||||
return await request.post({ url: `/pay/wallet/update`, data })
|
|
||||||
}
|
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="min-h-42px flex flex-col">
|
<div class="min-h-42px flex flex-col">
|
||||||
<div v-for="(item, index) in property.list" :key="index"
|
<div
|
||||||
class="item h-42px flex flex-row items-center justify-between gap-4px p-x-12px">
|
v-for="(item, index) in property.list"
|
||||||
|
:key="index"
|
||||||
|
class="item h-42px flex flex-row items-center justify-between gap-4px p-x-12px"
|
||||||
|
>
|
||||||
<div class="flex flex-1 flex-row items-center gap-8px">
|
<div class="flex flex-1 flex-row items-center gap-8px">
|
||||||
<el-image v-if="item.iconUrl" class="wh" :src="item.iconUrl" />
|
<el-image v-if="item.iconUrl" class="h-16px w-16px" :src="item.iconUrl" />
|
||||||
<span class="text-16px" :style="{ color: item.titleColor }">{{ item.title }}</span>
|
<span class="text-16px" :style="{ color: item.titleColor }">{{ item.title }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-center flex flex-row justify-center gap-4px">
|
<div class="item-center flex flex-row justify-center gap-4px">
|
||||||
@ -25,21 +28,4 @@
|
|||||||
.item + .item {
|
.item + .item {
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wh {
|
|
||||||
width: 77px;
|
|
||||||
height: 20px;
|
|
||||||
position: relative;
|
|
||||||
padding-right: 10px;
|
|
||||||
&::after{
|
|
||||||
position:absolute;
|
|
||||||
content:'';
|
|
||||||
top:50%;
|
|
||||||
right:0;
|
|
||||||
width:1px;
|
|
||||||
height:57%;
|
|
||||||
border-right:1px solid #ababab;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
@ -1,60 +1,46 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- <el-carousel :height="`${carouselHeight}px`" :autoplay="false" arrow="hover" indicator-position="outside">
|
<el-carousel
|
||||||
|
:height="`${carouselHeight}px`"
|
||||||
|
:autoplay="false"
|
||||||
|
arrow="hover"
|
||||||
|
indicator-position="outside"
|
||||||
|
>
|
||||||
<el-carousel-item v-for="(page, pageIndex) in pages" :key="pageIndex">
|
<el-carousel-item v-for="(page, pageIndex) in pages" :key="pageIndex">
|
||||||
<div class="flex flex-row flex-wrap">
|
<div class="flex flex-row flex-wrap">
|
||||||
<div v-for="(item, index) in page" :key="index"
|
<div
|
||||||
|
v-for="(item, index) in page"
|
||||||
|
:key="index"
|
||||||
class="relative flex flex-col items-center justify-center"
|
class="relative flex flex-col items-center justify-center"
|
||||||
:style="{ width: columnWidth, height: `${rowHeight}px` }"> -->
|
:style="{ width: columnWidth, height: `${rowHeight}px` }"
|
||||||
|
>
|
||||||
<!-- 图标 + 角标 -->
|
<!-- 图标 + 角标 -->
|
||||||
<!-- <div class="relative" :class="`h-${ICON_SIZE}px w-${ICON_SIZE}px`"> -->
|
<div class="relative" :class="`h-${ICON_SIZE}px w-${ICON_SIZE}px`">
|
||||||
<!-- 右上角角标 -->
|
<!-- 右上角角标 -->
|
||||||
<!-- <span v-if="item.badge?.show"
|
<span
|
||||||
|
v-if="item.badge?.show"
|
||||||
class="absolute right--10px top--10px z-1 h-20px rounded-10px p-x-6px text-center text-12px leading-20px"
|
class="absolute right--10px top--10px z-1 h-20px rounded-10px p-x-6px text-center text-12px leading-20px"
|
||||||
:style="{ color: item.badge.textColor, backgroundColor: item.badge.bgColor }">
|
:style="{ color: item.badge.textColor, backgroundColor: item.badge.bgColor }"
|
||||||
|
>
|
||||||
{{ item.badge.text }}
|
{{ item.badge.text }}
|
||||||
</span>
|
</span>
|
||||||
<el-image v-if="item.iconUrl" :src="item.iconUrl" class="h-full w-full" />
|
<el-image v-if="item.iconUrl" :src="item.iconUrl" class="h-full w-full" />
|
||||||
</div> -->
|
</div>
|
||||||
<!-- 标题 -->
|
<!-- 标题 -->
|
||||||
<!-- <span v-if="property.layout === 'iconText'" class="text-12px" :style="{
|
<span
|
||||||
|
v-if="property.layout === 'iconText'"
|
||||||
|
class="text-12px"
|
||||||
|
:style="{
|
||||||
color: item.titleColor,
|
color: item.titleColor,
|
||||||
height: `${TITLE_HEIGHT}px`,
|
height: `${TITLE_HEIGHT}px`,
|
||||||
lineHeight: `${TITLE_HEIGHT}px`
|
lineHeight: `${TITLE_HEIGHT}px`
|
||||||
}">
|
}"
|
||||||
|
>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-carousel-item>
|
</el-carousel-item>
|
||||||
</el-carousel> -->
|
</el-carousel>
|
||||||
<view class="title">
|
|
||||||
我的服务
|
|
||||||
</view>
|
|
||||||
<view class="newList">
|
|
||||||
|
|
||||||
<view class="new_menu" v-for="(page, pageIndex) in pages" :key="pageIndex">
|
|
||||||
<view v-for="(item, index) in page" :key="index" class="new_items" :style="{ width: columnWidth}">
|
|
||||||
<!-- 图标 + 角标 -->
|
|
||||||
<div class="relative" :class="`h-24px w-24px`">
|
|
||||||
<!-- 右上角角标 -->
|
|
||||||
<span v-if="item.badge?.show"
|
|
||||||
class="absolute right--10px top--10px z-1 h-20px rounded-10px p-x-6px text-center text-12px leading-20px"
|
|
||||||
:style="{ color: item.badge.textColor, backgroundColor: item.badge.bgColor }">
|
|
||||||
{{ item.badge.text }}
|
|
||||||
</span>
|
|
||||||
<el-image v-if="item.iconUrl" :src="item.iconUrl" class="h-full w-full" />
|
|
||||||
</div>
|
|
||||||
<!-- 标题 -->
|
|
||||||
<span v-if="property.layout === 'iconText'" class="text-12px new_title" :style="{
|
|
||||||
color: item.titleColor,
|
|
||||||
height: `${TITLE_HEIGHT}px`,
|
|
||||||
lineHeight: `${TITLE_HEIGHT}px`
|
|
||||||
}">
|
|
||||||
{{ item.title }}
|
|
||||||
</span>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -112,38 +98,11 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.title {
|
|
||||||
padding: 10px 20px;
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 600;
|
|
||||||
// border-bottom: 1px solid #dcdcdc;
|
|
||||||
margin-bottom:20px;
|
|
||||||
}
|
|
||||||
.new_menu {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
|
|
||||||
.new_items {
|
|
||||||
width: 25%;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
.new_title{
|
|
||||||
width:100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 重写指示器样式,与 APP 保持一致
|
// 重写指示器样式,与 APP 保持一致
|
||||||
:root {
|
:root {
|
||||||
.el-carousel__indicator {
|
.el-carousel__indicator {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
|
|
||||||
.el-carousel__button {
|
.el-carousel__button {
|
||||||
--el-carousel-indicator-height: 6px;
|
--el-carousel-indicator-height: 6px;
|
||||||
--el-carousel-indicator-width: 6px;
|
--el-carousel-indicator-width: 6px;
|
||||||
@ -151,7 +110,6 @@
|
|||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-carousel__indicator.is-active {
|
.el-carousel__indicator.is-active {
|
||||||
.el-carousel__button {
|
.el-carousel__button {
|
||||||
--el-carousel-indicator-width: 12px;
|
--el-carousel-indicator-width: 12px;
|
||||||
|
@ -1,27 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="min-h-30px" >
|
<div class="min-h-30px" v-html="article?.content"></div>
|
||||||
<view class="floxt">
|
|
||||||
<view class="addClass" v-for="(item, index) in article?.list" :key="index" >
|
|
||||||
<view class="image">
|
|
||||||
<img
|
|
||||||
:src="item.picUrl"
|
|
||||||
alt="" />
|
|
||||||
</view>
|
|
||||||
<view class="text">
|
|
||||||
<view class="top">
|
|
||||||
{{item.title}}
|
|
||||||
</view>
|
|
||||||
<view class="bottom">
|
|
||||||
<!-- {{ sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') }} -->
|
|
||||||
{{ formatDate(item.createTime) }}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { formatDate } from '@/utils/formatTime'
|
|
||||||
import { PromotionArticleProperty } from './config'
|
import { PromotionArticleProperty } from './config'
|
||||||
import * as ArticleApi from '@/api/mall/promotion/article/index'
|
import * as ArticleApi from '@/api/mall/promotion/article/index'
|
||||||
|
|
||||||
@ -35,9 +15,7 @@ watch(
|
|||||||
() => props.property.id,
|
() => props.property.id,
|
||||||
async () => {
|
async () => {
|
||||||
if (props.property.id) {
|
if (props.property.id) {
|
||||||
// article.value = await ArticleApi.getArticle(props.property.id)
|
article.value = await ArticleApi.getArticle(props.property.id)
|
||||||
article.value = await ArticleApi.getArticlePage()
|
|
||||||
console.log(article.value,"article.value");
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -46,44 +24,4 @@ watch(
|
|||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss"></style>
|
||||||
.floxt {
|
|
||||||
width: 100%;
|
|
||||||
.addClass {
|
|
||||||
background:white;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
width: 100%;
|
|
||||||
margin:8px 0;
|
|
||||||
// padding: 40px;
|
|
||||||
// padding-right: 0;
|
|
||||||
// height: 200px;
|
|
||||||
.image {
|
|
||||||
width: 130px;
|
|
||||||
height: 81px;
|
|
||||||
margin-right: 18px;
|
|
||||||
padding:8px 8px;
|
|
||||||
display:flex;
|
|
||||||
img{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
display: flex;
|
|
||||||
width: 100%;
|
|
||||||
// text-align: center;
|
|
||||||
padding:20px 20px;
|
|
||||||
flex:1;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: space-between;
|
|
||||||
.bottom{
|
|
||||||
color: #999;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
@ -135,11 +135,11 @@ export const PAGE_LIBS = [
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{ name: '商品组件', extended: true, components: ['ProductCard', 'ProductList'] },
|
{ name: '商品组件', extended: true, components: ['ProductCard', 'ProductList'] },
|
||||||
// {
|
{
|
||||||
// name: '用户组件',
|
name: '用户组件',
|
||||||
// extended: true,
|
extended: true,
|
||||||
// components: ['UserCard', 'UserOrder', 'UserWallet', 'UserCoupon']
|
components: ['UserCard', 'UserOrder', 'UserWallet', 'UserCoupon']
|
||||||
// },
|
},
|
||||||
{
|
{
|
||||||
name: '营销组件',
|
name: '营销组件',
|
||||||
extended: true,
|
extended: true,
|
||||||
|
@ -1,134 +0,0 @@
|
|||||||
<template>
|
|
||||||
<Dialog title="修改用户余额" v-model="dialogVisible" width="600">
|
|
||||||
<el-form
|
|
||||||
ref="formRef"
|
|
||||||
:model="formData"
|
|
||||||
:rules="formRules"
|
|
||||||
label-width="100px"
|
|
||||||
v-loading="formLoading"
|
|
||||||
>
|
|
||||||
<el-form-item label="用户编号" prop="userId">
|
|
||||||
<el-input v-model="formData.userId" class="!w-240px" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户昵称" prop="nickname">
|
|
||||||
<el-input v-model="formData.nickname" class="!w-240px" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="变动前余额" prop="balance">
|
|
||||||
<el-input-number v-model="formData.balance" class="!w-240px" :precision="2" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="变动类型" prop="changeType">
|
|
||||||
<el-radio-group v-model="formData.changeType">
|
|
||||||
<el-radio :label="1">增加</el-radio>
|
|
||||||
<el-radio :label="-1">减少</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="变动余额" prop="changePoint">
|
|
||||||
<el-input-number v-model="formData.changePoint" class="!w-240px" :min="0" :precision="2" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="变动后余额">
|
|
||||||
<el-input-number v-model="pointResult" class="!w-240px" :precision="2" disabled />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
|
||||||
</template>
|
|
||||||
</Dialog>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import * as UserApi from '@/api/pay/wallet/balance'
|
|
||||||
import * as UserApi2 from '@/api/member/user'
|
|
||||||
/** 修改用户余额表单 */
|
|
||||||
defineOptions({ name: 'UpdatePointForm' })
|
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
|
||||||
const message = useMessage() // 消息弹窗
|
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
||||||
const formData = ref({
|
|
||||||
id: undefined,
|
|
||||||
userId: undefined,
|
|
||||||
nickname: undefined,
|
|
||||||
balance: 0,
|
|
||||||
changePoint: 0,
|
|
||||||
changeType: 1
|
|
||||||
})
|
|
||||||
const formRules = reactive({
|
|
||||||
changePoint: [{ required: true, message: '变动余额不能为空', trigger: 'blur' }]
|
|
||||||
})
|
|
||||||
const formRef = ref() // 表单 Ref
|
|
||||||
|
|
||||||
/** 打开弹窗 */
|
|
||||||
const open = async (id?: number) => {
|
|
||||||
dialogVisible.value = true
|
|
||||||
resetForm()
|
|
||||||
// 修改时,设置数据
|
|
||||||
if (id) {
|
|
||||||
formLoading.value = true
|
|
||||||
try {
|
|
||||||
const param = { userId: id }
|
|
||||||
const wallet = await UserApi.getWallet(param)
|
|
||||||
formData.value = wallet
|
|
||||||
formData.value.balance = wallet.balance / 100.0;
|
|
||||||
const user = await UserApi2.getUser(id);
|
|
||||||
formData.value.nickname = user.nickname;
|
|
||||||
formData.value.changeType = 1 // 默认增加余额
|
|
||||||
formData.value.changePoint = 0 // 变动余额默认0
|
|
||||||
} finally {
|
|
||||||
formLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
||||||
|
|
||||||
/** 提交表单 */
|
|
||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
||||||
const submitForm = async () => {
|
|
||||||
// 校验表单
|
|
||||||
if (!formRef) return
|
|
||||||
const valid = await formRef.value.validate()
|
|
||||||
if (!valid) return
|
|
||||||
|
|
||||||
if (formData.value.changePoint < 1) {
|
|
||||||
message.error('变动余额不能小于 1')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (pointResult.value < 0) {
|
|
||||||
message.error('变动后的余额不能小于 0')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 提交请求
|
|
||||||
formLoading.value = true
|
|
||||||
try {
|
|
||||||
await UserApi.updateWalletBalance({
|
|
||||||
id: formData.value.id,
|
|
||||||
balance: formData.value.changePoint * formData.value.changeType
|
|
||||||
})
|
|
||||||
|
|
||||||
message.success(t('common.updateSuccess'))
|
|
||||||
dialogVisible.value = false
|
|
||||||
// 发送操作成功的事件
|
|
||||||
emit('success')
|
|
||||||
} finally {
|
|
||||||
formLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 重置表单 */
|
|
||||||
const resetForm = () => {
|
|
||||||
formData.value = {
|
|
||||||
id: undefined,
|
|
||||||
nickname: undefined,
|
|
||||||
balance: undefined,
|
|
||||||
reason: undefined
|
|
||||||
}
|
|
||||||
formRef.value?.resetFields()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 变动后的余额 */
|
|
||||||
const pointResult = computed(
|
|
||||||
() => formData.value.balance + formData.value.changePoint * formData.value.changeType
|
|
||||||
)
|
|
||||||
</script>
|
|
@ -106,7 +106,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="center" label="积分" prop="point" width="100px" />
|
<el-table-column align="center" label="积分" prop="point" width="100px" />
|
||||||
<el-table-column align="center" label="余额" prop="balance" width="100px" />
|
|
||||||
<el-table-column align="center" label="状态" prop="status" width="100px">
|
<el-table-column align="center" label="状态" prop="status" width="100px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
||||||
@ -197,8 +196,6 @@
|
|||||||
<UserLevelUpdateForm ref="updateLevelFormRef" @success="getList" />
|
<UserLevelUpdateForm ref="updateLevelFormRef" @success="getList" />
|
||||||
<!-- 修改用户积分弹窗 -->
|
<!-- 修改用户积分弹窗 -->
|
||||||
<UserPointUpdateForm ref="updatePointFormRef" @success="getList" />
|
<UserPointUpdateForm ref="updatePointFormRef" @success="getList" />
|
||||||
<!-- 修改用户余额弹窗 -->
|
|
||||||
<UserBalanceUpdateForm ref="updateBalanceFormRef" @success="getList" />
|
|
||||||
<!-- 发送优惠券弹窗 -->
|
<!-- 发送优惠券弹窗 -->
|
||||||
<CouponSendForm ref="couponSendFormRef" />
|
<CouponSendForm ref="couponSendFormRef" />
|
||||||
</template>
|
</template>
|
||||||
@ -212,7 +209,6 @@ import MemberLevelSelect from '@/views/member/level/components/MemberLevelSelect
|
|||||||
import MemberGroupSelect from '@/views/member/group/components/MemberGroupSelect.vue'
|
import MemberGroupSelect from '@/views/member/group/components/MemberGroupSelect.vue'
|
||||||
import UserLevelUpdateForm from './UserLevelUpdateForm.vue'
|
import UserLevelUpdateForm from './UserLevelUpdateForm.vue'
|
||||||
import UserPointUpdateForm from './UserPointUpdateForm.vue'
|
import UserPointUpdateForm from './UserPointUpdateForm.vue'
|
||||||
import UserBalanceUpdateForm from './UserBalanceUpdateForm.vue'
|
|
||||||
import { CouponSendForm } from '@/views/mall/promotion/coupon/components'
|
import { CouponSendForm } from '@/views/mall/promotion/coupon/components'
|
||||||
import { checkPermi } from '@/utils/permission'
|
import { checkPermi } from '@/utils/permission'
|
||||||
|
|
||||||
@ -237,7 +233,6 @@ const queryParams = reactive({
|
|||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const updateLevelFormRef = ref() // 修改会员等级表单
|
const updateLevelFormRef = ref() // 修改会员等级表单
|
||||||
const updatePointFormRef = ref() // 修改会员积分表单
|
const updatePointFormRef = ref() // 修改会员积分表单
|
||||||
const updateBalanceFormRef = ref() // 修改会员余额表单
|
|
||||||
const selectedIds = ref<number[]>([]) // 表格的选中 ID 数组
|
const selectedIds = ref<number[]>([]) // 表格的选中 ID 数组
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
@ -304,7 +299,7 @@ const handleCommand = (command: string, row: UserApi.UserVO) => {
|
|||||||
updatePointFormRef.value.open(row.id)
|
updatePointFormRef.value.open(row.id)
|
||||||
break
|
break
|
||||||
case 'handleUpdateBlance':
|
case 'handleUpdateBlance':
|
||||||
updateBalanceFormRef.value.open(row.id)
|
// todo @jason:增加一个【修改余额】
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
|
@ -33,11 +33,6 @@
|
|||||||
<artifactId>yudao-module-infra-api</artifactId>
|
<artifactId>yudao-module-infra-api</artifactId>
|
||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>cn.iocoder.boot</groupId>
|
|
||||||
<artifactId>yudao-module-pay-api</artifactId>
|
|
||||||
<version>2.1.0-jdk8-snapshot</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- 业务组件 -->
|
<!-- 业务组件 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -15,7 +15,6 @@ import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
|
|||||||
import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService;
|
import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService;
|
||||||
import cn.iocoder.yudao.module.member.service.tag.MemberTagService;
|
import cn.iocoder.yudao.module.member.service.tag.MemberTagService;
|
||||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
||||||
import cn.iocoder.yudao.module.pay.api.wallet.PayWalletApi;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
@ -25,7 +24,6 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -52,8 +50,6 @@ public class MemberUserController {
|
|||||||
private MemberGroupService memberGroupService;
|
private MemberGroupService memberGroupService;
|
||||||
@Resource
|
@Resource
|
||||||
private MemberPointRecordService memberPointRecordService;
|
private MemberPointRecordService memberPointRecordService;
|
||||||
@Resource
|
|
||||||
private PayWalletApi payWalletApi;
|
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新会员用户")
|
@Operation(summary = "更新会员用户")
|
||||||
@ -119,11 +115,7 @@ public class MemberUserController {
|
|||||||
// 处理用户分组返显
|
// 处理用户分组返显
|
||||||
List<MemberGroupDO> groups = memberGroupService.getGroupList(
|
List<MemberGroupDO> groups = memberGroupService.getGroupList(
|
||||||
convertSet(pageResult.getList(), MemberUserDO::getGroupId));
|
convertSet(pageResult.getList(), MemberUserDO::getGroupId));
|
||||||
PageResult<MemberUserRespVO> convertPage = MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups);
|
return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups));
|
||||||
for (MemberUserRespVO respVO : convertPage.getList()) {
|
|
||||||
respVO.setBalance(new BigDecimal(payWalletApi.getUserBalance(respVO.getId())).divide(BigDecimal.valueOf(100)).toString());
|
|
||||||
}
|
|
||||||
return success(convertPage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,6 @@ public class MemberUserRespVO extends MemberUserBaseVO {
|
|||||||
@Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
@Schema(description = "积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||||
private Integer point;
|
private Integer point;
|
||||||
|
|
||||||
@Schema(description = "余额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
|
||||||
private String balance;
|
|
||||||
|
|
||||||
@Schema(description = "总积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000")
|
@Schema(description = "总积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "2000")
|
||||||
private Integer totalPoint;
|
private Integer totalPoint;
|
||||||
|
|
||||||
|
@ -218,8 +218,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isPasswordMatch(String rawPassword, String encodedPassword) {
|
public boolean isPasswordMatch(String rawPassword, String encodedPassword) {
|
||||||
return true;
|
return passwordEncoder.matches(rawPassword, encodedPassword);
|
||||||
// return passwordEncoder.matches(rawPassword, encodedPassword);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.pay.api.wallet;
|
|
||||||
|
|
||||||
public interface PayWalletApi {
|
|
||||||
Integer getUserBalance (Long id);
|
|
||||||
}
|
|
@ -47,7 +47,6 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode WALLET_REFUND_EXIST = new ErrorCode(1_007_007_003, "已经存在钱包退款");
|
ErrorCode WALLET_REFUND_EXIST = new ErrorCode(1_007_007_003, "已经存在钱包退款");
|
||||||
ErrorCode WALLET_FREEZE_PRICE_NOT_ENOUGH = new ErrorCode(1_007_007_004, "钱包冻结余额不足");
|
ErrorCode WALLET_FREEZE_PRICE_NOT_ENOUGH = new ErrorCode(1_007_007_004, "钱包冻结余额不足");
|
||||||
|
|
||||||
|
|
||||||
// ========== 钱包充值模块 1-007-008-000 ==========
|
// ========== 钱包充值模块 1-007-008-000 ==========
|
||||||
ErrorCode WALLET_RECHARGE_NOT_FOUND = new ErrorCode(1_007_008_000, "钱包充值记录不存在");
|
ErrorCode WALLET_RECHARGE_NOT_FOUND = new ErrorCode(1_007_008_000, "钱包充值记录不存在");
|
||||||
ErrorCode WALLET_RECHARGE_UPDATE_PAID_STATUS_NOT_UNPAID = new ErrorCode(1_007_008_001, "钱包充值更新支付状态失败,钱包充值记录不是【未支付】状态");
|
ErrorCode WALLET_RECHARGE_UPDATE_PAID_STATUS_NOT_UNPAID = new ErrorCode(1_007_008_001, "钱包充值更新支付状态失败,钱包充值记录不是【未支付】状态");
|
||||||
@ -63,8 +62,6 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode WALLET_RECHARGE_PACKAGE_NOT_FOUND = new ErrorCode(1_007_008_011, "钱包充值套餐不存在");
|
ErrorCode WALLET_RECHARGE_PACKAGE_NOT_FOUND = new ErrorCode(1_007_008_011, "钱包充值套餐不存在");
|
||||||
ErrorCode WALLET_RECHARGE_PACKAGE_IS_DISABLE = new ErrorCode(1_007_008_012, "钱包充值套餐已禁用");
|
ErrorCode WALLET_RECHARGE_PACKAGE_IS_DISABLE = new ErrorCode(1_007_008_012, "钱包充值套餐已禁用");
|
||||||
ErrorCode WALLET_RECHARGE_PACKAGE_NAME_EXISTS = new ErrorCode(1_007_008_013, "钱包充值套餐名称已存在");
|
ErrorCode WALLET_RECHARGE_PACKAGE_NAME_EXISTS = new ErrorCode(1_007_008_013, "钱包充值套餐名称已存在");
|
||||||
ErrorCode WALLET_RECHARGE_RANGE_EXCEPTION = new ErrorCode(1_007_007_004, "充值后余额异常");
|
|
||||||
|
|
||||||
|
|
||||||
// ========== 转账模块 1-007-009-000 ==========
|
// ========== 转账模块 1-007-009-000 ==========
|
||||||
ErrorCode PAY_TRANSFER_SUBMIT_CHANNEL_ERROR = new ErrorCode(1_007_009_000, "发起转账报错,错误码:{},错误提示:{}");
|
ErrorCode PAY_TRANSFER_SUBMIT_CHANNEL_ERROR = new ErrorCode(1_007_009_000, "发起转账报错,错误码:{},错误提示:{}");
|
||||||
|
@ -18,8 +18,7 @@ public enum PayWalletBizTypeEnum implements IntArrayValuable {
|
|||||||
RECHARGE(1, "充值"),
|
RECHARGE(1, "充值"),
|
||||||
RECHARGE_REFUND(2, "充值退款"),
|
RECHARGE_REFUND(2, "充值退款"),
|
||||||
PAYMENT(3, "支付"),
|
PAYMENT(3, "支付"),
|
||||||
PAYMENT_REFUND(4, "支付退款"),
|
PAYMENT_REFUND(4, "支付退款");
|
||||||
ADMIN_MODIFY(5, "管理员修改");
|
|
||||||
|
|
||||||
// TODO 后续增加
|
// TODO 后续增加
|
||||||
|
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.pay.api.wallet;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
|
||||||
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.enums.UserTypeEnum.MEMBER;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@Validated
|
|
||||||
public class PayWalletApiImpl implements PayWalletApi{
|
|
||||||
@Resource
|
|
||||||
private PayWalletService payWalletService;
|
|
||||||
@Override
|
|
||||||
public Integer getUserBalance(Long id) {
|
|
||||||
PayWalletDO walletDO = payWalletService.getOrCreateWallet(id, MEMBER.getValue());
|
|
||||||
return walletDO.getBalance();
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletRespVO;
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletRespVO;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserBalanceVo;
|
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserReqVO;
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserReqVO;
|
||||||
import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletConvert;
|
import cn.iocoder.yudao.module.pay.convert.wallet.PayWalletConvert;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
||||||
@ -14,7 +13,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
@ -40,14 +41,6 @@ public class PayWalletController {
|
|||||||
return success(PayWalletConvert.INSTANCE.convert02(wallet));
|
return success(PayWalletConvert.INSTANCE.convert02(wallet));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/update")
|
|
||||||
@PreAuthorize("@ss.hasPermission('pay:wallet:update')")
|
|
||||||
@Operation(summary = "修改用户钱包余额(后台操作)")
|
|
||||||
public CommonResult<Boolean> updateWallet(@Valid @RequestBody PayWalletUserBalanceVo reqVo){
|
|
||||||
payWalletService.updateWallet(reqVo);
|
|
||||||
return success(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得会员钱包分页")
|
@Operation(summary = "获得会员钱包分页")
|
||||||
@PreAuthorize("@ss.hasPermission('pay:wallet:query')")
|
@PreAuthorize("@ss.hasPermission('pay:wallet:query')")
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 用户修改余额 Request VO")
|
|
||||||
@Data
|
|
||||||
public class PayWalletUserBalanceVo {
|
|
||||||
@Schema(description = "钱包编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
|
||||||
private Long id;
|
|
||||||
@Schema(description = "余额", requiredMode = Schema.RequiredMode.REQUIRED)
|
|
||||||
private BigDecimal balance;
|
|
||||||
}
|
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.pay.service.wallet;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserBalanceVo;
|
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletTransactionDO;
|
||||||
import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum;
|
import cn.iocoder.yudao.module.pay.enums.wallet.PayWalletBizTypeEnum;
|
||||||
@ -98,10 +97,4 @@ public interface PayWalletService {
|
|||||||
*/
|
*/
|
||||||
void unfreezePrice(Long id, Integer price);
|
void unfreezePrice(Long id, Integer price);
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改钱包余额(后台操作)
|
|
||||||
* @param reqVo
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
void updateWallet(PayWalletUserBalanceVo reqVo);
|
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,7 @@ package cn.iocoder.yudao.module.pay.service.wallet;
|
|||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletUserBalanceVo;
|
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.refund.PayRefundDO;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
||||||
@ -20,7 +18,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
@ -208,37 +205,4 @@ public class PayWalletServiceImpl implements PayWalletService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateWallet(PayWalletUserBalanceVo reqVo) {
|
|
||||||
// 如果
|
|
||||||
if (reqVo.getBalance().compareTo(BigDecimal.ZERO) == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 把单位从元转为分
|
|
||||||
BigDecimal change = new BigDecimal("100");
|
|
||||||
// 查出对应钱包信息
|
|
||||||
PayWalletDO walletDO = walletMapper.selectById(reqVo.getId());
|
|
||||||
if (reqVo.getBalance().compareTo(new BigDecimal("21474836.47")) > 0) {
|
|
||||||
throw exception(WALLET_RECHARGE_RANGE_EXCEPTION);
|
|
||||||
}
|
|
||||||
// 总共改变的金额
|
|
||||||
long changeBalance = (reqVo.getBalance().multiply(change)).longValue();
|
|
||||||
// 总余额
|
|
||||||
long totalBalance = walletDO.getBalance() + changeBalance;
|
|
||||||
// 总充值
|
|
||||||
long totalRecharge = walletDO.getTotalRecharge() + changeBalance;
|
|
||||||
if (totalBalance > 2147483647 || totalRecharge > 2147483647 || totalBalance < 0 || totalRecharge < 0) {
|
|
||||||
throw exception(WALLET_RECHARGE_RANGE_EXCEPTION);
|
|
||||||
}
|
|
||||||
walletDO.setBalance((int) totalBalance);
|
|
||||||
walletDO.setTotalRecharge((int) totalRecharge);
|
|
||||||
walletMapper.updateById(walletDO);
|
|
||||||
String title = "后台操作给用户" + (totalBalance > 0 ? "增加" : "减少") + "余额" + Math.abs(changeBalance)/100.0 + "元";
|
|
||||||
WalletTransactionCreateReqBO transactionCreateReqBO = new WalletTransactionCreateReqBO()
|
|
||||||
.setWalletId(reqVo.getId()).setPrice((int) changeBalance).setBalance((int) totalBalance)
|
|
||||||
.setBizType(PayWalletBizTypeEnum.ADMIN_MODIFY.getType()).setBizId("0").setTitle(title);
|
|
||||||
walletTransactionService.createWalletTransaction(transactionCreateReqBO);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,13 +4,13 @@ FROM openjdk:8-jre
|
|||||||
RUN mkdir -p /yudao-server
|
RUN mkdir -p /yudao-server
|
||||||
WORKDIR /yudao-server
|
WORKDIR /yudao-server
|
||||||
## 将后端项目的 Jar 文件,复制到镜像中
|
## 将后端项目的 Jar 文件,复制到镜像中
|
||||||
ADD ./target/yudao-server.jar app.jar
|
ADD yudao-server.jar app.jar
|
||||||
|
|
||||||
## 设置 TZ 时区
|
## 设置 TZ 时区
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
|
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
|
||||||
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
|
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
|
||||||
Duser.timezone=Asia/Shanghai"
|
|
||||||
## 应用参数
|
## 应用参数
|
||||||
ENV ARGS=""
|
ENV ARGS=""
|
||||||
|
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
app_name='zymall'
|
|
||||||
# 定义应用版本
|
|
||||||
app_version='1.0.0'
|
|
||||||
app_repository='mt.ptzykjgs.com:8080/serve'
|
|
||||||
# 打包编译docker镜像
|
|
||||||
echo '----build image----'
|
|
||||||
docker buildx build -f Dockerfile -t "${app_name}:${app_version}" .
|
|
||||||
echo '----tag image----'
|
|
||||||
docker tag "${app_name}:${app_version}" "${app_repository}/${app_name}:${app_version}"
|
|
||||||
echo '----push image----'
|
|
||||||
docker push "${app_repository}/${app_name}:${app_version}"
|
|
@ -1,7 +1,6 @@
|
|||||||
app_name='zymall'
|
app_name='zymall'
|
||||||
# 定义应用版本
|
# 定义应用版本
|
||||||
app_version='1.0.0'
|
app_version='1.0.0'
|
||||||
app_repository='mt.ptzykjgs.com:8080/serve'
|
|
||||||
# 定义应用环境
|
# 定义应用环境
|
||||||
#profile_active='prod'
|
#profile_active='prod'
|
||||||
echo '----stop container----'
|
echo '----stop container----'
|
||||||
@ -9,8 +8,9 @@ docker stop ${app_name}
|
|||||||
echo '----rm container----'
|
echo '----rm container----'
|
||||||
docker rm ${app_name}
|
docker rm ${app_name}
|
||||||
echo '----rm image----'
|
echo '----rm image----'
|
||||||
docker rmi -f "${app_name}:${app_version}"
|
docker rmi ${app_name}:${app_version}
|
||||||
echo '----pull image----'
|
# 打包编译docker镜像
|
||||||
docker pull "${app_repository}/${app_name}:${app_version}"
|
echo '----build image----'
|
||||||
|
docker buildx build -f Dockerfile -t ${app_name}:${app_version} .
|
||||||
echo '----start container----'
|
echo '----start container----'
|
||||||
docker run -d -p 6127:6127 --name ${app_name} --restart always "${app_repository}/${app_name}:${app_version}"
|
docker run -d -p 6127:6127 --name ${app_name} --restart always ${app_name}:${app_version}
|
Loading…
Reference in New Issue
Block a user