diff --git a/webroot/addon/recharge/admin/api/recharge.ts b/webroot/addon/recharge/admin/api/recharge.ts new file mode 100644 index 00000000..3cc1e431 --- /dev/null +++ b/webroot/addon/recharge/admin/api/recharge.ts @@ -0,0 +1,171 @@ +import request from '@/utils/request' + +/***************************************************** 充值订单 ****************************************************/ + +/** + * 获取充值订单列表 + * @param params + * @returns + */ +export function getRechargeOrderList(params: Record) { + return request.get(`recharge/order`, { params }) +} + +/** + * 获取充值订单统计 + * @param params + * @returns + */ +export function getRechargeStat(params: Record) { + return request.get(`recharge/order/stat`, { params }) +} + +/** + * 获取充值订单详情 + * @param order_id + * @returns + */ +export function getRechargeOrderInfo(order_id: number) { + return request.get(`recharge/order/${ order_id }`); +} + +/** + * 获取充值订单状态列表 + * @returns + */ +export function getRechargeOrderStatusList() { + return request.get(`recharge/order/status`) +} + +/** + * 获取退款记录 + * @returns + */ +export function getRechargeRefund(params: Record) { + return request.get(`recharge/refund`, { params }) +} + +/** + * 获取退款状态 + * @returns + */ +export function getRechargeRefundStatus() { + return request.get(`recharge/refund/status`) +} + +/** + * 充值订单发起退款 + * @returns + */ +export function rechargeRefund(order_id: number) { + return request.put(`recharge/refund/${ order_id }`, {}, { showSuccessMessage: true }); +} + +/** + * 获取退款统计 + * @returns + */ +export function getRechargeRefundStat() { + return request.get(`recharge/refund/stat`); +} + +/** + * 获取充值套餐列表 + * @param params + * @returns + */ +export function getRechargePackageList(params: Record) { + return request.get(`recharge/package`, { params }) +} + +/** + * 获取充值套餐状态 + * @returns + */ +export function getRechargePackageStatusList() { + return request.get(`recharge/package/status`) +} + +/** + * 添加套餐 + * @param params + * @returns + */ +export function addRechargePackage(params: Record) { + return request.post('recharge/package', params, { showErrorMessage: true, showSuccessMessage: true }) +} + +/** + * 编辑套餐 + * @param params + * @returns + */ +export function editRechargePackage(params: Record) { + return request.put(`recharge/package/${ params.recharge_id }`, params, { + showErrorMessage: true, + showSuccessMessage: true + }) +} + +/** + * 获取充值套餐详情 + * @param params + * @returns + */ +export function getRechargePackageInfo(params: Record) { + return request.get(`recharge/package/init`, { params }); +} + +/** + * 删除套餐 + * @param recharge_id + * @returns + */ +export function deleteRechargePackage(recharge_id: number) { + return request.delete(`recharge/package/${ recharge_id }`, { showSuccessMessage: true }) +} + +/** + * 设置充值套餐配置 + * @param params + */ +export function setRechargeConfig(params: Record) { + return request.post(`recharge/package/config`, params, { showErrorMessage: true, showSuccessMessage: true }) +} + +/** + * 获取充值套餐配置 + * @returns + */ +export function getRechargeConfig() { + return request.get(`recharge/package/config`) +} + +/** + * 修改充值套餐状态 + * @param params + * @returns + */ +export function editRechargeStatus(params: Record) { + return request.put(`recharge/package/status`, params, { + showErrorMessage: true, + showSuccessMessage: true + }) +} + +/** + * 充值套餐修改排序 + * @param params + * @returns + */ +export function modifyRechargeSort(params: Record) { + return request.put(`recharge/package/sort`, params, { showSuccessMessage: true }) +} + +/** + * 获取充值套餐规则字典 + * @returns + */ +export function getPackageGiftDict() { + return request.get(`recharge/dict/package_gift`) +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/order.detail.json b/webroot/addon/recharge/admin/lang/zh-cn/order.detail.json new file mode 100644 index 00000000..dffaa307 --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/order.detail.json @@ -0,0 +1,20 @@ +{ + "orderInfo": "订单详情", + "orderDiscountMoney": "优惠金额", + "ip": "下单IP", + "payTime": "支付时间", + "remark": "商家留言", + "memberMessage": "买家留言", + "orderNo": "订单编号", + "orderStatus": "订单状态", + "orderNoPlaceholder": "请输入订单编号", + "createTime": "创建时间", + "rechargeMoney": "充值金额", + "orderMoney": "订单金额", + "member": "买家", + "mobile": "手机号", + "orderFromName": "订单来源", + "payTypeName": "支付方式", + "startDate": "开始时间", + "endDate": "结束时间" +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/order.list.json b/webroot/addon/recharge/admin/lang/zh-cn/order.list.json new file mode 100644 index 00000000..9c18c2fd --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/order.list.json @@ -0,0 +1,32 @@ +{ + "totalRechargeRefundMoney": "充值退款(元)", + "totalRechargeMoney": "充值金额(元)", + "rechargeRefundMoney": "充值退款", + "rechargeNo": "充值单号", + "orderStatus": "订单状态", + "rechargeNoPlaceholder": "请输入充值单号", + "createTime": "充值时间", + "rechargeMoney": "充值金额", + "orderMoney": "订单金额", + "member": "会员信息", + "orderFromName": "订单来源", + "payTypeName": "支付方式", + "startDate": "开始时间", + "endDate": "结束时间", + "namePlaceholder": "请选择", + "refundBtn": "退款", + "refundContent": "是否确认退款", + "payTime": "支付时间", + "refundStatus": "退款状态", + "startMoney": "起始金额", + "endMoney": "结束金额", + "orderInfo": "订单详情", + "orderDiscountMoney": "优惠金额", + "ip": "下单IP", + "remark": "商家留言", + "memberMessage": "买家留言", + "orderNo": "订单编号", + "orderNoPlaceholder": "请输入订单编号", + "memberInfo": "买家", + "mobile": "手机号" +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/order.refund.json b/webroot/addon/recharge/admin/lang/zh-cn/order.refund.json new file mode 100644 index 00000000..cc87ccb9 --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/order.refund.json @@ -0,0 +1,24 @@ +{ + "refundNumber": "退款单号", + "userInfo": "用户信息", + "sourceNumber": "来源单号", + "refundAmount": "退款金额", + "refundTime": "退款时间", + "detail": "详情", + "statusName": "状态", + "memberInfo": "会员信息", + "refundSource": "退款来源", + "startDate": "开始时间", + "endDate": "结束时间", + "refundStatus": "退款状态", + "accumulateRefundMoney": "累计退款金额(元)", + "haveRefundMoney": "退款中金额(元)", + "refundSuccessMonry": "退款成功金额(元)", + "refundFailMoney": "退款失败金额(元)", + "memberInfoPlaceholder": "请输入会员编号/昵称/手机号", + "refundNumberPlaceholder": "请输入退款单号", + "orderNumber": "来源单号", + "orderNumberPlaceholder": "请输入来源单号", + "refundDetail": "退款详情", + "nickname": "会员昵称" +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/package.config.json b/webroot/addon/recharge/admin/lang/zh-cn/package.config.json new file mode 100644 index 00000000..9d969c9d --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/package.config.json @@ -0,0 +1,16 @@ +{ + "enableRecharge": "充值开关", + "rechargeExplain": "充值说明", + "rechargeExplainPlaceholder": "请输入充值说明", + "min_price": "最低充值金额", + "limitTipsTwo": "最低充值金额不能小于0.01", + "limitTips": "格式不正确", + "minPricePlaceholder": "请输入最低充值金额", + "enableRechargeTips": "关闭后前台将隐藏充值入口", + "closeOrderInfo": "自动取消订单", + "closeOrderInfoLeft": "提交订单", + "closeOrderInfoRight": "分钟未付款", + "closeOrderInfoBottom": "订单取消时间必须在10-1440分钟之间", + "CloseLengthPlaceholder": "请输入订单取消时间", + "isClose": "自动取消订单" +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/package.detail.json b/webroot/addon/recharge/admin/lang/zh-cn/package.detail.json new file mode 100644 index 00000000..2c63c085 --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/package.detail.json @@ -0,0 +1,2 @@ +{ +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/package.edit.json b/webroot/addon/recharge/admin/lang/zh-cn/package.edit.json new file mode 100644 index 00000000..8dc3fd2a --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/package.edit.json @@ -0,0 +1,32 @@ +{ + "rechargeName": "套餐名称", + "addRecharge": "添加套餐", + "editRecharge": "编辑套餐", + "faceValue": "面值", + "price": "价格", + "point": "赠送积分", + "growth": "赠送成长值", + "coupon": "赠送优惠券", + "sort": "排序", + "status": "状态", + "couponPrice": "面值", + "namePlaceholder": "请输入套餐名称", + "faceValuePlaceholder": "请输入面值", + "pricePlaceholder": "请输入价格", + "pointPlaceholder": "请输入赠送积分", + "growthPlaceholder": "请输入赠送成长值", + "faceValueMustBeGreaterThanZero": "面值必须大于0", + "priceMustBeGreaterThanZero": "价格必须大于0", + "pointMustBeGreaterThanZero": "赠送积分必须大于0", + "growthMustBeGreaterThanZero": "赠送成长值必须大于0", + "limitTips": "格式不正确", + "name": "名称", + "type": "类型", + "useThreshold": "使用门槛", + "termOfValidity": "有效期", + "yuan": "元", + "giveNum": "赠送数量", + "giveNumPlaceholder": "请输入赠送数量", + "giveNumMustBeGreaterThanZero": "赠送数量必须大于0", + "giveCouponTips": "如果优惠券数量不足、限领数量已达上限或优惠券状态不是“进行中”,都将导致赠送失败。" +} diff --git a/webroot/addon/recharge/admin/lang/zh-cn/package.list.json b/webroot/addon/recharge/admin/lang/zh-cn/package.list.json new file mode 100644 index 00000000..f1da5d62 --- /dev/null +++ b/webroot/addon/recharge/admin/lang/zh-cn/package.list.json @@ -0,0 +1,31 @@ +{ + "rechargeName": "套餐名称", + "rechargeInfo": "套餐信息", + "giftPackInfo": "礼包信息", + "detail": "详情", + "close": "关闭", + "rechargeNamePlaceholder": "请输入套餐名称", + "createTime": "创建时间", + "addRecharge": "添加套餐", + "status": "状态", + "faceValue": "面值", + "couponPrice": "面值", + "price": "价格", + "point": "积分", + "growth": "成长值", + "saleNum": "购买数量", + "deleteTips": "确定要删除该充值套餐吗?", + "detailTitle": "套餐详情", + "basicInfo": "基本信息", + "rechargeRecord": "充值记录", + "sortTips": "排序号格式输入错误", + "coupon": "优惠券", + "sortRules": "按照从大到小排序", + "name": "优惠券名称", + "type": "类型", + "useThreshold": "使用门槛", + "termOfValidity": "有效期", + "startDate": "开始时间", + "endDate": "结束时间", + "num": "赠送数量" +} diff --git a/webroot/addon/recharge/admin/views/order/components/recharge-detail.vue b/webroot/addon/recharge/admin/views/order/components/recharge-detail.vue new file mode 100644 index 00000000..4125d34a --- /dev/null +++ b/webroot/addon/recharge/admin/views/order/components/recharge-detail.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/webroot/addon/recharge/admin/views/order/detail.vue b/webroot/addon/recharge/admin/views/order/detail.vue new file mode 100644 index 00000000..0c42ab6b --- /dev/null +++ b/webroot/addon/recharge/admin/views/order/detail.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/order/list.vue b/webroot/addon/recharge/admin/views/order/list.vue new file mode 100644 index 00000000..c1bfcfbc --- /dev/null +++ b/webroot/addon/recharge/admin/views/order/list.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/order/refund.vue b/webroot/addon/recharge/admin/views/order/refund.vue new file mode 100644 index 00000000..d425bac4 --- /dev/null +++ b/webroot/addon/recharge/admin/views/order/refund.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/components/detail-growth.vue b/webroot/addon/recharge/admin/views/package/components/detail-growth.vue new file mode 100644 index 00000000..db335b0d --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/components/detail-growth.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/components/detail-points.vue b/webroot/addon/recharge/admin/views/package/components/detail-points.vue new file mode 100644 index 00000000..8724c1d5 --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/components/detail-points.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/components/gift-growth.vue b/webroot/addon/recharge/admin/views/package/components/gift-growth.vue new file mode 100644 index 00000000..1c893367 --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/components/gift-growth.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/components/gift-points.vue b/webroot/addon/recharge/admin/views/package/components/gift-points.vue new file mode 100644 index 00000000..862874f5 --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/components/gift-points.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/components/package-gift.vue b/webroot/addon/recharge/admin/views/package/components/package-gift.vue new file mode 100644 index 00000000..082a8c4e --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/components/package-gift.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/config.vue b/webroot/addon/recharge/admin/views/package/config.vue new file mode 100644 index 00000000..8eea7e94 --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/config.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/detail.vue b/webroot/addon/recharge/admin/views/package/detail.vue new file mode 100644 index 00000000..ce420c09 --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/detail.vue @@ -0,0 +1,126 @@ + + + + diff --git a/webroot/addon/recharge/admin/views/package/edit.vue b/webroot/addon/recharge/admin/views/package/edit.vue new file mode 100644 index 00000000..ff60f96b --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/edit.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/webroot/addon/recharge/admin/views/package/list.vue b/webroot/addon/recharge/admin/views/package/list.vue new file mode 100644 index 00000000..35d01991 --- /dev/null +++ b/webroot/addon/recharge/admin/views/package/list.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/webroot/addon/recharge/info.json b/webroot/addon/recharge/info.json new file mode 100644 index 00000000..9cc3fffd --- /dev/null +++ b/webroot/addon/recharge/info.json @@ -0,0 +1,12 @@ +{ + "title": "会员充值", + "desc": "在线充值到会员账户", + "key": "recharge", + "version": "1.0.0", + "author": "niucloud", + "type": "addon", + "support_app": "", + "support_version": "0.0.3", + "jar": "recharge.jar", + "mainClass": "com.niu.recharge.WebApplication" +} diff --git a/webroot/addon/recharge/jar/recharge.jar b/webroot/addon/recharge/jar/recharge.jar new file mode 100644 index 00000000..d5516751 Binary files /dev/null and b/webroot/addon/recharge/jar/recharge.jar differ diff --git a/webroot/addon/recharge/java/dependency-reduced-pom.xml b/webroot/addon/recharge/java/dependency-reduced-pom.xml new file mode 100644 index 00000000..981bcec7 --- /dev/null +++ b/webroot/addon/recharge/java/dependency-reduced-pom.xml @@ -0,0 +1,96 @@ + + + + niucloud-addon + com.niu + 1.0 + + 4.0.0 + recharge + 1.0.0 + + + + src/main/java + + **/*.* + + + + src/main/resources + + **/*.* + + + + recharge + + + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + *:* + + META-INF/services/* + META-INF/spring/* + META-INF/**.factories + META-INF/**.xml + META-INF/**.properties + + + + + + + + + maven-antrun-plugin + + + package + + run + + + + + + + + + + + + com.niu + niucloud-core + 1.0 + provided + + + yly + com.yly.print_sdk_library + + + + + org.projectlombok + lombok + 1.18.24 + provided + + + + 17 + 17 + 17 + UTF-8 + + diff --git a/webroot/addon/recharge/java/pom.xml b/webroot/addon/recharge/java/pom.xml new file mode 100644 index 00000000..b47da909 --- /dev/null +++ b/webroot/addon/recharge/java/pom.xml @@ -0,0 +1,106 @@ + + + + niucloud-addon + com.niu + 1.0 + + 4.0.0 + + recharge + 1.0.0 + + + UTF-8 + 17 + 17 + 17 + + + + + com.niu + niucloud-core + 1.0 + provided + + + javax.mail + javax.mail-api + 1.6.2 + + + com.sun.mail + javax.mail + 1.6.2 + + + + + recharge + + + src/main/java + + **/*.* + + + + src/main/resources + + **/*.* + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + *:* + + META-INF/services/* + META-INF/spring/* + META-INF/**.factories + META-INF/**.xml + META-INF/**.properties + + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + package + + run + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/WebApplication.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/WebApplication.java new file mode 100644 index 00000000..06cae8ca --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/WebApplication.java @@ -0,0 +1,12 @@ +package com.niu.recharge; + +import com.niu.core.common.annotation.SpringModuleApplication; +import org.springframework.boot.SpringApplication; + +@SpringModuleApplication("recharge") +public class WebApplication { + + public static void main(String[] args) { + SpringApplication.run(WebApplication.class, args); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/config/配置.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/config/配置.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/OrderController.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/OrderController.java new file mode 100644 index 00000000..c2dfd826 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/OrderController.java @@ -0,0 +1,57 @@ +package com.niu.recharge.controller.adminapi; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.Result; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.service.admin.IRechargeOrderService; +import com.niu.recharge.service.admin.param.RechargeOrderSearchParam; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("adminapi/recharge/order") +public class OrderController { + + @Resource + IRechargeOrderService rechargeOrderService; + + @GetMapping("") + public Result lists(PageParam pageParam, RechargeOrderSearchParam searchParam) { + return Result.success(rechargeOrderService.list(pageParam, searchParam)); + } + + /** + * 订单详情 + * + * @return + */ + @GetMapping("/{order_id}") + public Result detail(@PathVariable("order_id") Integer orderId) { + return Result.success(rechargeOrderService.detail(orderId)); + } + + /** + * 订单状态 + * + * @return + */ + @GetMapping("/status") + public Result>> status() { + return Result.success(OrderStatusEnum.getMap()); + } + + /** + * 订单统计 + * + * @return + */ + @GetMapping("/stat") + public Result stat(RechargeOrderSearchParam searchParam) { + return Result.success(rechargeOrderService.stat(searchParam)); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/RechargeController.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/RechargeController.java new file mode 100644 index 00000000..17ed39ff --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/RechargeController.java @@ -0,0 +1,76 @@ +package com.niu.recharge.controller.adminapi; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.Result; +import com.niu.recharge.service.admin.IRechargeService; +import com.niu.recharge.service.admin.param.RechargeEditSortParam; +import com.niu.recharge.service.admin.param.RechargeModifyStatusParam; +import com.niu.recharge.service.admin.param.RechargePageParam; +import com.niu.recharge.service.admin.param.RechargeParam; +import com.niu.recharge.service.core.param.RechargeSetConfigParam; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("adminapi/recharge") +public class RechargeController { + private final IRechargeService rechargeService; + + @PostMapping("/package/config") + Result setRechargeConfig(@RequestBody RechargeSetConfigParam param) { + rechargeService.setRechargeConfig(param); + return Result.success(); + } + + @GetMapping("/package/config") + Result getRechargeConfig() { + return Result.success(rechargeService.getRechargeConfig()); + } + + @GetMapping("/package") + Result lists(PageParam pageParam, RechargePageParam param) { + return Result.success(rechargeService.getPage(pageParam, param)); + } + + @PostMapping("/package") + Result add(@RequestBody RechargeParam param) { + rechargeService.add(param); + return Result.success(); + } + + @PutMapping("/package/{id}") + Result edit(@PathVariable Integer id, @RequestBody RechargeParam param) { + rechargeService.edit(id, param); + return Result.success(); + } + + @GetMapping("/package/init") + Result init(@RequestParam("recharge_id") Integer rechargeId) { + return Result.success(rechargeService.getInit(rechargeId)); + } + + @DeleteMapping("/package/{id}") + Result del(@PathVariable Integer id) { + rechargeService.del(id); + return Result.success(); + } + + @PutMapping("/package/status") + Result modifyStatus(@RequestBody RechargeModifyStatusParam param) { + rechargeService.modifyStatus(param); + return Result.success(); + } + + @PutMapping("/package/sort") + Result editSort(@RequestBody RechargeEditSortParam param) { + rechargeService.editSort(param); + return Result.success(); + } + + @GetMapping("dict/package_gift") + Result getPackageGiftDict() { + return Result.success(rechargeService.getPackageGiftDict()); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/RefundController.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/RefundController.java new file mode 100644 index 00000000..e635e744 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/adminapi/RefundController.java @@ -0,0 +1,74 @@ +package com.niu.recharge.controller.adminapi; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.Result; +import com.niu.recharge.enums.RefundStatusEnum; +import com.niu.recharge.service.admin.IRechargeRefundService; +import com.niu.recharge.service.admin.param.RechargeRefundSearchParam; +import com.niu.recharge.service.admin.vo.RechargeRefundStatVo; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("adminapi/recharge/refund") +public class RefundController { + + @Resource + IRechargeRefundService rechargeRefundService; + + /** + * 退款列表 + * + * @param pageParam + * @param searchParam + * @return + */ + @GetMapping("") + public Result lists(PageParam pageParam, RechargeRefundSearchParam searchParam) { + return Result.success(rechargeRefundService.list(pageParam, searchParam)); + } + + /** + * 发起退款 + * + * @param orderId + * @return + */ + @PutMapping("/{order_id}") + public Result refund(@PathVariable("order_id") Integer orderId) { + rechargeRefundService.refund(orderId); + return Result.success(); + } + + /** + * 退款详情 + * + * @return + */ + @GetMapping("/{refund_id}") + public Result detail(@PathVariable("refund_id") Integer refundId) { + return Result.success(rechargeRefundService.detail(refundId)); + } + + /** + * 退款状态 + * + * @return + */ + @GetMapping("/status") + public Result>> status() { + return Result.success(RefundStatusEnum.getMap()); + } + + /** + * 退款统计 + * + * @return + */ + @GetMapping("/stat") + public Result stat(RechargeRefundSearchParam searchParam) { + return Result.success(rechargeRefundService.stat(searchParam)); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/api/RechargeController.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/api/RechargeController.java new file mode 100644 index 00000000..6609762e --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/api/RechargeController.java @@ -0,0 +1,83 @@ +package com.niu.recharge.controller.api; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.core.common.domain.Result; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.service.api.IRechargeOrderService; +import com.niu.recharge.service.api.IRechargeService; +import com.niu.recharge.service.api.param.RechargeOrderSearchParam; +import com.niu.recharge.service.api.vo.RechargeOrderInfoVo; +import com.niu.recharge.service.api.vo.RechargeOrderListVo; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("api/recharge") +public class RechargeController { + + @Resource + IRechargeOrderService rechargeOrderService; + + @Resource + IRechargeService rechargeService; + + /** + * 充值订单创建 + * + * @param param + * @return + */ + @PostMapping("/recharge") + public Result create(@Validated @RequestBody RechargeOrderCreateParam param) { + return Result.success(rechargeOrderService.create(param)); + } + + /** + * 订单列表 + * + * @param + * @return + */ + @GetMapping("/recharge") + public Result> list(PageParam pageParam, RechargeOrderSearchParam searchParam) { + return Result.success(rechargeOrderService.list(pageParam, searchParam)); + } + + /** + * 订单详情 + * + * @param orderId + * @return + */ + @GetMapping("/recharge/{order_id}") + public Result detail(@PathVariable("order_id") Integer orderId) { + return Result.success(rechargeOrderService.detail(orderId)); + } + + @GetMapping("/package") + public Result getRechargeLists() { + return Result.success(rechargeService.getRechargeLists()); + } + + @GetMapping("/config") + public Result getRechargeConfig() { + return Result.success(rechargeService.getRechargeConfig()); + } + + @GetMapping("/status") + public Result>> status() { + return Result.success(OrderStatusEnum.getMap()); + } + + @GetMapping("/recharge/status") + public Result>> rechargeStatus() { + return Result.success(OrderStatusEnum.getMap()); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/控制器.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/controller/控制器.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/Recharge.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/Recharge.java new file mode 100644 index 00000000..75f7cd21 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/Recharge.java @@ -0,0 +1,88 @@ +package com.niu.recharge.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 会员充值套餐实体 + */ +@Data +public class Recharge implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "recharge_id", type = IdType.AUTO) + private Integer rechargeId; + + /** + * 站点ID + */ + private Integer siteId; + + /** + * 套餐名称 + */ + private String rechargeName; + + /** + * 面值 + */ + private BigDecimal faceValue; + + /** + * 价格 + */ + private BigDecimal buyPrice; + + /** + * 赠送积分 + */ + private Integer point; + + /** + * 赠送成长值 + */ + private Integer growth; + + /** + * 赠送优惠券ID + */ + private String couponId; + + /** + * 发放数量 + */ + private Integer saleNum; + + /** + * 排序号 + */ + private Integer sort; + + /** + * 状态(0关闭 1开启) + */ + private Integer status; + + /** + * 创建时间 + */ + private Long createTime; + + /** + * 修改时间 + */ + private Long updateTime; + + private String giftJson; + +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrder.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrder.java new file mode 100644 index 00000000..26f80522 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrder.java @@ -0,0 +1,81 @@ +package com.niu.recharge.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="order_id", type= IdType.AUTO) + private Integer orderId; + + /** 站点id */ + private Integer siteId; + + /** 订单编号 */ + private String orderNo; + + /** 订单来源 */ + private String orderFrom; + + /** 订单类型 */ + private String orderType; + + /** 支付流水号 */ + private String outTradeNo; + + /** 订单状态 */ + private Integer orderStatus; + + /** 退款状态 */ + private Integer refundStatus; + + /** 会员id */ + private Integer memberId; + + /** 会员ip */ + private String ip; + + /** 会员留言信息 */ + private String memberMessage; + + /** 订单项目金额 */ + private BigDecimal orderItemMoney; + + /** 订单优惠金额 */ + private BigDecimal orderDiscountMoney; + + /** 订单金额 */ + private BigDecimal orderMoney; + + /** 创建时间 */ + private Long createTime; + + /** 订单支付时间 */ + private Long payTime; + + /** 订单关闭时间 */ + private Long closeTime; + + /** 是否删除(针对后台) */ + private Integer isDelete; + + /** 是否允许退款 */ + private Integer isEnableRefund; + + /** 商家留言 */ + private String remark; + + /** 发票id,0表示不开发票 */ + private Integer invoiceId; + + /** 关闭原因 */ + private String closeReason; + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderItem.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderItem.java new file mode 100644 index 00000000..69ee5d3e --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderItem.java @@ -0,0 +1,60 @@ +package com.niu.recharge.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeOrderItem implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="order_item_id", type= IdType.AUTO) + private Integer orderItemId; + + /** 订单id */ + private Integer orderId; + + /** 站点id */ + private Integer siteId; + + /** 会员id */ + private Integer memberId; + + /** 项目id */ + private Integer itemId; + + /** 项目类型 */ + private String itemType; + + /** 项目名称 */ + private String itemName; + + /** 项目图片 */ + private String itemImage; + + /** 项目单价 */ + private BigDecimal price; + + /** 购买数量 */ + private Integer num; + + /** 项目总价 */ + private BigDecimal itemMoney; + + /** 是否退款 */ + private Integer isRefund; + + /** 退款编号 */ + private String refundNo; + + /** 退款状态 */ + private Integer refundStatus; + + /** 创建时间 */ + private Long createTime; + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderItemRefund.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderItemRefund.java new file mode 100644 index 00000000..8e7d20c8 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderItemRefund.java @@ -0,0 +1,56 @@ +package com.niu.recharge.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeOrderItemRefund implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="refund_id", type= IdType.AUTO) + private Integer refundId; + + private Integer orderItemId; + + /** 订单id */ + private Integer orderId; + + /** 订单编号 */ + private String orderNo; + + /** 退款编号 */ + private String refundNo; + + /** 站点id */ + private Integer siteId; + + /** 会员id */ + private Integer memberId; + + /** 退货数量 */ + private Integer num; + + /** 总退款 */ + private BigDecimal money; + + /** 退款状态 */ + private Integer status; + + /** 创建时间 */ + private Long createTime; + + /** 审核时间 */ + private Long auditTime; + + /** 转账时间 */ + private Long transferTime; + + /** 项目类型 */ + private String itemType; + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderLog.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderLog.java new file mode 100644 index 00000000..b8ce3253 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/RechargeOrderLog.java @@ -0,0 +1,44 @@ +package com.niu.recharge.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeOrderLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + private Integer id; + + private Integer orderId; + + /** 站点id */ + private Integer siteId; + + /** 操作内容 */ + private String action; + + /** 操作人id */ + private Integer uid; + + /** 操作人名称 */ + private String nickName; + + /** 订单状态 */ + private Integer orderStatus; + + /** 操作类型1买家2卖家 3 系统任务 */ + private Integer actionWay; + + /** 订单状态名称,操作后 */ + private String orderStatusName; + + /** 操作时间 */ + private Long actionTime; + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/实体.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/entity/实体.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/OrderStatusEnum.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/OrderStatusEnum.java new file mode 100644 index 00000000..7fbd0f0c --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/OrderStatusEnum.java @@ -0,0 +1,47 @@ +package com.niu.recharge.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum OrderStatusEnum { + WAIT_PAY("待支付", 0), + FINISH("已完成", 1), + CLOSE("已关闭", -1); + + private final String name; + + private final Integer status; + + public static Map> getMap() { + Map> map = new HashMap<>(); + for(OrderStatusEnum item : OrderStatusEnum.values()) + { + Map mapItem = new HashMap<>(); + mapItem.put("name", item.getName()); + mapItem.put("status", item.getStatus()); + map.put(item.getStatus(), mapItem); + } + return map; + } + + /** + * 通过status获取当前名称 + * @param status + * @return + */ + public static String getNameByStatus(Integer status){ + for(OrderStatusEnum item : OrderStatusEnum.values()) + { + if(item.getStatus().equals(status)) + { + return item.getName(); + } + } + return ""; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/PackageGiftEnum.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/PackageGiftEnum.java new file mode 100644 index 00000000..b49a1a9f --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/PackageGiftEnum.java @@ -0,0 +1,29 @@ +package com.niu.recharge.enums; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.niu.core.common.utils.json.JsonModuleLoader; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class PackageGiftEnum { + public static JSONArray getPackageGiftEnum() { + JSONObject entries = JsonModuleLoader.build().mergeResultElement("recharge/package_gift.json"); + log.info("======PackageGiftEnum entries: {}", entries.toString()); + + JSONArray jsonArray = new JSONArray(); + entries.forEach((k, v) -> { + JSONObject value = JSONUtil.parseObj(v); + JSONObject jsonObject = new JSONObject(); + jsonObject.set("key", k); + jsonObject.set("name", value.get("name")); + jsonObject.set("value", value.get("value")); + jsonObject.set("edit_component", value.get("edit_component")); + jsonObject.set("detail_component", value.get("detail_component")); + jsonObject.set("sort", value.get("sort")); + jsonArray.add(jsonObject); + }); + return jsonArray; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/RefundStatusEnum.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/RefundStatusEnum.java new file mode 100644 index 00000000..e3e8a3bb --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/RefundStatusEnum.java @@ -0,0 +1,47 @@ +package com.niu.recharge.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum RefundStatusEnum { + REFUNDING("退款中", 1), + REFUND_FAIL("退款失败", -1), + REFUND_COMPLETED("退款完成", 2); + + private final String name; + + private final Integer status; + + public static Map> getMap() { + Map> map = new HashMap<>(); + for(RefundStatusEnum item : RefundStatusEnum.values()) + { + Map mapItem = new HashMap<>(); + mapItem.put("name", item.getName()); + mapItem.put("status", item.getStatus()); + map.put(item.getStatus(), mapItem); + } + return map; + } + + /** + * 通过status获取当前名称 + * @param status + * @return + */ + public static String getNameByStatus(Integer status){ + for(RefundStatusEnum item : RefundStatusEnum.values()) + { + if(item.getStatus().equals(status)) + { + return item.getName(); + } + } + return ""; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/枚举.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/enums/枚举.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/RechargeAfterEvent.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/RechargeAfterEvent.java new file mode 100644 index 00000000..7b280af9 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/RechargeAfterEvent.java @@ -0,0 +1,18 @@ +package com.niu.recharge.event; + +import com.niu.core.common.component.context.event.Event; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@Accessors(chain = true) +@NoArgsConstructor +public class RechargeAfterEvent extends Event { + private Integer memberId; + private String giftJson; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/RechargeGiftContentEvent.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/RechargeGiftContentEvent.java new file mode 100644 index 00000000..46cfd1cd --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/RechargeGiftContentEvent.java @@ -0,0 +1,12 @@ +package com.niu.recharge.event; + +import com.niu.core.common.component.context.event.Event; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RechargeGiftContentEvent extends Event { + private String key; + private Object value; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/事件类.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/event/事件类.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/job/任务调度.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/job/任务调度.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/PayCreateListener.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/PayCreateListener.java new file mode 100644 index 00000000..0607c21f --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/PayCreateListener.java @@ -0,0 +1,41 @@ +package com.niu.recharge.listener; + +import com.niu.core.common.annotation.EventCallback; +import com.niu.core.common.exception.CommonException; +import com.niu.core.event.pay.PayCreateEventDefiner; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.service.core.ICoreRechargeOrderService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 一对多的事件监听,且有返回值 + */ +@EventCallback("recharge") +@Component +public class PayCreateListener extends PayCreateEventDefiner { + + @Resource + ICoreRechargeOrderService coreRechargeOrderService; + + @Override + public PayCreateEventDefiner.PayCreateEventResult handleCallback(PayCreateEventDefiner.PayCreateEvent event) { + if (!event.getTradeType().equals("recharge")) return null; + + RechargeOrder order = coreRechargeOrderService.orderInfo(event.getTradeId()); + if (!order.getOrderStatus().equals(OrderStatusEnum.WAIT_PAY.getStatus())) throw new CommonException("只有待支付的订单可以支付"); + + PayCreateEventDefiner.PayCreateEventResult result = new PayCreateEventDefiner.PayCreateEventResult(); + result.setTradeId(event.getTradeId()); + result.setTradeType(event.getTradeType()); + result.setMainType("member"); + result.setMainId(order.getMemberId()); + result.setMoney(order.getOrderMoney()); + result.setBody("充值订单"); + + return result; + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/PaySuccessListener.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/PaySuccessListener.java new file mode 100644 index 00000000..cc3c686b --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/PaySuccessListener.java @@ -0,0 +1,30 @@ +package com.niu.recharge.listener; + +import cn.hutool.json.JSONUtil; +import com.niu.core.common.annotation.EventListen; +import com.niu.core.common.component.context.listener.AbstractListener; +import com.niu.core.event.pay.PaySuccessEvent; +import com.niu.recharge.service.core.ICoreRechargeOrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 支付成功 + */ +@Slf4j +@EventListen("recharge") +@Component +public class PaySuccessListener extends AbstractListener { + + @Resource + ICoreRechargeOrderService coreRechargeOrderService; + + public void handleEvent(PaySuccessEvent event) { + log.info("PaySuccessListener handleEvent: {}", JSONUtil.toJsonStr(event)); + if (event.getTradeType().equals("recharge")) { + coreRechargeOrderService.pay(event.getPay()); + } + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/RefundSuccessListener.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/RefundSuccessListener.java new file mode 100644 index 00000000..86257e4a --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/RefundSuccessListener.java @@ -0,0 +1,26 @@ +package com.niu.recharge.listener; + +import com.niu.core.common.annotation.EventListen; +import com.niu.core.common.component.context.listener.AbstractListener; +import com.niu.core.event.refund.RefundSuccessEvent; +import com.niu.recharge.service.core.ICoreRechargeRefundService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 支付成功 + */ +@EventListen("recharge") +@Component +public class RefundSuccessListener extends AbstractListener { + + @Resource + ICoreRechargeRefundService coreRechargeRefundService; + + public void handleEvent(RefundSuccessEvent event) { + if (event.getTradeType().equals("recharge")) { + coreRechargeRefundService.refundComplete(event.getRefund().getRefundNo()); + } + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/监听.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/listener/监听.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeMapper.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeMapper.java new file mode 100644 index 00000000..5fd8e451 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeMapper.java @@ -0,0 +1,12 @@ +package com.niu.recharge.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.niu.recharge.entity.Recharge; +import org.apache.ibatis.annotations.Mapper; + +/** + * 会员充值套餐 Mapper + */ +@Mapper +public interface RechargeMapper extends MPJBaseMapper { +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderItemMapper.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderItemMapper.java new file mode 100644 index 00000000..f88dd192 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderItemMapper.java @@ -0,0 +1,9 @@ +package com.niu.recharge.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.niu.recharge.entity.RechargeOrderItem; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface RechargeOrderItemMapper extends BaseMapper { +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderItemRefundMapper.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderItemRefundMapper.java new file mode 100644 index 00000000..3818f1e3 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderItemRefundMapper.java @@ -0,0 +1,10 @@ +package com.niu.recharge.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.yulichang.base.MPJBaseMapper; +import com.niu.recharge.entity.RechargeOrderItemRefund; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface RechargeOrderItemRefundMapper extends BaseMapper { +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderLogMapper.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderLogMapper.java new file mode 100644 index 00000000..53fe1bda --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderLogMapper.java @@ -0,0 +1,10 @@ +package com.niu.recharge.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.yulichang.base.MPJBaseMapper; +import com.niu.recharge.entity.RechargeOrderLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface RechargeOrderLogMapper extends BaseMapper { +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderMapper.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderMapper.java new file mode 100644 index 00000000..496403ef --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/RechargeOrderMapper.java @@ -0,0 +1,9 @@ +package com.niu.recharge.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.niu.recharge.entity.RechargeOrder; +import org.mapstruct.Mapper; + +@Mapper +public interface RechargeOrderMapper extends BaseMapper { +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/映射.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/mapper/映射.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeOrderService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeOrderService.java new file mode 100644 index 00000000..483191fd --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeOrderService.java @@ -0,0 +1,32 @@ +package com.niu.recharge.service.admin; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.recharge.service.admin.param.RechargeOrderSearchParam; +import com.niu.recharge.service.admin.vo.RechargeOrderInfoVo; +import com.niu.recharge.service.admin.vo.RechargeOrderListVo; +import com.niu.recharge.service.admin.vo.RechargeOrderStatVo; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; + +public interface IRechargeOrderService { + + /** + * 订单列表 + * + * @param pageParam + * @param searchParam + * @return + */ + PageResult list(PageParam pageParam, RechargeOrderSearchParam searchParam); + + /** + * 充值订单详情 + * + * @param orderId + * @return + */ + RechargeOrderInfoVo detail(Integer orderId); + + RechargeOrderStatVo stat(RechargeOrderSearchParam searchParam); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeRefundService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeRefundService.java new file mode 100644 index 00000000..d9d7735e --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeRefundService.java @@ -0,0 +1,33 @@ +package com.niu.recharge.service.admin; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.recharge.service.admin.param.RechargeRefundSearchParam; +import com.niu.recharge.service.admin.vo.*; + +public interface IRechargeRefundService { + + /** + * 退款列表 + * + * @param pageParam + * @param searchParam + * @return + */ + PageResult list(PageParam pageParam, RechargeRefundSearchParam searchParam); + + /** + * 发起退款 + */ + void refund(Integer orderId); + + /** + * 充值退款详情 + * + * @param refundId + * @return + */ + RechargeRefundInfoVo detail(Integer refundId); + + RechargeRefundStatVo stat(RechargeRefundSearchParam searchParam); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeService.java new file mode 100644 index 00000000..f87413af --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/IRechargeService.java @@ -0,0 +1,35 @@ +package com.niu.recharge.service.admin; + +import cn.hutool.json.JSONArray; +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.recharge.service.admin.param.RechargeEditSortParam; +import com.niu.recharge.service.admin.param.RechargeModifyStatusParam; +import com.niu.recharge.service.admin.param.RechargePageParam; +import com.niu.recharge.service.admin.param.RechargeParam; +import com.niu.recharge.service.admin.vo.RechargeInitVo; +import com.niu.recharge.service.admin.vo.RechargeListVo; +import com.niu.recharge.service.core.param.RechargeSetConfigParam; +import com.niu.recharge.service.core.vo.RechargeConfigVo; + +public interface IRechargeService { + void setRechargeConfig(RechargeSetConfigParam param); + + RechargeConfigVo getRechargeConfig(); + + PageResult getPage(PageParam pageParam, RechargePageParam param); + + void add(RechargeParam param); + + void edit(Integer id, RechargeParam param); + + RechargeInitVo getInit(Integer rechargeId); + + void del(Integer id); + + void modifyStatus(RechargeModifyStatusParam param); + + void editSort(RechargeEditSortParam param); + + JSONArray getPackageGiftDict(); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeOrderServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeOrderServiceImpl.java new file mode 100644 index 00000000..746c9022 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeOrderServiceImpl.java @@ -0,0 +1,149 @@ +package com.niu.recharge.service.admin.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.core.common.utils.RequestUtils; +import com.niu.core.common.utils.mapper.QueryMapperUtils; +import com.niu.core.entity.member.Member; +import com.niu.core.mapper.member.MemberMapper; +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.enums.RefundStatusEnum; +import com.niu.recharge.mapper.RechargeOrderItemMapper; +import com.niu.recharge.mapper.RechargeOrderMapper; +import com.niu.recharge.service.admin.IRechargeOrderService; +import com.niu.recharge.service.admin.param.RechargeOrderSearchParam; +import com.niu.recharge.service.admin.vo.RechargeOrderInfoVo; +import com.niu.recharge.service.admin.vo.RechargeOrderListVo; +import com.niu.recharge.service.admin.vo.RechargeOrderStatVo; +import com.niu.recharge.service.core.ICoreRechargeOrderService; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.LinkedList; +import java.util.List; + +@Service +public class RechargeOrderServiceImpl implements IRechargeOrderService { + + @Resource + ICoreRechargeOrderService coreRechargeOrderService; + + @Resource + RechargeOrderMapper rechargeOrderMapper; + + @Resource + RechargeOrderItemMapper rechargeOrderItemMapper; + + @Resource + MemberMapper memberMapper; + + /** + * 订单列表 + * + * @param pageParam + * @param searchParam + * @return + */ + @Override + public PageResult list(PageParam pageParam, RechargeOrderSearchParam searchParam) { + Integer page = pageParam.getPage(); + Integer limit = pageParam.getLimit(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()); + queryWrapper.orderByDesc("create_time"); + + if (ObjectUtil.isNotEmpty(searchParam.getOrderNo())) queryWrapper.eq("order_no", searchParam.getOrderNo()); + if (ObjectUtil.isNotEmpty(searchParam.getOrderStatus())) queryWrapper.eq("order_status", searchParam.getOrderStatus()); + if (ObjectUtil.isNotEmpty(searchParam.getOrderFrom())) queryWrapper.eq("order_from", searchParam.getOrderFrom()); + if (ObjectUtil.isNotEmpty(searchParam.getCreateTime())) QueryMapperUtils.buildByTime(queryWrapper, "create_time", searchParam.getCreateTime()); + if (ObjectUtil.isNotEmpty(searchParam.getPayTime())) QueryMapperUtils.buildByTime(queryWrapper, "pay_time", searchParam.getPayTime()); + if (searchParam.getStartMoney() > 0) queryWrapper.ge("order_money", searchParam.getStartMoney()); + if (searchParam.getEndMoney() > 0) queryWrapper.le("order_money", searchParam.getEndMoney()); + + IPage iPage = rechargeOrderMapper.selectPage(new Page(page, limit), queryWrapper); + List list = new LinkedList<>(); + for(RechargeOrder item : iPage.getRecords()) { + RechargeOrderListVo vo = new RechargeOrderListVo(); + BeanUtils.copyProperties(item, vo); + MemberBriefInfoVo memberInfo = new MemberBriefInfoVo(); + Member member = memberMapper.selectOne(new QueryWrapper().eq("member_id", item.getMemberId())); + if (member != null) BeanUtils.copyProperties(member, memberInfo); + vo.setMember(memberInfo); + List itemList = rechargeOrderItemMapper.selectList(new QueryWrapper().eq("order_id", item.getOrderId())); + vo.setItem(itemList); + list.add(vo); + } + + return PageResult.build(page, limit, iPage.getTotal()).setData(list); + } + + /** + * 充值订单详情 + * + * @param orderId + * @return + */ + @Override + public RechargeOrderInfoVo detail(Integer orderId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", orderId); + queryWrapper.eq("site_id", RequestUtils.siteId()); + + RechargeOrder order = rechargeOrderMapper.selectOne(queryWrapper); + if (order == null) return null; + + RechargeOrderInfoVo vo = new RechargeOrderInfoVo(); + BeanUtils.copyProperties(order, vo); + + MemberBriefInfoVo memberInfo = new MemberBriefInfoVo(); + Member member = memberMapper.selectOne(new QueryWrapper().eq("member_id", order.getMemberId())); + if (member != null) BeanUtils.copyProperties(member, memberInfo); + vo.setMember(memberInfo); + + List itemList = rechargeOrderItemMapper.selectList(new QueryWrapper().eq("order_id", order.getOrderId())); + vo.setItem(itemList); + + return vo; + } + + /** + * 统计 + * + * @param searchParam + * @return + */ + public RechargeOrderStatVo stat(RechargeOrderSearchParam searchParam) { + RechargeOrderStatVo vo = new RechargeOrderStatVo(); + + QueryWrapper rechargeMoneyQueryWrapper = new QueryWrapper(); + rechargeMoneyQueryWrapper.select("SUM(order_money) AS order_money"); + rechargeMoneyQueryWrapper.eq("site_id", RequestUtils.siteId()); + rechargeMoneyQueryWrapper.eq("order_status", OrderStatusEnum.FINISH.getStatus()); + if (searchParam.getMemberId() > 0) rechargeMoneyQueryWrapper.eq("member_id", searchParam.getMemberId()); + rechargeMoneyQueryWrapper.last("limit 1"); + RechargeOrder rechargeMoney = rechargeOrderMapper.selectOne(rechargeMoneyQueryWrapper); + if (rechargeMoney != null) vo.setRechargeMoney(rechargeMoney.getOrderMoney()); + + QueryWrapper refundMoneyQueryWrapper = new QueryWrapper(); + refundMoneyQueryWrapper.select("SUM(order_money) AS order_money"); + refundMoneyQueryWrapper.eq("site_id", RequestUtils.siteId()); + refundMoneyQueryWrapper.eq("refund_status", RefundStatusEnum.REFUND_COMPLETED.getStatus()); + if (searchParam.getMemberId() > 0) refundMoneyQueryWrapper.eq("member_id", searchParam.getMemberId()); + refundMoneyQueryWrapper.last("limit 1"); + RechargeOrder refundeMoney = rechargeOrderMapper.selectOne(refundMoneyQueryWrapper); + if (refundeMoney != null) vo.setRechargeRefundMoney(refundeMoney.getOrderMoney()); + + return vo; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeRefundServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeRefundServiceImpl.java new file mode 100644 index 00000000..4738dfcc --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeRefundServiceImpl.java @@ -0,0 +1,162 @@ +package com.niu.recharge.service.admin.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.core.common.utils.RequestUtils; +import com.niu.core.common.utils.mapper.QueryMapperUtils; +import com.niu.core.entity.member.Member; +import com.niu.core.mapper.member.MemberMapper; +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.entity.RechargeOrderItemRefund; +import com.niu.recharge.enums.RefundStatusEnum; +import com.niu.recharge.mapper.RechargeOrderItemMapper; +import com.niu.recharge.mapper.RechargeOrderItemRefundMapper; +import com.niu.recharge.service.admin.IRechargeRefundService; +import com.niu.recharge.service.admin.param.RechargeRefundSearchParam; +import com.niu.recharge.service.admin.vo.*; +import com.niu.recharge.service.core.ICoreRechargeRefundService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.LinkedList; +import java.util.List; + +@Service +public class RechargeRefundServiceImpl implements IRechargeRefundService { + + @Resource + RechargeOrderItemRefundMapper rechargeOrderItemRefundMapper; + + @Resource + RechargeOrderItemMapper rechargeOrderItemMapper; + + @Resource + MemberMapper memberMapper; + + @Resource + ICoreRechargeRefundService coreRechargeRefundService; + + /** + * 订单列表 + * + * @param pageParam + * @param searchParam + * @return + */ + @Override + public PageResult list(PageParam pageParam, RechargeRefundSearchParam searchParam) { + Integer page = pageParam.getPage(); + Integer limit = pageParam.getLimit(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()); + queryWrapper.orderByDesc("create_time"); + + if (ObjectUtil.isNotEmpty(searchParam.getOrderNo())) queryWrapper.eq("order_no", searchParam.getOrderNo()); + if (ObjectUtil.isNotEmpty(searchParam.getOrderStatus())) queryWrapper.eq("order_status", searchParam.getOrderStatus()); + if (ObjectUtil.isNotEmpty(searchParam.getOrderFrom())) queryWrapper.eq("order_from", searchParam.getOrderFrom()); + if (ObjectUtil.isNotEmpty(searchParam.getCreateTime())) QueryMapperUtils.buildByTime(queryWrapper, "create_time", searchParam.getCreateTime()); + if (ObjectUtil.isNotEmpty(searchParam.getPayTime())) QueryMapperUtils.buildByTime(queryWrapper, "pay_time", searchParam.getPayTime()); + if (searchParam.getStartMoney() > 0) queryWrapper.ge("order_money", searchParam.getStartMoney()); + if (searchParam.getEndMoney() > 0) queryWrapper.le("order_money", searchParam.getEndMoney()); + + IPage iPage = rechargeOrderItemRefundMapper.selectPage(new Page(page, limit), queryWrapper); + List list = new LinkedList<>(); + for(RechargeOrderItemRefund item : iPage.getRecords()) { + RechargeRefundListVo vo = new RechargeRefundListVo(); + BeanUtils.copyProperties(item, vo); + MemberBriefInfoVo memberInfo = new MemberBriefInfoVo(); + Member member = memberMapper.selectOne(new QueryWrapper().eq("member_id", item.getMemberId())); + if (member != null) BeanUtils.copyProperties(member, memberInfo); + vo.setMember(memberInfo); + RechargeOrderItem orderItem = rechargeOrderItemMapper.selectOne(new QueryWrapper().eq("order_item_id", item.getOrderItemId())); + vo.setItem(orderItem); + list.add(vo); + } + + return PageResult.build(page, limit, iPage.getTotal()).setData(list); + } + + /** + * 发起退款 + * + */ + public void refund(Integer orderId) { + coreRechargeRefundService.create(orderId); + } + + /** + * 充值订单详情 + * + * @param refundId + * @return + */ + @Override + public RechargeRefundInfoVo detail(Integer refundId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("refund_id", refundId); + queryWrapper.eq("site_id", RequestUtils.siteId()); + + RechargeOrderItemRefund refund = rechargeOrderItemRefundMapper.selectOne(queryWrapper); + if (refund == null) return null; + + RechargeRefundInfoVo vo = new RechargeRefundInfoVo(); + BeanUtils.copyProperties(refund, vo); + + MemberBriefInfoVo memberInfo = new MemberBriefInfoVo(); + Member member = memberMapper.selectOne(new QueryWrapper().eq("member_id", refund.getMemberId())); + if (member != null) BeanUtils.copyProperties(member, memberInfo); + vo.setMember(memberInfo); + + RechargeOrderItem item = rechargeOrderItemMapper.selectOne(new QueryWrapper().eq("order_item_id", refund.getOrderItemId())); + vo.setItem(item); + + return vo; + } + + /** + * 统计 + * + * @param searchParam + * @return + */ + public RechargeRefundStatVo stat(RechargeRefundSearchParam searchParam) { + RechargeRefundStatVo vo = new RechargeRefundStatVo(); + + QueryWrapper allMoneyQueryWrapper = new QueryWrapper(); + allMoneyQueryWrapper.select("SUM(money) AS money"); + allMoneyQueryWrapper.eq("site_id", RequestUtils.siteId()); + allMoneyQueryWrapper.ne("status", RefundStatusEnum.REFUND_FAIL.getStatus()); + if (searchParam.getMemberId() > 0) allMoneyQueryWrapper.eq("member_id", searchParam.getMemberId()); + allMoneyQueryWrapper.last("limit 1"); + RechargeOrderItemRefund allMoney = rechargeOrderItemRefundMapper.selectOne(allMoneyQueryWrapper); + + RechargeRefundStatVo.Stat all = new RechargeRefundStatVo.Stat(); + all.setKey("all"); + all.setName("累计退款金额(元)"); + if (allMoney != null)all.setMoney(allMoney.getMoney()); + vo.setAll(all); + + QueryWrapper haveMoneyQueryWrapper = new QueryWrapper(); + haveMoneyQueryWrapper.select("SUM(money) AS money"); + haveMoneyQueryWrapper.eq("site_id", RequestUtils.siteId()); + haveMoneyQueryWrapper.eq("status", RefundStatusEnum.REFUNDING.getStatus()); + if (searchParam.getMemberId() > 0) haveMoneyQueryWrapper.eq("member_id", searchParam.getMemberId()); + haveMoneyQueryWrapper.last("limit 1"); + RechargeOrderItemRefund haveMoney = rechargeOrderItemRefundMapper.selectOne(haveMoneyQueryWrapper); + + RechargeRefundStatVo.Stat have = new RechargeRefundStatVo.Stat(); + have.setKey("have"); + have.setName("退款中金额(元)"); + if (haveMoney != null) have.setMoney(haveMoney.getMoney()); + vo.setHave(have); + + return vo; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeServiceImpl.java new file mode 100644 index 00000000..d3f5b936 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/impl/RechargeServiceImpl.java @@ -0,0 +1,233 @@ +package com.niu.recharge.service.admin.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.core.common.utils.RequestUtils; +import com.niu.core.common.utils.date.DateUtils; +import com.niu.core.common.utils.mapper.QueryMapperUtils; +import com.niu.core.service.core.app.helper.EventAndSubscribeOfPublisher; +import com.niu.recharge.entity.Recharge; +import com.niu.recharge.enums.PackageGiftEnum; +import com.niu.recharge.event.RechargeGiftContentEvent; +import com.niu.recharge.mapper.RechargeMapper; +import com.niu.recharge.service.admin.IRechargeService; +import com.niu.recharge.service.admin.param.RechargeEditSortParam; +import com.niu.recharge.service.admin.param.RechargeModifyStatusParam; +import com.niu.recharge.service.admin.param.RechargePageParam; +import com.niu.recharge.service.admin.param.RechargeParam; +import com.niu.recharge.service.admin.vo.RechargeInitVo; +import com.niu.recharge.service.admin.vo.RechargeListVo; +import com.niu.recharge.service.core.ICoreRechargeConfigService; +import com.niu.recharge.service.core.param.RechargeSetConfigParam; +import com.niu.recharge.service.core.vo.RechargeConfigVo; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.Map; + +@Service +@RequiredArgsConstructor +public class RechargeServiceImpl implements IRechargeService { + private final RechargeMapper rechargeMapper; + private final ICoreRechargeConfigService coreRechargeConfigService; + + @Override + public void setRechargeConfig(RechargeSetConfigParam param) { + coreRechargeConfigService.setRechargeConfig(RequestUtils.siteId(), param); + } + + @Override + public RechargeConfigVo getRechargeConfig() { + return coreRechargeConfigService.getRechargeConfig(RequestUtils.siteId()); + } + + @Override + public PageResult getPage(PageParam pageParam, RechargePageParam param) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()) + .orderByDesc("create_time"); + + if (ObjectUtil.isNotEmpty(param.getRechargeName())) { + queryWrapper.like("recharge_name", param.getRechargeName()); + } + + if (ObjectUtil.isNotEmpty(param.getCreateTime())) { + QueryMapperUtils.buildByTime(queryWrapper, "create_time", param.getCreateTime()); + } + + Page iPage = rechargeMapper.selectPage(new Page<>(pageParam.getPage(), pageParam.getLimit()), queryWrapper); + if (ObjectUtil.isEmpty(iPage.getRecords())) { + return PageResult.build(iPage, Collections.emptyList()); + } + + IPage voPage = iPage.convert(recharge -> { + RechargeListVo vo = new RechargeListVo(); + BeanUtils.copyProperties(recharge, vo); + vo.setCreateTime(DateUtils.timestampToString(recharge.getCreateTime())); + + JSONObject gift = JSONUtil.parseObj(recharge.getGiftJson()); + for (Map.Entry entry : gift.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + RechargeGiftContentEvent event = new RechargeGiftContentEvent(); + event.setKey(key); + event.setValue(JSONUtil.parseObj(value).get("value")); + vo.setGiftContent(EventAndSubscribeOfPublisher.publishAndCallback(event)); + } + + return vo; + }); + + return PageResult.build(voPage); + } + + @Override + public void add(RechargeParam param) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()) + .eq("face_value", param.getFaceValue()); + long count = rechargeMapper.selectCount(queryWrapper); + if (count > 0) { + throw new RuntimeException("充值金额不能重复"); + } + + param.setPoint(0); + param.setGrowth(0); + int growth = param.getPoint(); + int point = param.getPoint(); + JSONObject giftJson = JSONUtil.parseObj(param.getGiftJson()); + if (ObjectUtil.isNotEmpty(giftJson)) { + if (giftJson.containsKey("growth")) { + Integer value = giftJson.getJSONObject("growth").getInt("value"); + if (ObjectUtil.isNotEmpty(value)) { + growth = value; + giftJson.remove("growth"); + } + } + + if (giftJson.containsKey("point")) { + Integer value = giftJson.getJSONObject("point").getInt("value"); + if (ObjectUtil.isNotEmpty(point)) { + point = value; + giftJson.remove("point"); + } + } + } + + Recharge recharge = new Recharge(); + BeanUtils.copyProperties(param, recharge); + recharge.setSiteId(RequestUtils.siteId()); + recharge.setPoint(point); + recharge.setGrowth(growth); + recharge.setCreateTime(System.currentTimeMillis() / 1000); + recharge.setGiftJson(giftJson.toString()); + + rechargeMapper.insert(recharge); + } + + @Override + public void edit(Integer id, RechargeParam param) { + Recharge recharge = rechargeMapper.selectById(id); + if (ObjectUtil.isEmpty(recharge)) { + throw new RuntimeException("充值套餐不存在"); + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()) + .ne("recharge_id", id) + .eq("face_value", param.getFaceValue()); + Long count = rechargeMapper.selectCount(queryWrapper); + if (count > 0) { + throw new RuntimeException("充值金额不能重复"); + } + + param.setPoint(0); + param.setGrowth(0); + int growth = param.getPoint(); + JSONObject giftJson = JSONUtil.parseObj(param.getGiftJson()); + Integer value = giftJson.getJSONObject("growth").getInt("value"); + if (ObjectUtil.isNotEmpty(value)) { + growth = value; + giftJson.remove("growth"); + } + + int point = param.getPoint(); + value = giftJson.getJSONObject("point").getInt("value"); + if (ObjectUtil.isNotEmpty(point)) { + point = value; + giftJson.remove("point"); + } + + BeanUtils.copyProperties(param, recharge); + recharge.setGrowth(growth); + recharge.setPoint(point); + recharge.setGiftJson(giftJson.toString()); + recharge.setUpdateTime(System.currentTimeMillis() / 1000); + rechargeMapper.updateById(recharge); + } + + @Override + public RechargeInitVo getInit(Integer rechargeId) { + if (rechargeId == null) { + return new RechargeInitVo(); + } + + Recharge recharge = rechargeMapper.selectById(rechargeId); + RechargeInitVo vo = new RechargeInitVo(); + BeanUtils.copyProperties(recharge, vo); + vo.setCreateTime(DateUtils.timestampToString(recharge.getCreateTime())); + vo.setGiftJson(JSONUtil.parseObj(recharge.getGiftJson())); + vo.setStatusName(ObjectUtil.equal(recharge.getStatus(), 1) ? "开启" : "关闭"); + if (ObjectUtil.isNotEmpty(vo)) { + if (ObjectUtil.isNotEmpty(vo.getPoint())) { + vo.getGiftJson().set("point", Map.of("value", vo.getPoint())); + } + if (ObjectUtil.isNotEmpty(vo.getGrowth())) { + vo.getGiftJson().set("growth", Map.of("value", vo.getGrowth())); + } + } + + return vo; + } + + @Override + public void del(Integer id) { + rechargeMapper.deleteById(id); + } + + @Override + public void modifyStatus(RechargeModifyStatusParam param) { + Recharge recharge = rechargeMapper.selectById(param.getRechargeId()); + if (ObjectUtil.isEmpty(recharge)) { + throw new RuntimeException("充值套餐不存在"); + } + + recharge.setStatus(param.getStatus()); + rechargeMapper.updateById(recharge); + } + + @Override + public void editSort(RechargeEditSortParam param) { + Recharge recharge = rechargeMapper.selectById(param.getRechargeId()); + if (ObjectUtil.isEmpty(recharge)) { + throw new RuntimeException("充值套餐不存在"); + } + recharge.setSort(param.getSort()); + rechargeMapper.updateById(recharge); + } + + @Override + public JSONArray getPackageGiftDict() { + return PackageGiftEnum.getPackageGiftEnum(); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeEditSortParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeEditSortParam.java new file mode 100644 index 00000000..84ebbd16 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeEditSortParam.java @@ -0,0 +1,9 @@ +package com.niu.recharge.service.admin.param; + +import lombok.Data; + +@Data +public class RechargeEditSortParam { + private Integer rechargeId; + private Integer sort; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeModifyStatusParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeModifyStatusParam.java new file mode 100644 index 00000000..c4db0015 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeModifyStatusParam.java @@ -0,0 +1,9 @@ +package com.niu.recharge.service.admin.param; + +import lombok.Data; + +@Data +public class RechargeModifyStatusParam { + private Integer rechargeId; + private Integer status; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeOrderSearchParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeOrderSearchParam.java new file mode 100644 index 00000000..7c2bc02e --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeOrderSearchParam.java @@ -0,0 +1,27 @@ +package com.niu.recharge.service.admin.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class RechargeOrderSearchParam implements Serializable { + + private static final long serialVersionUID = 1L; + + private String orderNo; + + private Integer orderStatus; + + private String orderFrom; + + private String[] createTime; + + private String[] payTime; + + private float startMoney; + + private float endMoney; + + private Integer memberId = 0; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargePageParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargePageParam.java new file mode 100644 index 00000000..f70c3aa9 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargePageParam.java @@ -0,0 +1,9 @@ +package com.niu.recharge.service.admin.param; + +import lombok.Data; + +@Data +public class RechargePageParam { + private String rechargeName; + private String[] createTime; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeParam.java new file mode 100644 index 00000000..fb697f67 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeParam.java @@ -0,0 +1,23 @@ +package com.niu.recharge.service.admin.param; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RechargeParam { + private Integer rechargeId; + private Integer siteId; + private String rechargeName; + private BigDecimal faceValue; + private BigDecimal buyPrice; + private Integer point; + private Integer growth; + private String couponId; + private Integer saleNum; + private Integer sort; + private Integer status; + private String createTime; + private String updateTime; + private Object giftJson; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeRefundSearchParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeRefundSearchParam.java new file mode 100644 index 00000000..26e6294f --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/param/RechargeRefundSearchParam.java @@ -0,0 +1,27 @@ +package com.niu.recharge.service.admin.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class RechargeRefundSearchParam implements Serializable { + + private static final long serialVersionUID = 1L; + + private String orderNo; + + private Integer orderStatus; + + private String orderFrom; + + private String[] createTime; + + private String[] payTime; + + private float startMoney; + + private float endMoney; + + private Integer memberId = 0; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeInitVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeInitVo.java new file mode 100644 index 00000000..e448b0d8 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeInitVo.java @@ -0,0 +1,26 @@ +package com.niu.recharge.service.admin.vo; + +import cn.hutool.json.JSONObject; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@NoArgsConstructor +@Data +public class RechargeInitVo { + private Integer rechargeId; + private Integer siteId; + private String rechargeName; + private BigDecimal faceValue; + private BigDecimal buyPrice; + private Integer point; + private Integer growth; + private String couponId; + private Integer saleNum; + private Integer sort; + private Integer status; + private String createTime; + private JSONObject giftJson; + private String statusName; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeListVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeListVo.java new file mode 100644 index 00000000..2372a697 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeListVo.java @@ -0,0 +1,26 @@ +package com.niu.recharge.service.admin.vo; + +import cn.hutool.json.JSONObject; +import com.niu.recharge.service.core.vo.RechargeGiftContentVo; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeListVo { + private Integer rechargeId; + private Integer siteId; + private String rechargeName; + private BigDecimal faceValue; + private BigDecimal buyPrice; + private Integer point; + private Integer growth; + private String couponId; + private Integer saleNum; + private Integer sort; + private Integer status; + private String createTime; + private JSONObject giftJson; + private List giftContent; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderInfoVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderInfoVo.java new file mode 100644 index 00000000..601eb868 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderInfoVo.java @@ -0,0 +1,55 @@ +package com.niu.recharge.service.admin.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import com.niu.core.enums.common.ChannelEnum; +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeOrderInfoVo extends RechargeOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + private List item; + + private Status orderStatusInfo; + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal orderMoney; + + @JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class) + private Long createTime; + + @JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class) + private Long payTime; + + private MemberBriefInfoVo member; + + private String orderFromName; + + @Data + private static class Status { + private String name; + + private Integer status; + } + + public Status getOrderStatusInfo() { + Status status = new Status(); + status.setStatus(this.getOrderStatus()); + status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus())); + return status; + } + + public String getOrderFromName() { + return ChannelEnum.getNameByCode(this.getOrderFrom()); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderListVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderListVo.java new file mode 100644 index 00000000..d7bdd317 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderListVo.java @@ -0,0 +1,55 @@ +package com.niu.recharge.service.admin.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import com.niu.core.enums.common.ChannelEnum; +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeOrderListVo extends RechargeOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + private List item; + + private Status orderStatusInfo; + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal orderMoney; + + @JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class) + private Long createTime; + + @JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class) + private Long payTime; + + private MemberBriefInfoVo member; + + private String orderFromName; + + @Data + private static class Status { + private String name; + + private Integer status; + } + + public Status getOrderStatusInfo() { + Status status = new Status(); + status.setStatus(this.getOrderStatus()); + status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus())); + return status; + } + + public String getOrderFromName() { + return ChannelEnum.getNameByCode(this.getOrderFrom()); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderStatVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderStatVo.java new file mode 100644 index 00000000..c69da845 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeOrderStatVo.java @@ -0,0 +1,26 @@ +package com.niu.recharge.service.admin.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import com.niu.core.enums.common.ChannelEnum; +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeOrderStatVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal rechargeMoney = new BigDecimal(0); + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal rechargeRefundMoney = new BigDecimal(0); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundInfoVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundInfoVo.java new file mode 100644 index 00000000..20431a89 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundInfoVo.java @@ -0,0 +1,28 @@ +package com.niu.recharge.service.admin.vo; + +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.entity.RechargeOrderItemRefund; +import com.niu.recharge.enums.RefundStatusEnum; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class RechargeRefundInfoVo extends RechargeOrderItemRefund implements Serializable { + + private static final long serialVersionUID = 1L; + + private RechargeOrderItem item; + + private String statusName; + + private MemberBriefInfoVo member; + + private String orderFromName; + + public String getStatusName() { + return RefundStatusEnum.getNameByStatus(this.getStatus()); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundListVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundListVo.java new file mode 100644 index 00000000..e6729484 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundListVo.java @@ -0,0 +1,35 @@ +package com.niu.recharge.service.admin.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import com.niu.core.enums.common.ChannelEnum; +import com.niu.core.service.admin.member.vo.MemberBriefInfoVo; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.entity.RechargeOrderItemRefund; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.enums.RefundStatusEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeRefundListVo extends RechargeOrderItemRefund implements Serializable { + + private static final long serialVersionUID = 1L; + + private RechargeOrderItem item; + + private String statusName; + + private MemberBriefInfoVo member; + + private String orderFromName; + + public String getStatusName() { + return RefundStatusEnum.getNameByStatus(this.getStatus()); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundStatVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundStatVo.java new file mode 100644 index 00000000..a31f0558 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/admin/vo/RechargeRefundStatVo.java @@ -0,0 +1,28 @@ +package com.niu.recharge.service.admin.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeRefundStatVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Stat all; + + private Stat have; + + @Data + public static class Stat { + private String name; + + private String key; + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal money = new BigDecimal(0); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/IRechargeOrderService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/IRechargeOrderService.java new file mode 100644 index 00000000..86e7ec62 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/IRechargeOrderService.java @@ -0,0 +1,36 @@ +package com.niu.recharge.service.api; + +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.recharge.service.api.param.RechargeOrderSearchParam; +import com.niu.recharge.service.api.vo.RechargeOrderInfoVo; +import com.niu.recharge.service.api.vo.RechargeOrderListVo; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; + +public interface IRechargeOrderService { + + /** + * 创建订单 + * + * @param param + */ + RechargeOrderCreateVo create(RechargeOrderCreateParam param); + + /** + * 订单列表 + * + * @param pageParam + * @param searchParam + * @return + */ + PageResult list(PageParam pageParam, RechargeOrderSearchParam searchParam); + + /** + * 充值订单详情 + * + * @param orderId + * @return + */ + RechargeOrderInfoVo detail(Integer orderId); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/IRechargeService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/IRechargeService.java new file mode 100644 index 00000000..18760da1 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/IRechargeService.java @@ -0,0 +1,12 @@ +package com.niu.recharge.service.api; + +import com.niu.recharge.service.api.vo.RechargeListVo; +import com.niu.recharge.service.core.vo.RechargeConfigVo; + +import java.util.List; + +public interface IRechargeService { + RechargeConfigVo getRechargeConfig(); + + List getRechargeLists(); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/impl/RechargeOrderServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/impl/RechargeOrderServiceImpl.java new file mode 100644 index 00000000..2d6f53ac --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/impl/RechargeOrderServiceImpl.java @@ -0,0 +1,112 @@ +package com.niu.recharge.service.api.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.niu.core.common.domain.PageParam; +import com.niu.core.common.domain.PageResult; +import com.niu.core.common.utils.RequestUtils; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.mapper.RechargeOrderItemMapper; +import com.niu.recharge.mapper.RechargeOrderMapper; +import com.niu.recharge.service.api.IRechargeOrderService; +import com.niu.recharge.service.api.param.RechargeOrderSearchParam; +import com.niu.recharge.service.api.vo.RechargeOrderInfoVo; +import com.niu.recharge.service.api.vo.RechargeOrderListVo; +import com.niu.recharge.service.core.ICoreRechargeOrderService; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.LinkedList; +import java.util.List; + +@Service +public class RechargeOrderServiceImpl implements IRechargeOrderService { + + @Resource + ICoreRechargeOrderService coreRechargeOrderService; + + @Resource + RechargeOrderMapper rechargeOrderMapper; + + @Resource + RechargeOrderItemMapper rechargeOrderItemMapper; + + /** + * 创建订单 + * + * @param param + * @return + */ + @Override + public RechargeOrderCreateVo create(RechargeOrderCreateParam param) { + param.setMemberId(RequestUtils.memberId()); + param.setSiteId(RequestUtils.siteId()); + return coreRechargeOrderService.create(param); + } + + /** + * 订单列表 + * + * @param pageParam + * @param searchParam + * @return + */ + @Override + public PageResult list(PageParam pageParam, RechargeOrderSearchParam searchParam) { + Integer page = pageParam.getPage(); + Integer limit = pageParam.getLimit(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()); + queryWrapper.eq("member_id", RequestUtils.memberId()); + queryWrapper.orderByDesc("create_time"); + + if (ObjectUtil.isNotEmpty(searchParam.getOrderStatus())) + queryWrapper.like("order_status", searchParam.getOrderStatus()); + + IPage iPage = rechargeOrderMapper.selectPage(new Page(page, limit), queryWrapper); + List list = new LinkedList<>(); + for (RechargeOrder item : iPage.getRecords()) { + RechargeOrderListVo vo = new RechargeOrderListVo(); + BeanUtils.copyProperties(item, vo); + List itemList = rechargeOrderItemMapper.selectList(new QueryWrapper().eq("order_id", item.getOrderId())); + vo.setItem(itemList); + list.add(vo); + } + + return PageResult.build(page, limit, iPage.getTotal()).setData(list); + } + + /** + * 充值订单详情 + * + * @param orderId + * @return + */ + @Override + public RechargeOrderInfoVo detail(Integer orderId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", orderId); + queryWrapper.eq("site_id", RequestUtils.siteId()); + queryWrapper.eq("member_id", RequestUtils.memberId()); + + RechargeOrder order = rechargeOrderMapper.selectOne(queryWrapper); + if (order == null) return null; + + RechargeOrderInfoVo vo = new RechargeOrderInfoVo(); + BeanUtils.copyProperties(order, vo); + + List itemList = rechargeOrderItemMapper.selectList(new QueryWrapper().eq("order_id", order.getOrderId())); + vo.setItem(itemList); + + return vo; + } + + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/impl/RechargeServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/impl/RechargeServiceImpl.java new file mode 100644 index 00000000..7dfb8fdb --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/impl/RechargeServiceImpl.java @@ -0,0 +1,70 @@ +package com.niu.recharge.service.api.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.niu.core.common.utils.RequestUtils; +import com.niu.core.service.core.app.helper.EventAndSubscribeOfPublisher; +import com.niu.recharge.entity.Recharge; +import com.niu.recharge.event.RechargeGiftContentEvent; +import com.niu.recharge.mapper.RechargeMapper; +import com.niu.recharge.service.api.IRechargeService; +import com.niu.recharge.service.api.vo.RechargeListVo; +import com.niu.recharge.service.core.ICoreRechargeConfigService; +import com.niu.recharge.service.core.vo.RechargeConfigVo; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class RechargeServiceImpl implements IRechargeService { + private final RechargeMapper rechargeMapper; + private final ICoreRechargeConfigService coreRechargeConfigService; + + @Override + public RechargeConfigVo getRechargeConfig() { + return coreRechargeConfigService.getRechargeConfig(RequestUtils.siteId()); + } + + @Override + public List getRechargeLists() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("site_id", RequestUtils.siteId()) + .eq("status", 1) + .orderByDesc("sort") + .orderByDesc("create_time"); + List list = rechargeMapper.selectList(queryWrapper); + if (ObjectUtil.isEmpty(list)) { + return Collections.emptyList(); + } + + return list.stream() + .map(r -> { + RechargeListVo vo = new RechargeListVo(); + BeanUtils.copyProperties(r, vo); + vo.setBuyPrice(Optional.ofNullable(r.getBuyPrice()).map(BigDecimal::toString).orElse("")); + vo.setFaceValue(Optional.ofNullable(r.getFaceValue()).map(BigDecimal::toString).orElse("")); + + JSONObject gift = JSONUtil.parseObj(r.getGiftJson()); + for (Map.Entry entry : gift.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + RechargeGiftContentEvent event = new RechargeGiftContentEvent(); + event.setKey(key); + event.setValue(JSONUtil.parseObj(value).get("value")); + vo.setGiftContent(EventAndSubscribeOfPublisher.publishAndCallback(event)); + } + return vo; + }) + .toList(); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/param/RechargeOrderSearchParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/param/RechargeOrderSearchParam.java new file mode 100644 index 00000000..4b77d013 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/param/RechargeOrderSearchParam.java @@ -0,0 +1,13 @@ +package com.niu.recharge.service.api.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class RechargeOrderSearchParam implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer orderStatus; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeListInfo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeListInfo.java new file mode 100644 index 00000000..9cb68372 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeListInfo.java @@ -0,0 +1,23 @@ +package com.niu.recharge.service.api.vo; + +import cn.hutool.json.JSONObject; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RechargeListInfo { + private Integer rechargeId; + private Integer siteId; + private String rechargeName; + private BigDecimal faceValue; + private BigDecimal buyPrice; + private Integer point; + private Integer growth; + private String couponId; + private Integer saleNum; + private Integer sort; + private Integer status; + private String createTime; + private JSONObject giftJson; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeListVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeListVo.java new file mode 100644 index 00000000..2fcb9c5b --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeListVo.java @@ -0,0 +1,26 @@ +package com.niu.recharge.service.api.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@NoArgsConstructor +@Data +public class RechargeListVo { + @JsonProperty("recharge_id") + private Integer rechargeId; + @JsonProperty("recharge_name") + private String rechargeName; + @JsonProperty("face_value") + private String faceValue; + @JsonProperty("buy_price") + private String buyPrice; + @JsonProperty("point") + private Integer point; + @JsonProperty("growth") + private Integer growth; + @JsonProperty("gift_content") + private List giftContent; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeOrderInfoVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeOrderInfoVo.java new file mode 100644 index 00000000..b287d313 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeOrderInfoVo.java @@ -0,0 +1,43 @@ +package com.niu.recharge.service.api.vo; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeOrderInfoVo extends RechargeOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + private List item; + + private Status orderStatusInfo; + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal orderMoney; + + @JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class) + private Long createTime; + + @Data + private static class Status { + private String name; + + private Integer status; + } + + public Status getOrderStatusInfo() { + Status status = new Status(); + status.setStatus(this.getOrderStatus()); + status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus())); + return status; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeOrderListVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeOrderListVo.java new file mode 100644 index 00000000..5fb308f8 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/api/vo/RechargeOrderListVo.java @@ -0,0 +1,42 @@ +package com.niu.recharge.service.api.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.niu.core.common.domain.BeanJsonSerializer; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class RechargeOrderListVo extends RechargeOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + private List item; + + private Status orderStatusInfo; + + @JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class) + private BigDecimal orderMoney; + + @JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class) + private Long createTime; + + @Data + private static class Status { + private String name; + + private Integer status; + } + + public Status getOrderStatusInfo() { + Status status = new Status(); + status.setStatus(this.getOrderStatus()); + status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus())); + return status; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeConfigService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeConfigService.java new file mode 100644 index 00000000..3a405f16 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeConfigService.java @@ -0,0 +1,10 @@ +package com.niu.recharge.service.core; + +import com.niu.recharge.service.core.param.RechargeSetConfigParam; +import com.niu.recharge.service.core.vo.RechargeConfigVo; + +public interface ICoreRechargeConfigService { + void setRechargeConfig(Integer siteId, RechargeSetConfigParam param); + + RechargeConfigVo getRechargeConfig(Integer siteId); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeOrderService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeOrderService.java new file mode 100644 index 00000000..e1cc23c4 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeOrderService.java @@ -0,0 +1,17 @@ +package com.niu.recharge.service.core; + +import com.niu.core.entity.pay.Pay; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; + +public interface ICoreRechargeOrderService { + + RechargeOrderCreateVo create(RechargeOrderCreateParam param); + + void close(Integer orderId); + + RechargeOrder orderInfo(Integer orderId); + + void pay(Pay pay); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeRefundService.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeRefundService.java new file mode 100644 index 00000000..371525b8 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/ICoreRechargeRefundService.java @@ -0,0 +1,13 @@ +package com.niu.recharge.service.core; + +public interface ICoreRechargeRefundService { + + /** + * 发起退款 + * + * @param orderId + */ + void create(Integer orderId); + + void refundComplete(String refundNo); +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeConfigServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeConfigServiceImpl.java new file mode 100644 index 00000000..6aea68f3 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeConfigServiceImpl.java @@ -0,0 +1,42 @@ +package com.niu.recharge.service.core.impl; + +import cn.hutool.json.JSONUtil; +import com.niu.core.service.core.sys.ICoreConfigService; +import com.niu.core.service.core.sys.vo.CoreSysConfigVo; +import com.niu.recharge.service.core.ICoreRechargeConfigService; +import com.niu.recharge.service.core.model.RechargeConfigModel; +import com.niu.recharge.service.core.param.RechargeSetConfigParam; +import com.niu.recharge.service.core.vo.RechargeConfigVo; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class CoreRechargeConfigServiceImpl implements ICoreRechargeConfigService { + private static final String KEY = "RECHARGE_CONFIG"; + + private final ICoreConfigService coreConfigService; + + @Override + public void setRechargeConfig(Integer siteId, RechargeSetConfigParam param) { + RechargeConfigModel model = new RechargeConfigModel(); + BeanUtils.copyProperties(param, model); + coreConfigService.setConfig(siteId, KEY, JSONUtil.parseObj(model)); + } + + @Override + public RechargeConfigVo getRechargeConfig(Integer siteId) { + CoreSysConfigVo config = coreConfigService.getConfig(siteId, KEY); + + RechargeConfigVo bean = JSONUtil.toBean(config.getValue(), RechargeConfigVo.class); + bean.setIsUse(Optional.ofNullable(bean.getIsUse()).orElse(1)); + bean.setRechargeExplain(Optional.ofNullable(bean.getRechargeExplain()).orElse("充值后帐户的金额不能提现,可用于商城消费使用账户充值出现问题可联系商城客服")); + bean.setMinPrice(Optional.ofNullable(bean.getMinPrice()).orElse(new BigDecimal("0.01"))); + bean.setCloseLength(Optional.ofNullable(bean.getCloseLength()).orElse(10)); + return bean; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeOrderServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeOrderServiceImpl.java new file mode 100644 index 00000000..a412583c --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeOrderServiceImpl.java @@ -0,0 +1,219 @@ +package com.niu.recharge.service.core.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.niu.core.common.exception.CommonException; +import com.niu.core.common.utils.NoticeUtils; +import com.niu.core.common.utils.RequestUtils; +import com.niu.core.entity.pay.Pay; +import com.niu.core.enums.member.AccountTypeEnum; +import com.niu.core.service.core.app.helper.EventAndSubscribeOfPublisher; +import com.niu.core.service.core.member.ICoreMemberAccountService; +import com.niu.core.service.core.pay.ICorePayService; +import com.niu.recharge.entity.Recharge; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.event.RechargeAfterEvent; +import com.niu.recharge.mapper.RechargeMapper; +import com.niu.recharge.mapper.RechargeOrderItemMapper; +import com.niu.recharge.mapper.RechargeOrderMapper; +import com.niu.recharge.service.core.ICoreRechargeOrderService; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class CoreRechargeOrderServiceImpl implements ICoreRechargeOrderService { + + @Resource + RechargeOrderMapper rechargeOrderMapper; + + @Resource + RechargeOrderItemMapper rechargeOrderItemMapper; + + @Resource + ICorePayService corePayService; + + @Resource + ICoreMemberAccountService coreMemberAccountService; + + @Resource + RechargeMapper rechargeMapper; + + /** + * @param param + * @return + */ + @Override + @Transactional + public RechargeOrderCreateVo create(RechargeOrderCreateParam param) { + try { + RechargeOrderCreateVo vo = new RechargeOrderCreateVo(); + vo.setTradeType("recharge"); + + RechargeOrder order = new RechargeOrder(); + order.setOrderNo(createOrderNo()); + order.setOrderStatus(OrderStatusEnum.WAIT_PAY.getStatus()); + order.setOrderFrom(RequestUtils.channel()); + order.setSiteId(param.getSiteId()); + order.setMemberId(param.getMemberId()); + order.setIp(RequestUtils.ip()); + order.setMemberMessage(ObjectUtil.defaultIfNull(param.getMemberMessage(), "")); + order.setOrderItemMoney(param.getRechargeMoney()); + order.setOrderMoney(param.getRechargeMoney()); + order.setOrderDiscountMoney(BigDecimal.ZERO); + order.setOrderType(vo.getTradeType()); + order.setCreateTime(System.currentTimeMillis() / 1000); + this.rechargeOrderMapper.insert(order); + + RechargeOrderItem orderItem = new RechargeOrderItem(); + orderItem.setOrderId(order.getOrderId()); + orderItem.setItemId(param.getRechargeId()); + orderItem.setSiteId(param.getSiteId()); + orderItem.setMemberId(param.getMemberId()); + orderItem.setItemType(vo.getTradeType()); + orderItem.setItemName("会员充值"); + orderItem.setItemImage("/static/image/icon.png"); + orderItem.setNum(1); + orderItem.setPrice(param.getRechargeMoney()); + orderItem.setItemMoney(param.getRechargeMoney()); + orderItem.setCreateTime(System.currentTimeMillis() / 1000); + this.rechargeOrderItemMapper.insert(orderItem); + + vo.setTradeId(order.getOrderId()); + return vo; + } catch (Exception e) { + throw new CommonException(e.getMessage()); + } + } + + /** + * 创建交易号 + * + * @return + */ + private String createOrderNo() { + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + return DateUtil.format(DateUtil.date(System.currentTimeMillis()), "yyyyMMdd") + id; + } + + /** + * 关闭支付 + * + * @param orderId + */ + @Override + @Transactional + public void close(Integer orderId) { + RechargeOrder order = orderInfo(orderId); + if (order == null) return; + + if (order.getOrderStatus().equals(OrderStatusEnum.WAIT_PAY.getStatus())) { + corePayService.closeByTrade(order.getSiteId(), "recharge", orderId); + } + + order.setOrderStatus(OrderStatusEnum.CLOSE.getStatus()); + this.rechargeOrderMapper.updateById(order); + } + + /** + * 获取订单信息 + * + * @param orderId + * @return + */ + public RechargeOrder orderInfo(Integer orderId) { + return this.rechargeOrderMapper.selectById(orderId); + } + + /** + * 订单支付 + * + * @param pay + */ + @Transactional + public void pay(Pay pay) { + try { + RechargeOrder order = this.orderInfo(pay.getTradeId()); + log.info("pay order:{}", JSONUtil.toJsonStr(order)); + if (order == null) throw new CommonException("订单不存在"); + + order.setPayTime(System.currentTimeMillis() / 1000); + order.setOrderStatus(OrderStatusEnum.FINISH.getStatus()); + order.setIsEnableRefund(1); + order.setOutTradeNo(pay.getOutTradeNo()); + this.rechargeOrderMapper.updateById(order); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", pay.getTradeId()); + List items = rechargeOrderItemMapper.selectList(queryWrapper); + if (ObjectUtil.isEmpty(items)) { + return; + } + + Recharge recharge = rechargeMapper.selectById(items.get(0).getItemId()); + if (ObjectUtil.isEmpty(recharge)) { + return; + } + + recharge.setSaleNum(recharge.getSaleNum() + 1); + rechargeMapper.updateById(recharge); + + // 增加会员余额 + if (recharge.getFaceValue().compareTo(BigDecimal.ZERO) > 0) { + coreMemberAccountService.addLog(order.getSiteId(), order.getMemberId(), AccountTypeEnum.BALANCE.getType(), recharge.getFaceValue().doubleValue(), "recharge", "会员充值", order.getOrderId().toString()); + } + + // 会员充值发放积分开始 + if (recharge.getPoint() > 0) { + coreMemberAccountService.addLog(order.getSiteId(), order.getMemberId(), AccountTypeEnum.POINT.getType(), recharge.getPoint().doubleValue(), "recharge", "会员充值", order.getOrderId().toString()); + } + + // 会员充值发放成长值开始 + if (recharge.getGrowth() > 0) { + coreMemberAccountService.addLog(order.getSiteId(), order.getMemberId(), AccountTypeEnum.GROWTH.getType(), recharge.getGrowth().doubleValue(), "recharge", "会员充值", order.getOrderId().toString()); + } + + if (ObjectUtil.isNotEmpty(recharge.getGiftJson())) { + EventAndSubscribeOfPublisher.publishAll(new RechargeAfterEvent(order.getMemberId(), recharge.getGiftJson()).setSiteId(order.getSiteId())); + } + + // 发送消息 + sendRechargeSuccessNotice(order); + log.info("pay success"); + } catch (Exception e) { + log.info("pay fail: {}", e.getMessage()); + System.out.println("充值订单支付异常"); + throw new CommonException(e.getMessage()); + } + } + + /** + * 发送充值成功消息 + * + * @param order + */ + @Async + protected void sendRechargeSuccessNotice(RechargeOrder order) { + Map param = new HashMap(); + param.put("order", order); + NoticeUtils.send(order.getSiteId(), "recharge_success", param); + } + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeRefundServiceImpl.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeRefundServiceImpl.java new file mode 100644 index 00000000..cc544718 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/impl/CoreRechargeRefundServiceImpl.java @@ -0,0 +1,155 @@ +package com.niu.recharge.service.core.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.niu.core.common.exception.CommonException; +import com.niu.core.common.utils.RequestUtils; +import com.niu.core.entity.member.Member; +import com.niu.core.enums.member.AccountTypeEnum; +import com.niu.core.mapper.member.MemberMapper; +import com.niu.core.service.core.member.ICoreMemberAccountService; +import com.niu.core.service.core.pay.ICorePayService; +import com.niu.core.service.core.pay.ICoreRefundService; +import com.niu.core.service.core.pay.param.PayRefundCreateParam; +import com.niu.core.service.core.pay.param.PayRefundTransferParam; +import com.niu.recharge.entity.RechargeOrder; +import com.niu.recharge.entity.RechargeOrderItem; +import com.niu.recharge.entity.RechargeOrderItemRefund; +import com.niu.recharge.enums.OrderStatusEnum; +import com.niu.recharge.enums.RefundStatusEnum; +import com.niu.recharge.mapper.RechargeOrderItemMapper; +import com.niu.recharge.mapper.RechargeOrderItemRefundMapper; +import com.niu.recharge.mapper.RechargeOrderMapper; +import com.niu.recharge.service.core.ICoreRechargeOrderService; +import com.niu.recharge.service.core.ICoreRechargeRefundService; +import com.niu.recharge.service.core.param.RechargeOrderCreateParam; +import com.niu.recharge.service.core.vo.RechargeOrderCreateVo; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +@Service +public class CoreRechargeRefundServiceImpl implements ICoreRechargeRefundService { + + @Resource + RechargeOrderItemMapper rechargeOrderItemMapper; + + @Resource + RechargeOrderMapper rechargeOrderMapper; + + @Resource + MemberMapper memberMapper; + + @Resource + ICoreRefundService coreRefundService; + + @Resource + RechargeOrderItemRefundMapper rechargeOrderItemRefundMapper; + + @Resource + ICoreRechargeOrderService coreRechargeOrderService; + + @Resource + ICoreMemberAccountService coreMemberAccountService; + + /** + * + * @return + */ + @Override + @Transactional + public void create(Integer orderId) { + RechargeOrder order = rechargeOrderMapper.selectOne(new QueryWrapper().eq("order_id", orderId)); + if (order == null) throw new CommonException("订单不存在"); + if (!order.getIsEnableRefund().equals(1)) throw new CommonException("该订单不允许退款"); + if (!order.getOrderStatus().equals(OrderStatusEnum.FINISH.getStatus())) throw new CommonException("订单尚未支付不能进行退款"); + + RechargeOrderItem orderItem = rechargeOrderItemMapper.selectOne(new QueryWrapper().eq("order_id", orderId)); + if (!orderItem.getRefundStatus().equals(0)) throw new CommonException("订单已申请退款"); + + Member member = memberMapper.selectOne(new QueryWrapper().select("balance").eq("member_id", order.getMemberId())); + if (member == null) throw new CommonException("会员不存在"); + if (member.equals(0)) throw new CommonException("会员账户金额为0不允许进行退款"); + + try { + BigDecimal money = member.getBalance().compareTo(order.getOrderMoney()) == 1 ? order.getOrderMoney() : member.getBalance(); + + // 创建支付单据 + PayRefundCreateParam refundParam = new PayRefundCreateParam(); + refundParam.setOutTradeNo(order.getOutTradeNo()); + refundParam.setSiteId(order.getSiteId()); + refundParam.setTradeType("recharge"); + refundParam.setTradeId(orderId.toString()); + refundParam.setMoney(money); + String refundNo = coreRefundService.create(refundParam); + + // 添加退款记录 + RechargeOrderItemRefund model = new RechargeOrderItemRefund(); + model.setRefundNo(refundNo); + model.setOrderId(orderId); + model.setOrderItemId(orderItem.getOrderItemId()); + model.setNum(orderItem.getNum()); + model.setMoney(money); + model.setItemType(orderItem.getItemType()); + model.setSiteId(order.getSiteId()); + model.setMemberId(order.getMemberId()); + model.setCreateTime(System.currentTimeMillis() / 1000); + model.setStatus(RefundStatusEnum.REFUNDING.getStatus()); + rechargeOrderItemRefundMapper.insert(model); + + order.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus()); + rechargeOrderMapper.updateById(order); + + orderItem.setRefundNo(refundNo); + orderItem.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus()); + rechargeOrderItemMapper.updateById(orderItem); + + this.refund(model); + } catch (Exception e) { + throw new CommonException(e.getMessage()); + } + } + + @Transactional + public void refund(RechargeOrderItemRefund refund) { + // 扣除账户 + coreMemberAccountService.addLog(refund.getSiteId(), refund.getMemberId(), AccountTypeEnum.BALANCE.getType(), refund.getMoney().negate().doubleValue(), "recharge_refund", "充值订单退款", refund.getOrderId().toString()); + + PayRefundTransferParam param = new PayRefundTransferParam(); + param.setSiteId(refund.getSiteId()); + param.setRefundNo(refund.getRefundNo()); + coreRefundService.refund(param); + } + + /** + * 退款完成 + * + * @param refundNo + */ + @Transactional + public void refundComplete(String refundNo) { + RechargeOrderItemRefund refund = rechargeOrderItemRefundMapper.selectOne(new QueryWrapper().eq("refund_no", refundNo)); + if (refund == null) return; + if (!refund.getStatus().equals(RefundStatusEnum.REFUNDING.getStatus())) return; + + refund.setStatus(RefundStatusEnum.REFUND_COMPLETED.getStatus()); + rechargeOrderItemRefundMapper.updateById(refund); + + RechargeOrder order = new RechargeOrder(); + order.setOrderId(refund.getOrderId()); + order.setRefundStatus(RefundStatusEnum.REFUND_COMPLETED.getStatus()); + rechargeOrderMapper.updateById(order); + + RechargeOrderItem orderItem = new RechargeOrderItem(); + orderItem.setOrderItemId(refund.getOrderItemId()); + orderItem.setRefundStatus(RefundStatusEnum.REFUND_COMPLETED.getStatus()); + rechargeOrderItemMapper.updateById(orderItem); + + coreRechargeOrderService.close(refund.getOrderId()); + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/model/RechargeConfigModel.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/model/RechargeConfigModel.java new file mode 100644 index 00000000..2a456bce --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/model/RechargeConfigModel.java @@ -0,0 +1,13 @@ +package com.niu.recharge.service.core.model; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RechargeConfigModel { + private Integer isUse; + private String rechargeExplain; + private BigDecimal minPrice; + private Integer closeLength; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/notice/driver/RechargeSuccess.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/notice/driver/RechargeSuccess.java new file mode 100644 index 00000000..5d91c5ff --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/notice/driver/RechargeSuccess.java @@ -0,0 +1,42 @@ +package com.niu.recharge.service.core.notice.driver; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.niu.core.common.loader.notice.BaseNotice; +import com.niu.core.common.loader.notice.NoticeDataVo; +import com.niu.core.common.component.context.SpringContext; +import com.niu.core.entity.member.Member; +import com.niu.core.mapper.member.MemberMapper; +import com.niu.recharge.entity.RechargeOrder; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class RechargeSuccess extends BaseNotice { + + public MemberMapper memberMapper() { + return SpringContext.bean(MemberMapper.class); + } + + public NoticeDataVo noticeData(Map vars) { + RechargeOrder order = (RechargeOrder) vars.get("order"); + + Member member = memberMapper().selectOne(new QueryWrapper().select("balance").eq("member_id", order.getMemberId())); + + Map param = new HashMap(); + param.put("balance", member.getBalance()); + param.put("price", order.getOrderMoney()); + param.put("trade_no", order.getOrderNo()); + param.put("time", DateUtil.date(order.getPayTime() * 1000)); + param.put("wechat_page", "/addon/recharge/pages/recharge_record_detail?id=" + order.getOrderId()); + param.put("weapp_page", "addon/recharge/pages/recharge_record_detail?id=" + order.getOrderId()); + + NoticeDataVo vo = new NoticeDataVo(); + vo.setMemberId(order.getMemberId()); + vo.setVars(param); + + return vo; + } +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/param/RechargeOrderCreateParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/param/RechargeOrderCreateParam.java new file mode 100644 index 00000000..f2d15732 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/param/RechargeOrderCreateParam.java @@ -0,0 +1,22 @@ +package com.niu.recharge.service.core.param; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeOrderCreateParam implements Serializable { + + private static final long serialVersionUID = 1L; + + private String memberMessage; + + private BigDecimal rechargeMoney; + + private Integer rechargeId; + + private Integer siteId; + + private Integer memberId; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/param/RechargeSetConfigParam.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/param/RechargeSetConfigParam.java new file mode 100644 index 00000000..09878039 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/param/RechargeSetConfigParam.java @@ -0,0 +1,13 @@ +package com.niu.recharge.service.core.param; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RechargeSetConfigParam { + private Integer isUse; + private String rechargeExplain; + private BigDecimal minPrice; + private Integer closeLength; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeConfigVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeConfigVo.java new file mode 100644 index 00000000..3487867a --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeConfigVo.java @@ -0,0 +1,13 @@ +package com.niu.recharge.service.core.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RechargeConfigVo { + private Integer isUse; + private String rechargeExplain; + private BigDecimal minPrice; + private Integer closeLength; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeGiftContentVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeGiftContentVo.java new file mode 100644 index 00000000..f19820c9 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeGiftContentVo.java @@ -0,0 +1,15 @@ +package com.niu.recharge.service.core.vo; + +import com.niu.core.common.component.context.event.EventResult; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class RechargeGiftContentVo extends EventResult { + private List detail; + private String info; + private String label; +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeOrderCreateVo.java b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeOrderCreateVo.java new file mode 100644 index 00000000..ed239bd7 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/core/vo/RechargeOrderCreateVo.java @@ -0,0 +1,17 @@ +package com.niu.recharge.service.core.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class RechargeOrderCreateVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private String tradeType; + + private Integer tradeId; + +} diff --git a/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/服务.md b/webroot/addon/recharge/java/src/main/java/com/niu/recharge/service/服务.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/resources/info.json b/webroot/addon/recharge/java/src/main/resources/info.json new file mode 100644 index 00000000..0b5f04ff --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/info.json @@ -0,0 +1,11 @@ +{ + "title": "会员充值", + "desc": "在线充值到会员账户", + "key": "recharge", + "version": "1.0.0", + "author": "niucloud", + "type": "addon", + "support_app": "", + "jar": "recharge.jar", + "mainClass": "com.niu.recharge.WebApplication" +} diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/config/系统运行配置.md b/webroot/addon/recharge/java/src/main/resources/recharge/config/系统运行配置.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/i18n/messages_en_US.properties b/webroot/addon/recharge/java/src/main/resources/recharge/i18n/messages_en_US.properties new file mode 100644 index 00000000..0872e4c1 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/i18n/messages_en_US.properties @@ -0,0 +1 @@ +shop.test=en_US.shopTest \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/i18n/messages_zh_CN.properties b/webroot/addon/recharge/java/src/main/resources/recharge/i18n/messages_zh_CN.properties new file mode 100644 index 00000000..fe5761ad --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/i18n/messages_zh_CN.properties @@ -0,0 +1,2 @@ +shop.test=zh_CN.shopTest +shop.name=\u5546\u57CE\u7CFB\u7EDF \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/i18n/国际化配置.md b/webroot/addon/recharge/java/src/main/resources/recharge/i18n/国际化配置.md new file mode 100644 index 00000000..e69de29b diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/account_change_type.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/account_change_type.json new file mode 100644 index 00000000..818c6933 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/account_change_type.json @@ -0,0 +1,26 @@ +{ + "point": { + "recharge_give": { + "name": "充值赠送", + "inc": 1, + "dec": 0 + }, + "recharge": { + "name": "余额充值", + "inc": 1, + "dec": 0 + } + }, + "balance": { + "recharge": { + "name": "余额充值", + "inc": 1, + "dec": 0 + }, + "recharge_refund": { + "name": "充值订单退款", + "inc": 0, + "dec": 1 + } + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/diy/compoents.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/diy/compoents.json new file mode 100644 index 00000000..23357f0a --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/diy/compoents.json @@ -0,0 +1,20 @@ +{ + "BASIC": { + "title": "基础组件", + "list": { + "Article": { + "title": "文章", + "icon": "iconfont iconwenzhangpc", + "path": "edit-article", + "support_page": [], + "uses": 0, + "sort": 10007, + "value": { + "sources": "initial", + "count": 8, + "articleIds": [] + } + } + } + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/diy/links.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/diy/links.json new file mode 100644 index 00000000..6da528fc --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/diy/links.json @@ -0,0 +1,19 @@ +{ + "RECHARGE_LINK": { + "title": "会员充值", + "name": "recharge_link", + "addon_info": { + "title": "会员充值", + "key": "recharge" + }, + "child_list": [ + { + "name": "RECHARGE_INDEX", + "title": "会员充值", + "url": "/addon/recharge/pages/recharge", + "is_share": 1, + "action": "" + } + ] + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/menu/admin.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/menu/admin.json new file mode 100644 index 00000000..6430aae3 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/menu/admin.json @@ -0,0 +1,6 @@ +{ + "menu": [ + ], + "delete": [ + ] +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/menu/site.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/menu/site.json new file mode 100644 index 00000000..1b0df915 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/menu/site.json @@ -0,0 +1,145 @@ +{ + "menu": [ + { + "menu_name": "会员充值", + "menu_short_name": "会员充值", + "menu_key": "recharge", + "parent_key": "", + "menu_type": 0, + "icon": "element Help", + "api_url": "", + "router_path": "", + "view_path": "", + "methods": "", + "sort": 100, + "status": 1, + "is_show": 1, + "children": [ + { + "menu_name": "充值设置", + "menu_short_name": "充值设置", + "menu_key": "recharge_package_config", + "parent_key": "recharge", + "menu_type": 1, + "icon": "iconfont iconchongzhidingdan", + "api_url": "", + "router_path": "recharge/package/config", + "view_path": "package/config", + "methods": "put", + "sort": 100, + "status": 1, + "is_show": 1 + }, + { + "menu_name": "充值套餐", + "menu_short_name": "充值套餐", + "menu_key": "recharge_package_list", + "parent_key": "recharge", + "menu_type": 1, + "icon": "iconfont iconchongzhidingdan", + "api_url": "recharge/package", + "router_path": "recharge/package/list", + "view_path": "package/list", + "methods": "get", + "sort": 100, + "status": 1, + "is_show": 1, + "children": [ + { + "menu_name": "修改状态(开启、关闭)", + "menu_short_name": "套餐关闭", + "menu_key": "recharge_package_close", + "parent_key": "recharge_package_list", + "menu_type": 2, + "icon": "", + "api_url": "recharge/package/status/", + "router_path": "", + "view_path": "", + "methods": "put", + "sort": 0, + "status": 1, + "is_show": 0 + }, + { + "menu_name": "套餐删除", + "menu_short_name": "套餐删除", + "menu_key": "recharge_package_delete", + "parent_key": "recharge_package_list", + "menu_type": 2, + "icon": "", + "api_url": "recharge/package/", + "router_path": "", + "view_path": "", + "methods": "delete", + "sort": 0, + "status": 1, + "is_show": 0 + } + ] + }, + { + "menu_name": "编辑套餐", + "menu_short_name": "编辑套餐", + "menu_key": "recharge_package_edit", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge_package/", + "router_path": "recharge/package/edit", + "view_path": "package/edit", + "methods": "put", + "sort": 0, + "status": 1, + "is_show": 0 + }, + { + "menu_name": "添加套餐", + "menu_short_name": "添加套餐", + "menu_key": "recharge_package_add", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge_package", + "router_path": "recharge/package/add", + "view_path": "package/edit", + "methods": "post", + "sort": 0, + "status": 1, + "is_show": 0 + }, + { + "menu_name": "订单列表", + "menu_short_name": "订单列表", + "menu_key": "recharge_order_list", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge/order", + "router_path": "recharge/order/list", + "view_path": "order/list", + "methods": "get", + "sort": 100, + "status": 1, + "is_show": 1 + }, + { + "menu_name": "订单详情", + "menu_short_name": "订单详情", + "menu_key": "recharge_order_detail", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge/order/", + "router_path": "recharge/order/detail", + "view_path": "order/detail", + "methods": "get", + "sort": 90, + "status": 1, + "is_show": 0 + } + ] + } + ], + "delete": [ + ] +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/notice.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/notice.json new file mode 100644 index 00000000..404abd2b --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/notice.json @@ -0,0 +1,17 @@ +{ + "recharge_success": { + "addon": "recharge", + "key": "recharge_success", + "receiver_type": 1, + "name": "充值成功通知", + "title": "会员充值成功后发送", + "async": true, + "variable": { + "price": "充值金额", + "balance": "充值后账户", + "time": "充值时间", + "trade_no": "交易单号" + }, + "driver": "com.niu.recharge.service.core.notice.driver.RechargeSuccess" + } + } \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/sms.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/sms.json new file mode 100644 index 00000000..4b212da0 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/sms.json @@ -0,0 +1,5 @@ +{ + "recharge_success": { + "content": "您充值金额¥{price}, 充值后金额¥{balance}" + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/weapp.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/weapp.json new file mode 100644 index 00000000..c0e0edb1 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/weapp.json @@ -0,0 +1,14 @@ +{ + "recharge_success": { + "tid": "30832", + "content": [ + ["交易单号", "{trade_no}", "character_string7"], + ["充值金额", "{price}", "amount2"], + ["账户余额", "{balance}", "amount8"], + ["充值时间", "{time}", "time4"] + ], + "kid_list": [7, 2, 8, 4], + "scene_desc": "充值后提醒", + "tips": "使用该消息请在小程序的服务类目中添加类目:一级类目:商业服务 二级类目:软件/建站/技术开发" + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/wechat.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/wechat.json new file mode 100644 index 00000000..7e70e2d2 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/notice/wechat.json @@ -0,0 +1,11 @@ +{ + "recharge_success": { + "temp_key": "52552", + "content": [ + [ "充值时间", "{time}", "time1" ], + [ "充值金额", "{price}", "amount3" ] + ], + "keyword_name_list": ["充值时间", "充值金额"], + "tips": "使用该消息请在公众号的服务类目中添加类目:一级类目:商业服务 二级类目:软件/建站/技术开发" + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/recharge/loader/recharge/package_gift.json b/webroot/addon/recharge/java/src/main/resources/recharge/loader/recharge/package_gift.json new file mode 100644 index 00000000..0c5fcbdd --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/recharge/loader/recharge/package_gift.json @@ -0,0 +1,16 @@ +{ + "point": { + "name": "赠送积分", + "value": 0, + "edit_component": "/src/addon/recharge/views/package/components/gift-points.vue", + "detail_component": "/src/addon/recharge/views/package/components/detail-points.vue", + "sort": 1 + }, + "growth": { + "name": "赠送成长值", + "value": 0, + "edit_component": "/src/addon/recharge/views/package/components/gift-growth.vue", + "detail_component": "/src/addon/recharge/views/package/components/detail-growth.vue", + "sort": 2 + } +} \ No newline at end of file diff --git a/webroot/addon/recharge/java/src/main/resources/sql/install.sql b/webroot/addon/recharge/java/src/main/resources/sql/install.sql new file mode 100644 index 00000000..ef62796c --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/sql/install.sql @@ -0,0 +1,84 @@ + +DROP TABLE IF EXISTS `{{prefix}}recharge_order`; +CREATE TABLE `{{prefix}}recharge_order` ( + `order_id` int(11) NOT NULL AUTO_INCREMENT, + `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', + `order_no` varchar(50) NOT NULL DEFAULT '' COMMENT '订单编号', + `order_from` varchar(55) NOT NULL DEFAULT '' COMMENT '订单来源', + `order_type` varchar(50) NOT NULL DEFAULT '' COMMENT '订单类型', + `out_trade_no` varchar(50) NOT NULL DEFAULT '' COMMENT '支付流水号', + `order_status` int(11) NOT NULL DEFAULT '0' COMMENT '订单状态', + `refund_status` int(11) NOT NULL DEFAULT '0' COMMENT '退款状态', + `member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id', + `ip` varchar(20) NOT NULL DEFAULT '' COMMENT '会员ip', + `member_message` varchar(50) NOT NULL DEFAULT '' COMMENT '会员留言信息', + `order_item_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单项目金额', + `order_discount_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单优惠金额', + `order_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单金额', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `pay_time` int(11) NOT NULL DEFAULT '0' COMMENT '订单支付时间', + `close_time` int(11) NOT NULL DEFAULT '0' COMMENT '订单关闭时间', + `is_delete` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除(针对后台)', + `is_enable_refund` int(11) NOT NULL DEFAULT '0' COMMENT '是否允许退款', + `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '商家留言', + `invoice_id` int(11) NOT NULL DEFAULT '0' COMMENT '发票id,0表示不开发票', + `close_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '关闭原因', + PRIMARY KEY (`order_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单表'; + + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item`; +CREATE TABLE `{{prefix}}recharge_order_item` ( + `order_item_id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id', + `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', + `member_id` int(11) NOT NULL DEFAULT '0' COMMENT '购买会员id', + `item_id` int(11) NOT NULL DEFAULT '0' COMMENT '项目id', + `item_type` varchar(255) NOT NULL DEFAULT '' COMMENT '项目类型', + `item_name` varchar(400) NOT NULL DEFAULT '' COMMENT '项目名称', + `item_image` varchar(2000) NOT NULL DEFAULT '' COMMENT '项目图片', + `price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '项目单价', + `num` decimal(10,3) NOT NULL DEFAULT 0.000 COMMENT '购买数量', + `item_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '项目总价', + `is_refund` int(11) NOT NULL DEFAULT '0' COMMENT '是否退款', + `refund_no` varchar(255) NOT NULL DEFAULT '' COMMENT '退款编号', + `refund_status` int(11) NOT NULL DEFAULT '0' COMMENT '退款状态', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + PRIMARY KEY (`order_item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单商品表'; + + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item_refund`; +CREATE TABLE `{{prefix}}recharge_order_item_refund` ( + `refund_id` int(11) NOT NULL AUTO_INCREMENT, + `order_item_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id', + `order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id', + `order_no` varchar(255) NOT NULL DEFAULT '' COMMENT '订单编号', + `refund_no` varchar(255) NOT NULL DEFAULT '0' COMMENT '退款单号', + `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', + `member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id', + `num` decimal(10,3) NOT NULL DEFAULT 0.000 COMMENT '退货数量', + `money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '总退款', + `status` int(11) NOT NULL DEFAULT '0' COMMENT '退款状态', + `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', + `audit_time` int(11) NOT NULL DEFAULT '0' COMMENT '审核时间', + `transfer_time` int(11) NOT NULL DEFAULT '0' COMMENT '转账时间', + `item_type` varchar(255) NOT NULL DEFAULT '' COMMENT '项目类型', + PRIMARY KEY (`refund_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单退款表'; + + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_log`; +CREATE TABLE `{{prefix}}recharge_order_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id', + `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id', + `action` varchar(255) NOT NULL DEFAULT '' COMMENT '操作内容', + `uid` int(11) NOT NULL DEFAULT '0' COMMENT '操作人id', + `nick_name` varchar(50) NOT NULL DEFAULT '' COMMENT '操作人名称', + `order_status` int(11) NOT NULL DEFAULT '0' COMMENT '订单状态,操作后', + `action_way` bigint(20) NOT NULL DEFAULT '2' COMMENT '操作类型1买家2卖家 3 系统任务', + `order_status_name` varchar(255) NOT NULL DEFAULT '' COMMENT '订单状态名称,操作后', + `action_time` int(11) NOT NULL DEFAULT '0' COMMENT '操作时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单操作记录表'; diff --git a/webroot/addon/recharge/java/src/main/resources/sql/uninstall.sql b/webroot/addon/recharge/java/src/main/resources/sql/uninstall.sql new file mode 100644 index 00000000..59c47ff9 --- /dev/null +++ b/webroot/addon/recharge/java/src/main/resources/sql/uninstall.sql @@ -0,0 +1,8 @@ + +DROP TABLE IF EXISTS `{{prefix}}recharge_order`; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item`; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item_refund`; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_log`; diff --git a/webroot/addon/recharge/menu/admin.json b/webroot/addon/recharge/menu/admin.json new file mode 100644 index 00000000..6430aae3 --- /dev/null +++ b/webroot/addon/recharge/menu/admin.json @@ -0,0 +1,6 @@ +{ + "menu": [ + ], + "delete": [ + ] +} \ No newline at end of file diff --git a/webroot/addon/recharge/menu/site.json b/webroot/addon/recharge/menu/site.json new file mode 100644 index 00000000..1b0df915 --- /dev/null +++ b/webroot/addon/recharge/menu/site.json @@ -0,0 +1,145 @@ +{ + "menu": [ + { + "menu_name": "会员充值", + "menu_short_name": "会员充值", + "menu_key": "recharge", + "parent_key": "", + "menu_type": 0, + "icon": "element Help", + "api_url": "", + "router_path": "", + "view_path": "", + "methods": "", + "sort": 100, + "status": 1, + "is_show": 1, + "children": [ + { + "menu_name": "充值设置", + "menu_short_name": "充值设置", + "menu_key": "recharge_package_config", + "parent_key": "recharge", + "menu_type": 1, + "icon": "iconfont iconchongzhidingdan", + "api_url": "", + "router_path": "recharge/package/config", + "view_path": "package/config", + "methods": "put", + "sort": 100, + "status": 1, + "is_show": 1 + }, + { + "menu_name": "充值套餐", + "menu_short_name": "充值套餐", + "menu_key": "recharge_package_list", + "parent_key": "recharge", + "menu_type": 1, + "icon": "iconfont iconchongzhidingdan", + "api_url": "recharge/package", + "router_path": "recharge/package/list", + "view_path": "package/list", + "methods": "get", + "sort": 100, + "status": 1, + "is_show": 1, + "children": [ + { + "menu_name": "修改状态(开启、关闭)", + "menu_short_name": "套餐关闭", + "menu_key": "recharge_package_close", + "parent_key": "recharge_package_list", + "menu_type": 2, + "icon": "", + "api_url": "recharge/package/status/", + "router_path": "", + "view_path": "", + "methods": "put", + "sort": 0, + "status": 1, + "is_show": 0 + }, + { + "menu_name": "套餐删除", + "menu_short_name": "套餐删除", + "menu_key": "recharge_package_delete", + "parent_key": "recharge_package_list", + "menu_type": 2, + "icon": "", + "api_url": "recharge/package/", + "router_path": "", + "view_path": "", + "methods": "delete", + "sort": 0, + "status": 1, + "is_show": 0 + } + ] + }, + { + "menu_name": "编辑套餐", + "menu_short_name": "编辑套餐", + "menu_key": "recharge_package_edit", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge_package/", + "router_path": "recharge/package/edit", + "view_path": "package/edit", + "methods": "put", + "sort": 0, + "status": 1, + "is_show": 0 + }, + { + "menu_name": "添加套餐", + "menu_short_name": "添加套餐", + "menu_key": "recharge_package_add", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge_package", + "router_path": "recharge/package/add", + "view_path": "package/edit", + "methods": "post", + "sort": 0, + "status": 1, + "is_show": 0 + }, + { + "menu_name": "订单列表", + "menu_short_name": "订单列表", + "menu_key": "recharge_order_list", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge/order", + "router_path": "recharge/order/list", + "view_path": "order/list", + "methods": "get", + "sort": 100, + "status": 1, + "is_show": 1 + }, + { + "menu_name": "订单详情", + "menu_short_name": "订单详情", + "menu_key": "recharge_order_detail", + "parent_key": "recharge", + "menu_type": 1, + "icon": "", + "api_url": "recharge/order/", + "router_path": "recharge/order/detail", + "view_path": "order/detail", + "methods": "get", + "sort": 90, + "status": 1, + "is_show": 0 + } + ] + } + ], + "delete": [ + ] +} \ No newline at end of file diff --git a/webroot/addon/recharge/package/uni-app-pages.txt b/webroot/addon/recharge/package/uni-app-pages.txt new file mode 100644 index 00000000..232120b9 --- /dev/null +++ b/webroot/addon/recharge/package/uni-app-pages.txt @@ -0,0 +1,27 @@ +{ + "root": "addon/recharge", + "pages": [ + // *********************************** 充值 *********************************** + { + "path": "pages/recharge", + "style": { + "navigationBarTitleText": "%recharge.pages.recharge%" + }, + "needLogin": true + }, + { + "path": "pages/recharge_record", + "style": { + "navigationBarTitleText": "%recharge.pages.recharge_record%" + }, + "needLogin": true + }, + { + "path": "pages/recharge_record_detail", + "style": { + "navigationBarTitleText": "%recharge.pages.recharge_record_detail%" + }, + "needLogin": true + } + ] + }, \ No newline at end of file diff --git a/webroot/addon/recharge/resource/cover.png b/webroot/addon/recharge/resource/cover.png new file mode 100644 index 00000000..16ec5c27 Binary files /dev/null and b/webroot/addon/recharge/resource/cover.png differ diff --git a/webroot/addon/recharge/resource/icon.png b/webroot/addon/recharge/resource/icon.png new file mode 100644 index 00000000..6af3825e Binary files /dev/null and b/webroot/addon/recharge/resource/icon.png differ diff --git a/webroot/addon/recharge/resource/recharge.png b/webroot/addon/recharge/resource/recharge.png new file mode 100644 index 00000000..4fd5707c Binary files /dev/null and b/webroot/addon/recharge/resource/recharge.png differ diff --git a/webroot/addon/recharge/sql/install.sql b/webroot/addon/recharge/sql/install.sql new file mode 100644 index 00000000..917dfbf2 --- /dev/null +++ b/webroot/addon/recharge/sql/install.sql @@ -0,0 +1,103 @@ + +DROP TABLE IF EXISTS `{{prefix}}recharge`; +CREATE TABLE `{{prefix}}recharge` ( + `recharge_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点ID', + `recharge_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '套餐名称', + `face_value` DECIMAL(10, 2) NOT NULL DEFAULT 0.00 COMMENT '面值', + `buy_price` DECIMAL(10, 2) NOT NULL COMMENT '价格', + `point` INT(11) NOT NULL DEFAULT 0 COMMENT '赠送积分', + `growth` INT(11) NOT NULL DEFAULT 0 COMMENT '赠送成长值', + `gift_json` TEXT DEFAULT NULL COMMENT '赠品json', + `sale_num` INT(11) NOT NULL DEFAULT 0 COMMENT '发放数量', + `sort` INT(11) NOT NULL DEFAULT 0 COMMENT '排序号', + `status` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '状态(0关闭 1开启)', + `create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间', + `update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '修改时间', + PRIMARY KEY (`recharge_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='会员充值套餐'; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order`; +CREATE TABLE `{{prefix}}recharge_order` ( + `order_id` int(11) NOT NULL AUTO_INCREMENT, + `site_id` int(11) NOT NULL DEFAULT 0 COMMENT '站点id', + `order_no` varchar(50) NOT NULL DEFAULT '' COMMENT '订单编号', + `order_from` varchar(55) NOT NULL DEFAULT '' COMMENT '订单来源', + `order_type` varchar(50) NOT NULL DEFAULT '' COMMENT '订单类型', + `out_trade_no` varchar(50) NOT NULL DEFAULT '' COMMENT '支付流水号', + `order_status` int(11) NOT NULL DEFAULT 0 COMMENT '订单状态', + `refund_status` int(11) NOT NULL DEFAULT 0 COMMENT '退款状态', + `member_id` int(11) NOT NULL DEFAULT 0 COMMENT '会员id', + `ip` varchar(20) NOT NULL DEFAULT '' COMMENT '会员ip', + `member_message` varchar(50) NOT NULL DEFAULT '' COMMENT '会员留言信息', + `order_item_money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '订单项目金额', + `order_discount_money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '订单优惠金额', + `order_money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '订单金额', + `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间', + `pay_time` int(11) NOT NULL DEFAULT 0 COMMENT '订单支付时间', + `close_time` int(11) NOT NULL DEFAULT 0 COMMENT '订单关闭时间', + `is_delete` int(11) NOT NULL DEFAULT 0 COMMENT '是否删除(针对后台)', + `is_enable_refund` int(11) NOT NULL DEFAULT 0 COMMENT '是否允许退款', + `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '商家留言', + `timeout` INT(11) NOT NULL DEFAULT 0 COMMENT '通用业务超时时间记录', + `invoice_id` int(11) NOT NULL DEFAULT 0 COMMENT '发票id,0表示不开发票', + `close_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '关闭原因', + PRIMARY KEY (`order_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic; + + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item`; +CREATE TABLE `{{prefix}}recharge_order_item` ( + `order_item_id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL DEFAULT 0 COMMENT '订单id', + `site_id` int(11) NOT NULL DEFAULT 0 COMMENT '站点id', + `member_id` int(11) NOT NULL DEFAULT 0 COMMENT '购买会员id', + `item_id` int(11) NOT NULL DEFAULT 0 COMMENT '项目id', + `item_type` varchar(255) NOT NULL DEFAULT '' COMMENT '项目类型', + `item_name` varchar(400) NOT NULL DEFAULT '' COMMENT '项目名称', + `item_image` varchar(2000) NOT NULL DEFAULT '' COMMENT '项目图片', + `price` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '项目单价', + `num` decimal(10, 3) NOT NULL DEFAULT 0.000 COMMENT '购买数量', + `item_money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '项目总价', + `is_refund` int(11) NOT NULL DEFAULT 0 COMMENT '是否退款', + `refund_no` varchar(255) NOT NULL DEFAULT '' COMMENT '退款编号', + `refund_status` int(11) NOT NULL DEFAULT 0 COMMENT '退款状态', + `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间', + PRIMARY KEY (`order_item_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单商品表' ROW_FORMAT = Dynamic; + + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item_refund`; +CREATE TABLE `{{prefix}}recharge_order_item_refund` ( + `refund_id` int(11) NOT NULL AUTO_INCREMENT, + `order_item_id` int(11) NOT NULL DEFAULT 0 COMMENT '订单id', + `order_id` int(11) NOT NULL DEFAULT 0 COMMENT '订单id', + `order_no` varchar(255) NOT NULL DEFAULT '' COMMENT '订单编号', + `refund_no` varchar(255) NOT NULL DEFAULT '0' COMMENT '退款单号', + `site_id` int(11) NOT NULL DEFAULT 0 COMMENT '站点id', + `member_id` int(11) NOT NULL DEFAULT 0 COMMENT '会员id', + `num` decimal(10, 3) NOT NULL DEFAULT 0.000 COMMENT '退货数量', + `money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '总退款', + `status` int(11) NOT NULL DEFAULT 0 COMMENT '退款状态', + `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间', + `audit_time` int(11) NOT NULL DEFAULT 0 COMMENT '审核时间', + `transfer_time` int(11) NOT NULL DEFAULT 0 COMMENT '转账时间', + `item_type` varchar(255) NOT NULL DEFAULT '' COMMENT '项目类型', + PRIMARY KEY (`refund_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单退款表' ROW_FORMAT = Dynamic; + + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_log`; +CREATE TABLE `{{prefix}}recharge_order_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_id` int(11) NOT NULL DEFAULT 0 COMMENT '订单id', + `site_id` int(11) NOT NULL DEFAULT 0 COMMENT '站点id', + `action` varchar(255) NOT NULL DEFAULT '' COMMENT '操作内容', + `uid` int(11) NOT NULL DEFAULT 0 COMMENT '操作人id', + `nick_name` varchar(50) NOT NULL DEFAULT '' COMMENT '操作人名称', + `order_status` int(11) NOT NULL DEFAULT 0 COMMENT '订单状态,操作后', + `action_way` bigint(20) NOT NULL DEFAULT 2 COMMENT '操作类型1买家2卖家 3 系统任务', + `order_status_name` varchar(255) NOT NULL DEFAULT '' COMMENT '订单状态名称,操作后', + `action_time` int(11) NOT NULL DEFAULT 0 COMMENT '操作时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单操作记录表' ROW_FORMAT = Dynamic; diff --git a/webroot/addon/recharge/sql/uninstall.sql b/webroot/addon/recharge/sql/uninstall.sql new file mode 100644 index 00000000..59c47ff9 --- /dev/null +++ b/webroot/addon/recharge/sql/uninstall.sql @@ -0,0 +1,8 @@ + +DROP TABLE IF EXISTS `{{prefix}}recharge_order`; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item`; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_item_refund`; + +DROP TABLE IF EXISTS `{{prefix}}recharge_order_log`; diff --git a/webroot/addon/recharge/uni-app/api/recharge.ts b/webroot/addon/recharge/uni-app/api/recharge.ts new file mode 100644 index 00000000..b3485b42 --- /dev/null +++ b/webroot/addon/recharge/uni-app/api/recharge.ts @@ -0,0 +1,36 @@ +import request from '@/utils/request' + +/** + * 发起充值 + */ +export function createRecharge(data: AnyObject) { + return request.post('recharge/recharge', data, { showErrorMessage: true }) +} + +/** + * 充值记录状态列表 + */ +export function getRechargeStatusList() { + return request.get('recharge/recharge/status') +} + +/** + * 充值记录列表 + */ +export function getRechargeList(data: AnyObject) { + return request.get('recharge/recharge', data, { showErrorMessage: true }) +} + +/** + * 充值记录详情 + */ +export function getRechargeDetail(id: number) { + return request.get(`recharge/recharge/${ id }`, {}, { showErrorMessage: true }) +} + +/** + * 充值套餐列表 + */ +export function getRechargePackageList() { + return request.get('recharge/package') +} diff --git a/webroot/addon/recharge/uni-app/locale/en.json b/webroot/addon/recharge/uni-app/locale/en.json new file mode 100644 index 00000000..7a73a41b --- /dev/null +++ b/webroot/addon/recharge/uni-app/locale/en.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/webroot/addon/recharge/uni-app/locale/zh-Hans.json b/webroot/addon/recharge/uni-app/locale/zh-Hans.json new file mode 100644 index 00000000..7a73a41b --- /dev/null +++ b/webroot/addon/recharge/uni-app/locale/zh-Hans.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/webroot/addon/recharge/uni-app/locale/zh-Hans/common.json b/webroot/addon/recharge/uni-app/locale/zh-Hans/common.json new file mode 100644 index 00000000..ddde031d --- /dev/null +++ b/webroot/addon/recharge/uni-app/locale/zh-Hans/common.json @@ -0,0 +1,3 @@ +{ + "orderNo": "订单号" +} \ No newline at end of file diff --git a/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge.json b/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge.json new file mode 100644 index 00000000..95547fb3 --- /dev/null +++ b/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge.json @@ -0,0 +1,17 @@ +{ + "recharge": "充值", + "cashOut": "提现", + "balanceDetail": "余额明细", + "accountBalance": "账户余额(元)", + "balance": "余额(元)", + "money": "可提现余额(元)", + "availableBalance": "可用余额", + "rechargeAmountError": "充值金额不能低于", + "confirm": "确认", + "customRechargeAmount": "请输入充值金额", + "minWithdrawal": "最低充值金额为", + "yuan": "元", + "rechargeRecord": "充值记录", + "RechargeMethod": "充值方式", + "rechargeInstructions": "充值说明" +} diff --git a/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge_record.json b/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge_record.json new file mode 100644 index 00000000..929f44b5 --- /dev/null +++ b/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge_record.json @@ -0,0 +1,4 @@ +{ + "rechargeRecord": "充值记录", + "emptyTip": "暂无充值记录" +} diff --git a/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge_record_detail.json b/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge_record_detail.json new file mode 100644 index 00000000..384068a9 --- /dev/null +++ b/webroot/addon/recharge/uni-app/locale/zh-Hans/pages.recharge_record_detail.json @@ -0,0 +1,4 @@ +{ + "orderNo": "订单编号", + "createTime": "创建时间" +} diff --git a/webroot/addon/recharge/uni-app/pages/recharge.vue b/webroot/addon/recharge/uni-app/pages/recharge.vue new file mode 100644 index 00000000..ca004f52 --- /dev/null +++ b/webroot/addon/recharge/uni-app/pages/recharge.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/webroot/addon/recharge/uni-app/pages/recharge_record.vue b/webroot/addon/recharge/uni-app/pages/recharge_record.vue new file mode 100644 index 00000000..237e483b --- /dev/null +++ b/webroot/addon/recharge/uni-app/pages/recharge_record.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/webroot/addon/recharge/uni-app/pages/recharge_record_detail.vue b/webroot/addon/recharge/uni-app/pages/recharge_record_detail.vue new file mode 100644 index 00000000..18460f42 --- /dev/null +++ b/webroot/addon/recharge/uni-app/pages/recharge_record_detail.vue @@ -0,0 +1,53 @@ + + + + +