From 3869708ff2d7a826f312ad7ec6e47a62349c528f Mon Sep 17 00:00:00 2001 From: ieaii <1069385070@qq.com> Date: Tue, 15 Oct 2024 00:10:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/system/HotelCouponList.vue | 221 ++++++++++++++++ .../src/views/system/HotelShopList.vue | 34 ++- .../src/views/system/RefundOrderList.vue | 254 ++++++++++++++++++ .../src/views/system/ReplaceOrderList.vue | 254 ++++++++++++++++++ .../src/views/system/WashOrderList.vue | 285 +++++++++++++++++++++ .../src/views/system/modules/HotelCouponForm.vue | 149 +++++++++++ .../modules/HotelCouponModal.Style#Drawer.vue | 84 ++++++ .../src/views/system/modules/HotelCouponModal.vue | 60 +++++ .../src/views/system/modules/WashOrderForm.vue | 99 +++++++ .../system/modules/WashOrderModal.Style#Drawer.vue | 84 ++++++ .../src/views/system/modules/WashOrderModal.vue | 66 +++++ .../target/jeecg-system-cloud-api-3.2.0.jar | Bin 9792 -> 9792 bytes .../java/org/jeecg/config/shiro/ShiroConfig.java | 2 + .../hanHaiMember/mapper/HanHaiMemberMapper.java | 9 + .../hanHaiMember/mapper/xml/HanHaiMemberMapper.xml | 12 +- .../hanHaiMember/service/IHanHaiMemberService.java | 8 + .../service/impl/HanHaiMemberServiceImpl.java | 5 + .../controller/HotelCouponController.java | 171 +++++++++++++ .../modules/hotelcoupon/entity/HotelCoupon.java | 87 +++++++ .../hotelcoupon/mapper/HotelCouponMapper.java | 17 ++ .../hotelcoupon/mapper/xml/HotelCouponMapper.xml | 5 + .../hotelcoupon/service/IHotelCouponService.java | 14 + .../service/impl/HotelCouponServiceImpl.java | 19 ++ .../modules/hotelcoupon/vue/HotelCouponList.vue | 216 ++++++++++++++++ .../hotelcoupon/vue/modules/HotelCouponForm.vue | 144 +++++++++++ .../vue/modules/HotelCouponModal.Style#Drawer.vue | 84 ++++++ .../hotelcoupon/vue/modules/HotelCouponModal.vue | 60 +++++ .../modules/hotelcoupon/vue3/HotelCoupon.api.ts | 61 +++++ .../modules/hotelcoupon/vue3/HotelCoupon.data.ts | 108 ++++++++ .../modules/hotelcoupon/vue3/HotelCouponList.vue | 162 ++++++++++++ .../vue3/components/HotelCouponModal.vue | 58 +++++ .../controller/HotelCouponLogController.java | 171 +++++++++++++ .../hotelcouponlog/entity/HotelCouponLog.java | 97 +++++++ .../mapper/HotelCouponLogMapper.java | 17 ++ .../mapper/xml/HotelCouponLogMapper.xml | 5 + .../service/IHotelCouponLogService.java | 14 + .../service/impl/HotelCouponLogServiceImpl.java | 19 ++ .../hotelcouponlog/vue/HotelCouponLogList.vue | 232 +++++++++++++++++ .../vue/modules/HotelCouponLogForm.vue | 163 ++++++++++++ .../modules/HotelCouponLogModal.Style#Drawer.vue | 84 ++++++ .../vue/modules/HotelCouponLogModal.vue | 60 +++++ .../hotelcouponlog/vue3/HotelCouponLog.api.ts | 61 +++++ .../hotelcouponlog/vue3/HotelCouponLog.data.ts | 135 ++++++++++ .../hotelcouponlog/vue3/HotelCouponLogList.vue | 162 ++++++++++++ .../vue3/components/HotelCouponLogModal.vue | 58 +++++ .../controller/HotelOrderController.java | 220 ++++++++++++++++ .../modules/hotelorder/entity/HotelOrder.java | 4 +- .../modules/hotelorder/req/DamageAuditReq.java | 14 + .../hotelshop/controller/HotelShopController.java | 54 ++++ .../jeecg/modules/hotelshop/entity/HotelShop.java | 4 + .../jeecg/modules/hotelshop/req/AuditShopReq.java | 13 + .../controller/HotelShopLogController.java | 171 +++++++++++++ .../modules/hotelshoplog/entity/HotelShopLog.java | 65 +++++ .../hotelshoplog/mapper/HotelShopLogMapper.java | 17 ++ .../hotelshoplog/mapper/xml/HotelShopLogMapper.xml | 5 + .../hotelshoplog/service/IHotelShopLogService.java | 14 + .../service/impl/HotelShopLogServiceImpl.java | 19 ++ .../modules/hotelshoplog/vue/HotelShopLogList.vue | 190 ++++++++++++++ .../hotelshoplog/vue/modules/HotelShopLogForm.vue | 120 +++++++++ .../vue/modules/HotelShopLogModal.Style#Drawer.vue | 84 ++++++ .../hotelshoplog/vue/modules/HotelShopLogModal.vue | 60 +++++ .../modules/hotelshoplog/vue3/HotelShopLog.api.ts | 61 +++++ .../modules/hotelshoplog/vue3/HotelShopLog.data.ts | 56 ++++ .../modules/hotelshoplog/vue3/HotelShopLogList.vue | 162 ++++++++++++ .../vue3/components/HotelShopLogModal.vue | 58 +++++ .../org/jeecg/config/shiro/ShiroConfig.class | Bin 11557 -> 11632 bytes .../hanHaiMember/mapper/HanHaiMemberMapper.class | Bin 1063 -> 1206 bytes .../hanHaiMember/mapper/xml/HanHaiMemberMapper.xml | 12 +- .../service/IHanHaiMemberService.class | Bin 942 -> 1170 bytes .../service/impl/HanHaiMemberServiceImpl.class | Bin 1970 -> 2177 bytes .../target/jeecg-boot-base-core-3.2.0.jar | Bin 515943 -> 531879 bytes .../xcx/coupon/controller/CouponController.java | 13 + .../modules/xcx/coupon/req/CouponPageReq.java | 12 + .../modules/xcx/coupon/service/ICouponService.java | 16 ++ .../xcx/coupon/service/impl/CouponServiceImpl.java | 39 +++ .../modules/xcx/goods/req/JoinShoppingCartReq.java | 2 + .../xcx/goods/service/impl/GoodsServiceImpl.java | 4 +- .../xcx/order/controller/OrderController.java | 14 + .../xcx/order/req/ConfirmAcceptOrderReq.java | 18 +- .../jeecg/modules/xcx/order/req/OrderPageReq.java | 2 +- .../jeecg/modules/xcx/order/req/OrderPayReq.java | 2 + .../modules/xcx/order/req/ReplaceOrderPayReq.java | 12 + .../modules/xcx/order/service/IOrderService.java | 15 ++ .../xcx/order/service/impl/OrderServiceImpl.java | 146 ++++++++++- .../xcx/shop/controller/ShopController.java | 7 + .../jeecg/modules/xcx/shop/req/ApplyShopReq.java | 1 + .../modules/xcx/shop/req/EditShopInfoReq.java | 15 ++ .../modules/xcx/shop/service/IShopService.java | 7 + .../xcx/shop/service/impl/ShopServiceImpl.java | 32 ++- .../xcx/user/controller/UserController.java | 6 + .../modules/xcx/user/service/IUserService.java | 6 + .../xcx/user/service/impl/LoginServiceImpl.java | 4 + .../xcx/user/service/impl/UserServiceImpl.java | 13 + .../src/main/resources/application-dev.yml | 7 +- .../src/main/resources/application-pord.yml | 8 +- 95 files changed, 5878 insertions(+), 36 deletions(-) create mode 100644 admin-hanhai-vue/src/views/system/HotelCouponList.vue create mode 100644 admin-hanhai-vue/src/views/system/RefundOrderList.vue create mode 100644 admin-hanhai-vue/src/views/system/ReplaceOrderList.vue create mode 100644 admin-hanhai-vue/src/views/system/WashOrderList.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelCouponForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelCouponModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelCouponModal.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/WashOrderForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/WashOrderModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/WashOrderModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/controller/HotelCouponController.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/entity/HotelCoupon.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/HotelCouponMapper.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/xml/HotelCouponMapper.xml create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/IHotelCouponService.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/impl/HotelCouponServiceImpl.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/HotelCouponList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponForm.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.Style#Drawer.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.api.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.data.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCouponList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/components/HotelCouponModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/controller/HotelCouponLogController.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/entity/HotelCouponLog.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/HotelCouponLogMapper.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/xml/HotelCouponLogMapper.xml create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/IHotelCouponLogService.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/impl/HotelCouponLogServiceImpl.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/HotelCouponLogList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogForm.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.Style#Drawer.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.api.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.data.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLogList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/components/HotelCouponLogModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/req/DamageAuditReq.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/req/AuditShopReq.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/controller/HotelShopLogController.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/entity/HotelShopLog.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/HotelShopLogMapper.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/xml/HotelShopLogMapper.xml create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/IHotelShopLogService.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/impl/HotelShopLogServiceImpl.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/HotelShopLogList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogForm.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.Style#Drawer.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.api.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.data.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLogList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/components/HotelShopLogModal.vue create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/controller/CouponController.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/req/CouponPageReq.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/service/ICouponService.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/service/impl/CouponServiceImpl.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ReplaceOrderPayReq.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/EditShopInfoReq.java diff --git a/admin-hanhai-vue/src/views/system/HotelCouponList.vue b/admin-hanhai-vue/src/views/system/HotelCouponList.vue new file mode 100644 index 0000000..d9d28cf --- /dev/null +++ b/admin-hanhai-vue/src/views/system/HotelCouponList.vue @@ -0,0 +1,221 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/HotelShopList.vue b/admin-hanhai-vue/src/views/system/HotelShopList.vue index 226c305..b046f86 100644 --- a/admin-hanhai-vue/src/views/system/HotelShopList.vue +++ b/admin-hanhai-vue/src/views/system/HotelShopList.vue @@ -68,12 +68,23 @@ - 编辑 + +
+ 通过 + + 不通过 + + +
+ 更多 + + 编辑 + 详情 @@ -99,6 +110,7 @@ import { mixinDevice } from '@/utils/mixin' import { JeecgListMixin } from '@/mixins/JeecgListMixin' import HotelShopModal from './modules/HotelShopModal' + import {httpAction} from "@api/manage"; export default { name: 'HotelShopList', @@ -207,6 +219,7 @@ deleteBatch: "/hotelshop/hotelShop/deleteBatch", exportXlsUrl: "/hotelshop/hotelShop/exportXls", importExcelUrl: "hotelshop/hotelShop/importExcel", + auditUrl: "/hotelshop/hotelShop/audit" }, dictOptions:{}, @@ -227,7 +240,7 @@ getSuperFieldList(){ let fieldList=[]; fieldList.push({type:'string',value:'name',text:'商铺名',dictCode:''}) - fieldList.push({type:'string',value:'userId',text:'userId',dictCode:''}) + fieldList.push({type:'string',value:'userId',text:'用户编号',dictCode:''}) fieldList.push({type:'string',value:'userName',text:'店主名',dictCode:''}) fieldList.push({type:'string',value:'phone',text:'手机号',dictCode:''}) fieldList.push({type:'string',value:'latitude',text:'latitude',dictCode:''}) @@ -235,6 +248,23 @@ fieldList.push({type:'string',value:'address',text:'地址',dictCode:''}) fieldList.push({type:'int',value:'delFlag',text:'delFlag',dictCode:''}) this.superFieldList = fieldList + }, + handleAudit(e,obj){ + let param = { + id:obj.id, + audit:e + } + console.log(e,obj) + httpAction(this.url.auditUrl,param,'post').then((res)=>{ + if(res.success){ + this.$message.success(res.message); + this.$emit('ok'); + }else{ + this.$message.warning(res.message); + } + }).finally(() => { + this.loadData(1) + }) } } } diff --git a/admin-hanhai-vue/src/views/system/RefundOrderList.vue b/admin-hanhai-vue/src/views/system/RefundOrderList.vue new file mode 100644 index 0000000..9362cc0 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/RefundOrderList.vue @@ -0,0 +1,254 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/ReplaceOrderList.vue b/admin-hanhai-vue/src/views/system/ReplaceOrderList.vue new file mode 100644 index 0000000..950065b --- /dev/null +++ b/admin-hanhai-vue/src/views/system/ReplaceOrderList.vue @@ -0,0 +1,254 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/WashOrderList.vue b/admin-hanhai-vue/src/views/system/WashOrderList.vue new file mode 100644 index 0000000..d3216f2 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/WashOrderList.vue @@ -0,0 +1,285 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelCouponForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelCouponForm.vue new file mode 100644 index 0000000..e5e8705 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelCouponForm.vue @@ -0,0 +1,149 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelCouponModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelCouponModal.Style#Drawer.vue new file mode 100644 index 0000000..298c557 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelCouponModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelCouponModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelCouponModal.vue new file mode 100644 index 0000000..1e12f68 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelCouponModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/WashOrderForm.vue b/admin-hanhai-vue/src/views/system/modules/WashOrderForm.vue new file mode 100644 index 0000000..2d4e7c7 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/WashOrderForm.vue @@ -0,0 +1,99 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/WashOrderModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/WashOrderModal.Style#Drawer.vue new file mode 100644 index 0000000..f06de0a --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/WashOrderModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/WashOrderModal.vue b/admin-hanhai-vue/src/views/system/modules/WashOrderModal.vue new file mode 100644 index 0000000..e57d3ac --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/WashOrderModal.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-api/jeecg-system-cloud-api/target/jeecg-system-cloud-api-3.2.0.jar b/jeecg-boot-base/jeecg-boot-base-api/jeecg-system-cloud-api/target/jeecg-system-cloud-api-3.2.0.jar index 059202c8d68424c374efb0149c093325de218899..4a08719410d4479d7b8dd0cc03b930824e0fd824 100644 GIT binary patch delta 194 zcmX@$bHIl;z?+$ci-CcIfuXX>Zz8V>GmzS762}OlCr@QG2h-;n?ZLDllLMFzVbTKA zjZ98p`WRCrh~BKk+|2}LY+!xI17<7~lHmg@IiO$y7Wl592Qgbi$sH_Fq~s5#k0=Fz iX>nyMFdd>C1g2LiXM$-_l{_%rrjh}oH-A*|X9NHTKR-AC delta 194 zcmX@$bHIl;z?+$ci-CcIfuV`Rdm^t2GmzS762}OlCr@QG2h-;n?ZLDllLMFzVbTKA zjZ98p`WRCrh~BKk+|2}LY+!xI17<7~lHmg@IiO$y7Wl592Qgbi$sH_Fq~s5#k0=Fz iX>nyMFdd>C1g2LiXM$-_l{_%rrjh}oH-A*|X9NJLyEX6t diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 16cb891..cc35d67 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -80,6 +80,8 @@ public class ShiroConfig { filterChainDefinitionMap.put("/login/login", "anon");//分类接口 filterChainDefinitionMap.put("/conf/customer", "anon");//分类接口 filterChainDefinitionMap.put("/order/notify", "anon");//支付回调接口 + filterChainDefinitionMap.put("/user/custom", "anon");//支付回调接口 + filterChainDefinitionMap.put("/order/replace/notify", "anon");//支付回调接口 filterChainDefinitionMap.put("/sys/oss/file/upload", "anon"); //图片上传验证放开 filterChainDefinitionMap.put("/sys/common/upload", "anon"); //图片上传验证放开 diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/HanHaiMemberMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/HanHaiMemberMapper.java index 3e19358..c5aab40 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/HanHaiMemberMapper.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/HanHaiMemberMapper.java @@ -5,6 +5,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.hanHaiMember.resp.MyUserResp; @@ -35,4 +36,12 @@ public interface HanHaiMemberMapper extends BaseMapper { */ ShopIndexResp getShopIndex(@Param("userId") String userId,@Param("shopId") String shopId); + /** + * 修改用户id + * @param oldId + * @param newId + * @return + */ + Integer updateUserId(@Param("oldId") String oldId,@Param("newId") String newId); + } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/xml/HanHaiMemberMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/xml/HanHaiMemberMapper.xml index fcaf936..28e546b 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/xml/HanHaiMemberMapper.xml +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/mapper/xml/HanHaiMemberMapper.xml @@ -9,10 +9,14 @@ + + UPDATE han_hai_member SET id = #{newId} WHERE id = #{oldId} + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/IHanHaiMemberService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/IHanHaiMemberService.java index d39a12e..efe0779 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/IHanHaiMemberService.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/IHanHaiMemberService.java @@ -19,4 +19,12 @@ public interface IHanHaiMemberService extends IService { IPage getMyUser(Page page, String shopId); ShopIndexResp getShopIndex(String userId, String shopId); + + /** + * 修改用户id + * @param oldId 老id + * @param newId 新id + * @return + */ + Integer updateUserId(@Param("oldId") String oldId,@Param("newId") String newId); } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/impl/HanHaiMemberServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/impl/HanHaiMemberServiceImpl.java index 2c0997a..8274486 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/impl/HanHaiMemberServiceImpl.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiMember/service/impl/HanHaiMemberServiceImpl.java @@ -30,4 +30,9 @@ public class HanHaiMemberServiceImpl extends ServiceImpl { + @Autowired + private IHotelCouponService hotelCouponService; + + /** + * 分页列表查询 + * + * @param hotelCoupon + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_coupon-分页列表查询") + @ApiOperation(value="hotel_coupon-分页列表查询", notes="hotel_coupon-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(HotelCoupon hotelCoupon, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelCoupon, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelCouponService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param hotelCoupon + * @return + */ + @AutoLog(value = "hotel_coupon-添加") + @ApiOperation(value="hotel_coupon-添加", notes="hotel_coupon-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody HotelCoupon hotelCoupon) { + hotelCouponService.save(hotelCoupon); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param hotelCoupon + * @return + */ + @AutoLog(value = "hotel_coupon-编辑") + @ApiOperation(value="hotel_coupon-编辑", notes="hotel_coupon-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody HotelCoupon hotelCoupon) { + hotelCouponService.updateById(hotelCoupon); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "hotel_coupon-通过id删除") + @ApiOperation(value="hotel_coupon-通过id删除", notes="hotel_coupon-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + hotelCouponService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "hotel_coupon-批量删除") + @ApiOperation(value="hotel_coupon-批量删除", notes="hotel_coupon-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.hotelCouponService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "hotel_coupon-通过id查询") + @ApiOperation(value="hotel_coupon-通过id查询", notes="hotel_coupon-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + HotelCoupon hotelCoupon = hotelCouponService.getById(id); + if(hotelCoupon==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(hotelCoupon); + } + + /** + * 导出excel + * + * @param request + * @param hotelCoupon + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HotelCoupon hotelCoupon) { + return super.exportXls(request, hotelCoupon, HotelCoupon.class, "hotel_coupon"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, HotelCoupon.class); + } + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/entity/HotelCoupon.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/entity/HotelCoupon.java new file mode 100644 index 0000000..cfe030f --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/entity/HotelCoupon.java @@ -0,0 +1,87 @@ +package org.jeecg.modules.hotelcoupon.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: hotel_coupon + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +@Data +@TableName("hotel_coupon") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="hotel_coupon对象", description="hotel_coupon") +public class HotelCoupon implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**优惠券名*/ + @Excel(name = "优惠券名", width = 15) + @ApiModelProperty(value = "优惠券名") + private java.lang.String name; + /**图片*/ + @Excel(name = "图片", width = 15) + @ApiModelProperty(value = "图片") + private java.lang.String pic; + /**券额*/ + @Excel(name = "券额", width = 15) + @ApiModelProperty(value = "券额") + private java.math.BigDecimal price; + /**满多少金额*/ + @Excel(name = "满多少金额", width = 15) + @ApiModelProperty(value = "满多少金额") + private java.math.BigDecimal conditionPrice; + /**说明*/ + @Excel(name = "说明", width = 15) + @ApiModelProperty(value = "说明") + private java.lang.String info; + /**优惠券结束时间*/ + @Excel(name = "优惠券结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "优惠券结束时间") + private java.util.Date endTime; + /**类型 0指定时间 1单次*/ + @Excel(name = "类型 0指定时间 1单次", width = 15, dicCode = "coupon_type") + @Dict(dicCode = "coupon_type") + @ApiModelProperty(value = "类型 0指定时间 1单次") + private java.lang.Integer type; + /**是否删除*/ + @Excel(name = "是否删除", width = 15, dicCode = "is_delete") + @Dict(dicCode = "is_delete") + @ApiModelProperty(value = "是否删除") + private java.lang.Integer delFlag; + /**createTime*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "createTime") + private java.util.Date createTime; + /**updateTime*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "updateTime") + private java.util.Date updateTime; + /**使用类型 0押金 1租金 2水洗*/ + @Dict(dicCode = "coupon_use_type") + private Integer useType; +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/HotelCouponMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/HotelCouponMapper.java new file mode 100644 index 0000000..0e5406b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/HotelCouponMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.hotelcoupon.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.hotelcoupon.entity.HotelCoupon; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: hotel_coupon + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +public interface HotelCouponMapper extends BaseMapper { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/xml/HotelCouponMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/xml/HotelCouponMapper.xml new file mode 100644 index 0000000..742372b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/mapper/xml/HotelCouponMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/IHotelCouponService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/IHotelCouponService.java new file mode 100644 index 0000000..baa060f --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/IHotelCouponService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.hotelcoupon.service; + +import org.jeecg.modules.hotelcoupon.entity.HotelCoupon; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: hotel_coupon + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +public interface IHotelCouponService extends IService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/impl/HotelCouponServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/impl/HotelCouponServiceImpl.java new file mode 100644 index 0000000..508bb64 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/service/impl/HotelCouponServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.hotelcoupon.service.impl; + +import org.jeecg.modules.hotelcoupon.entity.HotelCoupon; +import org.jeecg.modules.hotelcoupon.mapper.HotelCouponMapper; +import org.jeecg.modules.hotelcoupon.service.IHotelCouponService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: hotel_coupon + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +@Service +public class HotelCouponServiceImpl extends ServiceImpl implements IHotelCouponService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/HotelCouponList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/HotelCouponList.vue new file mode 100644 index 0000000..e7f0420 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/HotelCouponList.vue @@ -0,0 +1,216 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponForm.vue new file mode 100644 index 0000000..ed732fb --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponForm.vue @@ -0,0 +1,144 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.Style#Drawer.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.Style#Drawer.vue new file mode 100644 index 0000000..298c557 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.vue new file mode 100644 index 0000000..1e12f68 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue/modules/HotelCouponModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.api.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.api.ts new file mode 100644 index 0000000..b0f282e --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.api.ts @@ -0,0 +1,61 @@ +import {defHttp} from '/@/utils/http/axios'; +import {Modal} from 'ant-design-vue'; + +enum Api { + list = '/hotelcoupon/hotelCoupon/list', + save='/hotelcoupon/hotelCoupon/add', + edit='/hotelcoupon/hotelCoupon/edit', + deleteOne = '/hotelcoupon/hotelCoupon/delete', + deleteBatch = '/hotelcoupon/hotelCoupon/deleteBatch', + importExcel = '/hotelcoupon/hotelCoupon/importExcel', + exportXls = '/hotelcoupon/hotelCoupon/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + Modal.confirm({ + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.data.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.data.ts new file mode 100644 index 0000000..758e3ac --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCoupon.data.ts @@ -0,0 +1,108 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '优惠券名', + align:"center", + dataIndex: 'name' + }, + { + title: '图片', + align:"center", + dataIndex: 'pic', + customRender:render.renderAvatar, + }, + { + title: '券额', + align:"center", + dataIndex: 'price' + }, + { + title: '满多少金额', + align:"center", + dataIndex: 'conditionPrice' + }, + { + title: '说明', + align:"center", + dataIndex: 'info', + slots: { customRender: 'htmlSlot' }, + }, + { + title: '优惠券结束时间', + align:"center", + dataIndex: 'endTime' + }, + { + title: '类型 0指定时间 1单次', + align:"center", + dataIndex: 'type_dictText' + }, + { + title: '是否删除', + align:"center", + dataIndex: 'delFlag_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '优惠券名', + field: 'name', + component: 'Input', + }, + { + label: '图片', + field: 'pic', + component: 'JImageUpload', + componentProps:{ + }, + }, + { + label: '券额', + field: 'price', + component: 'InputNumber', + }, + { + label: '满多少金额', + field: 'conditionPrice', + component: 'InputNumber', + }, + { + label: '说明', + field: 'info', + component: 'JCodeEditor', //TODO String后缀暂未添加 + }, + { + label: '优惠券结束时间', + field: 'endTime', + component: 'Input', + }, + { + label: '类型 0指定时间 1单次', + field: 'type', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"coupon_type" + }, + }, + { + label: '是否删除', + field: 'delFlag', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"is_delete" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入是否删除!'}, + ]; + }, + }, +]; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCouponList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCouponList.vue new file mode 100644 index 0000000..961ad3e --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/HotelCouponList.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/components/HotelCouponModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/components/HotelCouponModal.vue new file mode 100644 index 0000000..29324db --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcoupon/vue3/components/HotelCouponModal.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/controller/HotelCouponLogController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/controller/HotelCouponLogController.java new file mode 100644 index 0000000..fbcb611 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/controller/HotelCouponLogController.java @@ -0,0 +1,171 @@ +package org.jeecg.modules.hotelcouponlog.controller; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.hotelcouponlog.entity.HotelCouponLog; +import org.jeecg.modules.hotelcouponlog.service.IHotelCouponLogService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; + + /** + * @Description: hotel_coupon_log + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +@Api(tags="hotel_coupon_log") +@RestController +@RequestMapping("/hotelcouponlog/hotelCouponLog") +@Slf4j +public class HotelCouponLogController extends JeecgController { + @Autowired + private IHotelCouponLogService hotelCouponLogService; + + /** + * 分页列表查询 + * + * @param hotelCouponLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_coupon_log-分页列表查询") + @ApiOperation(value="hotel_coupon_log-分页列表查询", notes="hotel_coupon_log-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(HotelCouponLog hotelCouponLog, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelCouponLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelCouponLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param hotelCouponLog + * @return + */ + @AutoLog(value = "hotel_coupon_log-添加") + @ApiOperation(value="hotel_coupon_log-添加", notes="hotel_coupon_log-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody HotelCouponLog hotelCouponLog) { + hotelCouponLogService.save(hotelCouponLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param hotelCouponLog + * @return + */ + @AutoLog(value = "hotel_coupon_log-编辑") + @ApiOperation(value="hotel_coupon_log-编辑", notes="hotel_coupon_log-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody HotelCouponLog hotelCouponLog) { + hotelCouponLogService.updateById(hotelCouponLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "hotel_coupon_log-通过id删除") + @ApiOperation(value="hotel_coupon_log-通过id删除", notes="hotel_coupon_log-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + hotelCouponLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "hotel_coupon_log-批量删除") + @ApiOperation(value="hotel_coupon_log-批量删除", notes="hotel_coupon_log-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.hotelCouponLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "hotel_coupon_log-通过id查询") + @ApiOperation(value="hotel_coupon_log-通过id查询", notes="hotel_coupon_log-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + HotelCouponLog hotelCouponLog = hotelCouponLogService.getById(id); + if(hotelCouponLog==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(hotelCouponLog); + } + + /** + * 导出excel + * + * @param request + * @param hotelCouponLog + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HotelCouponLog hotelCouponLog) { + return super.exportXls(request, hotelCouponLog, HotelCouponLog.class, "hotel_coupon_log"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, HotelCouponLog.class); + } + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/entity/HotelCouponLog.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/entity/HotelCouponLog.java new file mode 100644 index 0000000..9564eef --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/entity/HotelCouponLog.java @@ -0,0 +1,97 @@ +package org.jeecg.modules.hotelcouponlog.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: hotel_coupon_log + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +@Data +@TableName("hotel_coupon_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="hotel_coupon_log对象", description="hotel_coupon_log") +public class HotelCouponLog implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**优惠券编号*/ + @Excel(name = "优惠券编号", width = 15) + @ApiModelProperty(value = "优惠券编号") + private java.lang.String couponId; + /**用户编号*/ + @Excel(name = "用户编号", width = 15) + @ApiModelProperty(value = "用户编号") + private java.lang.String userId; + /**优惠券名*/ + @Excel(name = "优惠券名", width = 15) + @ApiModelProperty(value = "优惠券名") + private java.lang.String couponName; + /**图片*/ + @Excel(name = "图片", width = 15) + @ApiModelProperty(value = "图片") + private java.lang.String pic; + /**券额*/ + @Excel(name = "券额", width = 15) + @ApiModelProperty(value = "券额") + private java.math.BigDecimal price; + /**满足多少金额*/ + @Excel(name = "满足多少金额", width = 15) + @ApiModelProperty(value = "满足多少金额") + private java.math.BigDecimal conditionPrice; + /**结束时间*/ + @Excel(name = "结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "结束时间") + private java.util.Date endTime; + /**类型 0指定时间 1单次使用*/ + @Excel(name = "类型 0指定时间 1单次使用", width = 15, dicCode = "coupon_type") + @Dict(dicCode = "coupon_type") + @ApiModelProperty(value = "类型 0指定时间 1单次使用") + private java.lang.Integer type; + /**状态 0未使用 1已使用*/ + @Excel(name = "状态 0未使用 1已使用", width = 15, dicCode = "coupon_log_status") + @Dict(dicCode = "coupon_log_status") + @ApiModelProperty(value = "状态 0未使用 1已使用") + private java.lang.Integer status; + /**是否删除*/ + @Excel(name = "是否删除", width = 15, dicCode = "is_delete") + @Dict(dicCode = "is_delete") + @ApiModelProperty(value = "是否删除") + private java.lang.Integer delFlag; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + /**修改时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "修改时间") + private java.util.Date updateTime; + /**使用类型 0押金 1租金 2水洗*/ + @Dict(dicCode = "coupon_use_type") + private Integer useType; + private String orderLogId; +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/HotelCouponLogMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/HotelCouponLogMapper.java new file mode 100644 index 0000000..b5fab92 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/HotelCouponLogMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.hotelcouponlog.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.hotelcouponlog.entity.HotelCouponLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: hotel_coupon_log + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +public interface HotelCouponLogMapper extends BaseMapper { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/xml/HotelCouponLogMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/xml/HotelCouponLogMapper.xml new file mode 100644 index 0000000..a80a9f0 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/mapper/xml/HotelCouponLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/IHotelCouponLogService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/IHotelCouponLogService.java new file mode 100644 index 0000000..f42446c --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/IHotelCouponLogService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.hotelcouponlog.service; + +import org.jeecg.modules.hotelcouponlog.entity.HotelCouponLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: hotel_coupon_log + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +public interface IHotelCouponLogService extends IService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/impl/HotelCouponLogServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/impl/HotelCouponLogServiceImpl.java new file mode 100644 index 0000000..8c89749 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/service/impl/HotelCouponLogServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.hotelcouponlog.service.impl; + +import org.jeecg.modules.hotelcouponlog.entity.HotelCouponLog; +import org.jeecg.modules.hotelcouponlog.mapper.HotelCouponLogMapper; +import org.jeecg.modules.hotelcouponlog.service.IHotelCouponLogService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: hotel_coupon_log + * @Author: jeecg-boot + * @Date: 2024-10-14 + * @Version: V1.0 + */ +@Service +public class HotelCouponLogServiceImpl extends ServiceImpl implements IHotelCouponLogService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/HotelCouponLogList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/HotelCouponLogList.vue new file mode 100644 index 0000000..e956c8e --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/HotelCouponLogList.vue @@ -0,0 +1,232 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogForm.vue new file mode 100644 index 0000000..9d1c2cc --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogForm.vue @@ -0,0 +1,163 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.Style#Drawer.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.Style#Drawer.vue new file mode 100644 index 0000000..304ad04 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.vue new file mode 100644 index 0000000..1432440 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue/modules/HotelCouponLogModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.api.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.api.ts new file mode 100644 index 0000000..3be3936 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.api.ts @@ -0,0 +1,61 @@ +import {defHttp} from '/@/utils/http/axios'; +import {Modal} from 'ant-design-vue'; + +enum Api { + list = '/hotelcouponlog/hotelCouponLog/list', + save='/hotelcouponlog/hotelCouponLog/add', + edit='/hotelcouponlog/hotelCouponLog/edit', + deleteOne = '/hotelcouponlog/hotelCouponLog/delete', + deleteBatch = '/hotelcouponlog/hotelCouponLog/deleteBatch', + importExcel = '/hotelcouponlog/hotelCouponLog/importExcel', + exportXls = '/hotelcouponlog/hotelCouponLog/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + Modal.confirm({ + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.data.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.data.ts new file mode 100644 index 0000000..83881c1 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLog.data.ts @@ -0,0 +1,135 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '优惠券编号', + align:"center", + dataIndex: 'couponId' + }, + { + title: '用户编号', + align:"center", + dataIndex: 'userId' + }, + { + title: '优惠券名', + align:"center", + dataIndex: 'couponName' + }, + { + title: '图片', + align:"center", + dataIndex: 'pic', + customRender:render.renderAvatar, + }, + { + title: '券额', + align:"center", + dataIndex: 'price' + }, + { + title: '满足多少金额', + align:"center", + dataIndex: 'conditionPrice' + }, + { + title: '结束时间', + align:"center", + dataIndex: 'endTime' + }, + { + title: '类型 0指定时间 1单次使用', + align:"center", + dataIndex: 'type_dictText' + }, + { + title: '状态 0未使用 1已使用', + align:"center", + dataIndex: 'status_dictText' + }, + { + title: '是否删除', + align:"center", + dataIndex: 'delFlag_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '优惠券编号', + field: 'couponId', + component: 'Input', + }, + { + label: '用户编号', + field: 'userId', + component: 'Input', + }, + { + label: '优惠券名', + field: 'couponName', + component: 'Input', + }, + { + label: '图片', + field: 'pic', + component: 'JImageUpload', + componentProps:{ + }, + }, + { + label: '券额', + field: 'price', + component: 'InputNumber', + }, + { + label: '满足多少金额', + field: 'conditionPrice', + component: 'InputNumber', + }, + { + label: '结束时间', + field: 'endTime', + component: 'Input', + }, + { + label: '类型 0指定时间 1单次使用', + field: 'type', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"coupon_type" + }, + }, + { + label: '状态 0未使用 1已使用', + field: 'status', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"coupon_log_status" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入状态 0未使用 1已使用!'}, + ]; + }, + }, + { + label: '是否删除', + field: 'delFlag', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"is_delete" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入是否删除!'}, + ]; + }, + }, +]; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLogList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLogList.vue new file mode 100644 index 0000000..0991f3e --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/HotelCouponLogList.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/components/HotelCouponLogModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/components/HotelCouponLogModal.vue new file mode 100644 index 0000000..923b30f --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcouponlog/vue3/components/HotelCouponLogModal.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/controller/HotelOrderController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/controller/HotelOrderController.java index 8c72670..70dfd55 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/controller/HotelOrderController.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/controller/HotelOrderController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.hotelorder.controller; +import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -7,12 +8,22 @@ import java.util.stream.Collectors; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.hotelbalancelog.entity.HotelBalanceLog; +import org.jeecg.modules.hotelbalancelog.service.IHotelBalanceLogService; +import org.jeecg.modules.hotelconf.service.IHotelConfService; +import org.jeecg.modules.hotelleaselog.entity.HotelLeaseLog; +import org.jeecg.modules.hotelleaselog.service.IHotelLeaseLogService; +import org.jeecg.modules.hotelmemberaccount.entity.HotelMemberAccount; +import org.jeecg.modules.hotelmemberaccount.service.IHotelMemberAccountService; import org.jeecg.modules.hotelorder.entity.HotelOrder; +import org.jeecg.modules.hotelorder.req.DamageAuditReq; import org.jeecg.modules.hotelorder.service.IHotelOrderService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -20,6 +31,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.hotelshop.entity.HotelShop; +import org.jeecg.modules.hotelshop.service.IHotelShopService; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -27,6 +40,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -49,6 +63,16 @@ import org.jeecg.common.aspect.annotation.AutoLog; public class HotelOrderController extends JeecgController { @Autowired private IHotelOrderService hotelOrderService; + @Resource + private IHotelShopService hotelShopService; + @Resource + private IHotelMemberAccountService hotelMemberAccountService; + @Resource + private IHotelConfService hotelConfService; + @Resource + private IHotelBalanceLogService hotelBalanceLogService; + @Resource + private IHotelLeaseLogService hotelLeaseLogService; /** * 分页列表查询 @@ -71,6 +95,75 @@ public class HotelOrderController extends JeecgController pageList = hotelOrderService.page(page, queryWrapper); return Result.OK(pageList); } + + /** + * 水洗分页列表查询 + * + * @param hotelOrder + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_order-分页列表查询") + @ApiOperation(value="水洗分页列表查询", notes="水洗分页列表查询") + @GetMapping(value = "/wash/list") + public Result> queryPageWashList(HotelOrder hotelOrder, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelOrder, req.getParameterMap()); + queryWrapper.eq("type",1); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelOrderService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 换货分页列表查询 + * + * @param hotelOrder + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_order-分页列表查询") + @ApiOperation(value="换货分页列表查询", notes="换货分页列表查询") + @GetMapping(value = "/replace/list") + public Result> queryPageReplaceList(HotelOrder hotelOrder, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelOrder, req.getParameterMap()); + queryWrapper.eq("type",2); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelOrderService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 退货分页列表查询 + * + * @param hotelOrder + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_order-分页列表查询") + @ApiOperation(value="退货分页列表查询", notes="退货分页列表查询") + @GetMapping(value = "/refund/list") + public Result> queryPageRefundList(HotelOrder hotelOrder, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelOrder, req.getParameterMap()); + queryWrapper.eq("type",3); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelOrderService.page(page, queryWrapper); + return Result.OK(pageList); + } /** * 添加 @@ -168,4 +261,131 @@ public class HotelOrderController extends JeecgController damageAudit(@RequestBody HotelOrder hotelOrder3) { + HotelOrder hotelOrder = new HotelOrder(); + hotelOrder.setId(hotelOrder3.getId()); + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrder3.getLeaseId()) + .one(); + + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hotelOrder3.getShopId()) + .one(); + HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); + if(hotelOrder3.getAudit() == 0){ + if(hotelOrder3.getNum() > hotelOrder3.getRefundNum()){ + hotelOrder.setStatus(6); + + + + hotelLeaseLog2.setUserId(hotelLeaseLog.getUserId()); + hotelLeaseLog2.setShopId(hotelLeaseLog.getShopId()); + hotelLeaseLog2.setOrderId(hotelLeaseLog.getOrderId()); + hotelLeaseLog2.setGoodsId(hotelLeaseLog.getGoodsId()); + hotelLeaseLog2.setSkuId(hotelLeaseLog.getSkuId()); + hotelLeaseLog2.setGoodsName(hotelLeaseLog.getGoodsName()); + hotelLeaseLog2.setGoodsPic(hotelLeaseLog.getGoodsPic()); + hotelLeaseLog2.setSku(hotelLeaseLog.getSku()); + hotelLeaseLog2.setStatus(1); + hotelLeaseLog2.setNum(hotelOrder3.getRefundNum()); + hotelLeaseLog2.setPrice(hotelLeaseLog.getPrice()); + hotelLeaseLog2.setCategoryId(hotelLeaseLog.getCategoryId()); + hotelLeaseLogService.save(hotelLeaseLog2); + + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setNum(hotelLeaseLog.getNum()-hotelOrder3.getRefundNum()); + hotelLeaseLogService.updateById(hotelLeaseLog1); + + + + + + }else{ + + + HotelMemberAccount hotelMemberAccount = hotelMemberAccountService.lambdaQuery() + .eq(HotelMemberAccount::getDelFlag, 0) + .eq(HotelMemberAccount::getUserId, hotelShop.getUserId()) + .one(); + + + BigDecimal platformServiceRate = new BigDecimal(hotelConfService.getConf("platformServiceRate")); + BigDecimal platformServicePrice = hotelOrder.getOrderPay().multiply(platformServiceRate); + BigDecimal shopPrice = hotelOrder.getOrderPay().multiply(hotelShop.getRate()); + BigDecimal price = hotelMemberAccount.getShopBalance().add(shopPrice); + + + HotelMemberAccount hotelMemberAccount1 = new HotelMemberAccount(); + hotelMemberAccount1.setId(hotelMemberAccount.getId()); + hotelMemberAccount1.setShopBalance(price); + hotelMemberAccountService.updateById(hotelMemberAccount1); + + + HotelBalanceLog hotelBalanceLog = new HotelBalanceLog(); + hotelBalanceLog.setUserId(hotelShop.getUserId()); + hotelBalanceLog.setBalance(shopPrice); + hotelBalanceLog.setUserBalance(hotelMemberAccount.getShopBalance()); + hotelBalanceLog.setType(2); + hotelBalanceLog.setTitle("佣金到账"); + hotelBalanceLog.setPayType(1); + hotelBalanceLog.setPlatformServicePrice(platformServicePrice); + hotelBalanceLog.setOrderId(hotelOrder3.getId()); + hotelBalanceLogService.save(hotelBalanceLog); + + + + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setStatus(1); + hotelLeaseLogService.updateById(hotelLeaseLog1); + + + hotelOrder.setStatus(15); + } + + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setReason(hotelOrder3.getReason()); + hotelOrder1.setRefundNum(hotelOrder3.getRefundNum()); + hotelOrder1.setReasonPrice(hotelOrder3.getReasonPrice()); + hotelOrder1.setType(2); + hotelOrder1.setReasonInfo(hotelOrder3.getReasonInfo()); + hotelOrder1.setReasonPic(hotelOrder3.getReasonPic()); + hotelOrder1.setReasonPhone(hotelOrder3.getReasonPhone()); + hotelOrder1.setUserId(hotelOrder3.getUserId()); + hotelOrder1.setShopId(hotelLeaseLog.getShopId()); + hotelOrder1.setGoodsId(hotelLeaseLog.getGoodsId()); + hotelOrder1.setGoodsName(hotelLeaseLog.getGoodsName()); + hotelOrder1.setSkuId(hotelLeaseLog.getSkuId()); + hotelOrder1.setSku(hotelLeaseLog.getSku()); + hotelOrder1.setPic(hotelLeaseLog.getGoodsPic()); + hotelOrder1.setStatus(7); + hotelOrder1.setLeaseId(hotelOrder3.getNum() > hotelOrder3.getRefundNum()?hotelLeaseLog2.getId():hotelLeaseLog.getId()); + hotelOrder1.setUserName(hotelShop.getUserName()); + hotelOrder1.setUserPhone(hotelShop.getPhone()); + hotelOrder1.setUserAddress(hotelShop.getAddress()); + hotelOrder1.setShopId(hotelShop.getUserId()); + hotelOrderService.save(hotelOrder1); + + }else{ + hotelOrder.setStatus(5); + } + hotelOrderService.updateById(hotelOrder); + return Result.OK("编辑成功!"); + } + } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/entity/HotelOrder.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/entity/HotelOrder.java index 64b3413..dcae5d0 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/entity/HotelOrder.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/entity/HotelOrder.java @@ -111,7 +111,7 @@ public class HotelOrder implements Serializable { @ApiModelProperty(value = "状态 \n" + "租赁订单:0待支付 1待发货 2待收货 \n" + "水洗订单:3待支付 4水洗店接单 5水洗店检查\n" + - "6开始清洗 \n" + + "6开始清洗 16 待平台审核\n" + "换货订单:7待回收 8待发货 9平台待收货\n" + "10平台检查损失待用户支付\n" + "退货订单:11待回收 12待发货 13平台待收货\n" + @@ -175,5 +175,7 @@ public class HotelOrder implements Serializable { private String LeaseId; @TableField(exist = false) private List hotelOrderFlows; + @TableField(exist = false) + private Integer audit; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/req/DamageAuditReq.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/req/DamageAuditReq.java new file mode 100644 index 0000000..4a14e4e --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/req/DamageAuditReq.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.hotelorder.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecg.modules.hotelorder.entity.HotelOrder; + +@Data +public class DamageAuditReq { + + /**审核 0通过 1不通过*/ + private Integer audit; + private HotelOrder hotelOrder; + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/controller/HotelShopController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/controller/HotelShopController.java index 9124ab0..653046d 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/controller/HotelShopController.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/controller/HotelShopController.java @@ -22,6 +22,7 @@ import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService; import org.jeecg.modules.hotelmemberaccount.entity.HotelMemberAccount; import org.jeecg.modules.hotelmemberaccount.service.IHotelMemberAccountService; import org.jeecg.modules.hotelshop.entity.HotelShop; +import org.jeecg.modules.hotelshop.req.AuditShopReq; import org.jeecg.modules.hotelshop.service.IHotelShopService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -29,6 +30,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.hotelshoplog.entity.HotelShopLog; +import org.jeecg.modules.hotelshoplog.service.IHotelShopLogService; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -62,6 +65,8 @@ public class HotelShopController extends JeecgController audit(@RequestBody AuditShopReq auditShopReq) { + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getId, auditShopReq.getId()) + .one(); + + HanHaiMember haiMember = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getId, hotelShop.getUserId()) + .one(); + + HotelMemberAccount hotelMemberAccount1 = hotelMemberAccountService.lambdaQuery() + .eq(HotelMemberAccount::getDelFlag, 0) + .eq(HotelMemberAccount::getUserId, haiMember.getId()) + .one(); + + HotelShop hotelShop1 = new HotelShop(); + hotelShop1.setId(hotelShop.getId()); + if(auditShopReq.getAudit() == 0){ + String uid = IdWorker.getIdStr(); + hotelShop1.setUserId(uid); + hotelShop1.setNewId(uid); + hotelShop1.setStatus(1); + + hanHaiMemberService.updateUserId(haiMember.getId(),uid); + HotelMemberAccount hotelMemberAccount = new HotelMemberAccount(); + hotelMemberAccount.setId(hotelMemberAccount1.getId()); + hotelMemberAccount.setUserId(uid); + hotelMemberAccountService.updateById(hotelMemberAccount); + + HotelShopLog hotelShopLog = new HotelShopLog(); + hotelShopLog.setOldId(haiMember.getId()); + hotelShopLog.setNewId(uid); + hotelShopLog.setShopId(hotelShop.getId()); + hotelShopLogService.save(hotelShopLog); + + }else{ + hotelShop1.setStatus(2); + } + hotelShopService.updateById(hotelShop1); + return Result.OK("成功!"); + } } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/entity/HotelShop.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/entity/HotelShop.java index 40e5327..c82eff5 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/entity/HotelShop.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/entity/HotelShop.java @@ -99,4 +99,8 @@ public class HotelShop implements Serializable { private BigDecimal rate; @TableField(exist = false) private String password; + /**酒店用户id*/ + private String oldId; + /**水洗店用户id*/ + private String newId; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/req/AuditShopReq.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/req/AuditShopReq.java new file mode 100644 index 0000000..bc4507f --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/req/AuditShopReq.java @@ -0,0 +1,13 @@ +package org.jeecg.modules.hotelshop.req; + +import lombok.Data; + +@Data +public class AuditShopReq { + + /**店铺id*/ + private String id; + /**0审核通过 1审核不通过*/ + private Integer audit; + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/controller/HotelShopLogController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/controller/HotelShopLogController.java new file mode 100644 index 0000000..a3f6a15 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/controller/HotelShopLogController.java @@ -0,0 +1,171 @@ +package org.jeecg.modules.hotelshoplog.controller; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.hotelshoplog.entity.HotelShopLog; +import org.jeecg.modules.hotelshoplog.service.IHotelShopLogService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; + + /** + * @Description: hotel_shop_log + * @Author: jeecg-boot + * @Date: 2024-10-12 + * @Version: V1.0 + */ +@Api(tags="hotel_shop_log") +@RestController +@RequestMapping("/hotelshoplog/hotelShopLog") +@Slf4j +public class HotelShopLogController extends JeecgController { + @Autowired + private IHotelShopLogService hotelShopLogService; + + /** + * 分页列表查询 + * + * @param hotelShopLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_shop_log-分页列表查询") + @ApiOperation(value="hotel_shop_log-分页列表查询", notes="hotel_shop_log-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(HotelShopLog hotelShopLog, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelShopLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelShopLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param hotelShopLog + * @return + */ + @AutoLog(value = "hotel_shop_log-添加") + @ApiOperation(value="hotel_shop_log-添加", notes="hotel_shop_log-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody HotelShopLog hotelShopLog) { + hotelShopLogService.save(hotelShopLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param hotelShopLog + * @return + */ + @AutoLog(value = "hotel_shop_log-编辑") + @ApiOperation(value="hotel_shop_log-编辑", notes="hotel_shop_log-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody HotelShopLog hotelShopLog) { + hotelShopLogService.updateById(hotelShopLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "hotel_shop_log-通过id删除") + @ApiOperation(value="hotel_shop_log-通过id删除", notes="hotel_shop_log-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + hotelShopLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "hotel_shop_log-批量删除") + @ApiOperation(value="hotel_shop_log-批量删除", notes="hotel_shop_log-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.hotelShopLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "hotel_shop_log-通过id查询") + @ApiOperation(value="hotel_shop_log-通过id查询", notes="hotel_shop_log-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + HotelShopLog hotelShopLog = hotelShopLogService.getById(id); + if(hotelShopLog==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(hotelShopLog); + } + + /** + * 导出excel + * + * @param request + * @param hotelShopLog + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HotelShopLog hotelShopLog) { + return super.exportXls(request, hotelShopLog, HotelShopLog.class, "hotel_shop_log"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, HotelShopLog.class); + } + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/entity/HotelShopLog.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/entity/HotelShopLog.java new file mode 100644 index 0000000..78d2c59 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/entity/HotelShopLog.java @@ -0,0 +1,65 @@ +package org.jeecg.modules.hotelshoplog.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: hotel_shop_log + * @Author: jeecg-boot + * @Date: 2024-10-12 + * @Version: V1.0 + */ +@Data +@TableName("hotel_shop_log") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="hotel_shop_log对象", description="hotel_shop_log") +public class HotelShopLog implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**老用户id*/ + @Excel(name = "老用户id", width = 15) + @ApiModelProperty(value = "老用户id") + private java.lang.String oldId; + /**新用户Id*/ + @Excel(name = "新用户Id", width = 15) + @ApiModelProperty(value = "新用户Id") + private java.lang.String newId; + /**水洗店id*/ + @Excel(name = "水洗店id", width = 15) + @ApiModelProperty(value = "水洗店id") + private java.lang.String shopId; + /**是否删除*/ + @Excel(name = "是否删除", width = 15, dicCode = "is_delete") + @Dict(dicCode = "is_delete") + @ApiModelProperty(value = "是否删除") + private java.lang.Integer delFlag; + /**createTime*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "createTime") + private java.util.Date createTime; + /**updateTime*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "updateTime") + private java.util.Date updateTime; +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/HotelShopLogMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/HotelShopLogMapper.java new file mode 100644 index 0000000..b88503b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/HotelShopLogMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.hotelshoplog.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.hotelshoplog.entity.HotelShopLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: hotel_shop_log + * @Author: jeecg-boot + * @Date: 2024-10-12 + * @Version: V1.0 + */ +public interface HotelShopLogMapper extends BaseMapper { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/xml/HotelShopLogMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/xml/HotelShopLogMapper.xml new file mode 100644 index 0000000..823b63b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/mapper/xml/HotelShopLogMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/IHotelShopLogService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/IHotelShopLogService.java new file mode 100644 index 0000000..b45db64 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/IHotelShopLogService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.hotelshoplog.service; + +import org.jeecg.modules.hotelshoplog.entity.HotelShopLog; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: hotel_shop_log + * @Author: jeecg-boot + * @Date: 2024-10-12 + * @Version: V1.0 + */ +public interface IHotelShopLogService extends IService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/impl/HotelShopLogServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/impl/HotelShopLogServiceImpl.java new file mode 100644 index 0000000..6bdb5ee --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/service/impl/HotelShopLogServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.hotelshoplog.service.impl; + +import org.jeecg.modules.hotelshoplog.entity.HotelShopLog; +import org.jeecg.modules.hotelshoplog.mapper.HotelShopLogMapper; +import org.jeecg.modules.hotelshoplog.service.IHotelShopLogService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: hotel_shop_log + * @Author: jeecg-boot + * @Date: 2024-10-12 + * @Version: V1.0 + */ +@Service +public class HotelShopLogServiceImpl extends ServiceImpl implements IHotelShopLogService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/HotelShopLogList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/HotelShopLogList.vue new file mode 100644 index 0000000..885f26b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/HotelShopLogList.vue @@ -0,0 +1,190 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogForm.vue new file mode 100644 index 0000000..de4a73b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogForm.vue @@ -0,0 +1,120 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.Style#Drawer.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.Style#Drawer.vue new file mode 100644 index 0000000..40d86a6 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.vue new file mode 100644 index 0000000..7eefa6f --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue/modules/HotelShopLogModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.api.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.api.ts new file mode 100644 index 0000000..c449109 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.api.ts @@ -0,0 +1,61 @@ +import {defHttp} from '/@/utils/http/axios'; +import {Modal} from 'ant-design-vue'; + +enum Api { + list = '/hotelshoplog/hotelShopLog/list', + save='/hotelshoplog/hotelShopLog/add', + edit='/hotelshoplog/hotelShopLog/edit', + deleteOne = '/hotelshoplog/hotelShopLog/delete', + deleteBatch = '/hotelshoplog/hotelShopLog/deleteBatch', + importExcel = '/hotelshoplog/hotelShopLog/importExcel', + exportXls = '/hotelshoplog/hotelShopLog/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + Modal.confirm({ + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.data.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.data.ts new file mode 100644 index 0000000..2e2f1d5 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLog.data.ts @@ -0,0 +1,56 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '老用户id', + align:"center", + dataIndex: 'oldId' + }, + { + title: '新用户Id', + align:"center", + dataIndex: 'newId' + }, + { + title: '水洗店id', + align:"center", + dataIndex: 'shopId' + }, + { + title: '是否删除', + align:"center", + dataIndex: 'delFlag_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '老用户id', + field: 'oldId', + component: 'Input', + }, + { + label: '新用户Id', + field: 'newId', + component: 'Input', + }, + { + label: '水洗店id', + field: 'shopId', + component: 'Input', + }, + { + label: '是否删除', + field: 'delFlag', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"is_delete" + }, + }, +]; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLogList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLogList.vue new file mode 100644 index 0000000..701f3e2 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/HotelShopLogList.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/components/HotelShopLogModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/components/HotelShopLogModal.vue new file mode 100644 index 0000000..3f0963e --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshoplog/vue3/components/HotelShopLogModal.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/config/shiro/ShiroConfig.class b/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/config/shiro/ShiroConfig.class index d6af4af37efd8e79ebb6632048f5a881c23e3506..f77cfc1b55565a0c390f73cbc6d0c521b54e307c 100644 GIT binary patch delta 3297 zcmZ`*2XvHG7XH5X&*Y!{`4hrGfJBXf6%I=hbKocnTVUOC_GlVw!;7u9Xd=3&~=#1lmKfaF?D`^c__gA z0NVuEHo$f^+dF8(dsXv3n;in|n8Z%(9AFolT^)2}fqLi`VD|ufDA`ko`*rAL^8p7v zG=?55wAtH1FAc1ZgF@XbWMAFsr|kZYI2fSRz>v*B4hE{kKn~VnNPt6i9%i%1L6O=h zb}(EehSSo}h6gwzi6dEJbCiQI%2~HbtDrztgEsYjHWq12-~Jf_Q;4rg(;F6Y>s>tLS7HP69(G6-;i8eM2} zkicSy z+We2?)#mdyU$C)785o9kSb zbG^+CE-Sdv=F2X_tR$Et)?99472zu^DlQWHE;lpcF=axgn>V_o-^jc^qf15=4Kokda)%B(xs7P%&9j^NUGCzWUd>vC8E>iVZocjE9qw^)5~p15<-5e) z-UBz)_EyxoGjpGc?B{DlQm>-oUWI+f3@Rxe>GC~pS9@0y>v<`)i>=jo&YM*GFNp_S z9#l?4Z+%*ZcdT}D-7`4r@_im6%%Hw5KhR)4lsc)@DIHEL)@M|=(&brh_tvI$toKza zzpjzMZ&LZK%X2*M@;iR7ruSxMc`fU-OfKgSE`Q`tF3S0{H@VI&S--fvpx!>`uQo5b zyd-Xf`J2njn#BeJbX{+f?N9l8aZ&$418iP#jabA_BW{n*9&1#A)^`va$3)WwlTB|-F~cy`jKefD71PaJ z%rJ{F)0ASCS%=wXGv=8cSYY;Hp*ey@<^-0Q^H^>!VTEO5l~og~txP;;wLqEG3eQ`2 z<0Y#-)>xgf*6J=PP#k+85&0n`p$eOYY=&$^pa=?nacq^^idO{VfYk}F%25o`tbgNm zY!k%mTYttIqU#fP`PeRdesS6gJFrs{wo6>pxhDT6thm%$;$gS&X25p^e+?ng#@jaD zv9ZU-UK{V)*e5?qimxCO{_D81YxcvwZa1pAAHJA{fYm^LSH#EvkrSipN##OT1L8dq z^;1rYXa%Rpc@N0{!R}y*oLV{W$0|%}+9*P35kZfFO7v`#lO4wW5%iM918pNHl(~0H zU%JlB z2*R4I+hSg?<^?Tq2p?!(&{VWORGdZcBOI1EGjRis;A5%B_`weS&x36h^`jwtBD#9> z?w8rfoDso5ImDp+Yzcm_4nwkoL&F%Btu-DCy-qZmJ>q?@M1BB497H|ANF&vpir(OZI9+FkCc8L=!Wz8r&&S_NNl_F^TzjG}bJHqB_@Ltq}!NVYTrkPKeFxYC{`Q z%(c8vLTk{&MNH4!cmqm;qpC34$VD0>L5$7Mmb8xxV|;e-!7v`m4o(Q;;c7T$Ae11A zXQgR)7s=jSs_dhn=oeyQsT_n zVa(0RFT;Zo%oAIWw~1iB%ulra-COQvc#zKWq`@@{&SEr=U_n7{O?#jG0?LpuXGgG5 zv=>$4sg}OqJuJ@A+q0w$wW2zeSSsA;R!)8t!f3liZz(+BH#pKT8cEl*546 zaEdoZQ*oaZ#jR*9z<(vc7fCgJjc+6o+fY-Ic1~{FG3k0SYCMWX?!3rN#sEp>_tDxr z6HntQ*^lY&lKU_38RKFfzq%T*{$=1I zE(u@nK%&8Ssj0Y_Dwk8>zWQF*S9N6vS8l?p3Y4hn>Nhr9fVnJtM%sBiVAU|v`=sib XVQiCR0!ZiMvLR4#J}f>#k5B#=dNSlw delta 3226 zcmZ`*32;gD|0?S{BlvX2OZ;Fceca>7di3i-t)z!`w7YhSPF0BAk(oax>aJ z?_V3d1~W{wVy3cbZLp1-&xf-u+qwCI!S*KFv4is6(alb7c2;DTTC&yB#b8$x*(!QA zyBX|mqMJ&ohlw7F*@G_%hdD~z)06XsM_XZjMwoqfCzG7?Wc;E}Y}} zlEDck3dK~|UZFVAq<1t66*);UCoAe@wM)D=MHR~k()oDPw#){4C|knGuXm9ykl^!#dVau%;I`(Fu2j;CYBRSlUNov^IgJ` zlV6Z8(JlH|VH=U-%hyEC*WG2@V&QG9v7hmDj;gd+ML(hEjT%lg4CUaq_jChyj3lSU5BQ<|RPCIET}pX3_gMUhA6qz&3l{fsAMqdi zuq(zsQ2U7o_A8YG+)9M^$S>%T(|cs@u!5l$Kj98>I8$GR68oK)f4UA@JS41ZF)4K} z;*!O~JVI!>y)7P9@sDwf{aEbd^;Y9egP&SF&d&^T5-Pqn7guLCN6R{050)-!#li#m#o1S@ndJTW_k&ZGR z8p_W-_=F}iuW6dg!ms$vuAlf1y6x=5OO7z2fxRKIj@><}iMLpu62O532%F5)-T05sT@*yitW$92!F&(Y#q6W`7+hYeh z*ykIxs+G%S$YUu6aFaYl+fZOXo&1n@td@##S~HB-o`zS;z(lPR3bme?qz%GkZ8WB6 zlQCVJgBe;8W@;svt*wWxRbhd)3k$VFSgf7IQtbkkYuB+-yMIix5PUASwUAp)D>aKKsYL}1z}z^K`JUyCEy4&A=nh<$5w&Qt+&87Y!{?s^(J^v zE~6t!PsaOV?2vF7*eN`x1Z{y2@S)UVmxPGBr@tF|NNbNo_(){a;Hbt^2s7}pfxTV> z`wZ+iaKOMP@}pF*8uj1|itkBC}LLK;xrOfGgzHZ^tsdojP5pTw79 zD&6WucOf)UO7NqvT%un_swCfEExDqI*U_ID@m&@`1@t3>X7$KL$z?gH%Y?8154RH)_z8 z8{!iI?G$#E6VkDf>ttMx}a2`!FWeGuDT3 zHE>LjIRP%obL71&;9L>dzDFXiA{p0efY~qvrboa%k8dR`A)h1(D&cuUAXF`RS%n`T z2rn<$OFm54jo1+7gSQeBi6Tgk7D{T9GSh;h$v(U+q*obC@nLF+JUl!o=rE{*}J1N9Y)RLn8Ak%hMsu`rlpg{Dlie4f5Nhz-f z`s{M3j2DF;v{i4UB|Zw_Rcb$qntB==z?FO(&q@#8xCzG{^cLzT13yPqi>?-U`+gBM zHBq5{j5gJmIM@(qE$tAP!4yB1WXb!qRQ{Iv@OlN7S7L>RPV!+A4YewJ2o&C$qpK2D z{}ON$zl(yJfiMl%qN8y$T82~LzWXUoQua#hDc*vW0p<_kX}Ena;X86v b9V=gTP1g*~fp`yR2}7{pZ0MZBxqS7%mJ8(B diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/hanHaiMember/mapper/HanHaiMemberMapper.class b/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/hanHaiMember/mapper/HanHaiMemberMapper.class index 7e67865700e4344cd43b630f0f097ac578be3cdd..de94076fa9b094fef90a44fe74903c276e6e98b7 100644 GIT binary patch delta 164 zcmZ3^v5iys)W2Q(7#J8#7^K-5B-j}w*%_oZ3g<8h@RSy$B$lLx7N-_@rZ6&CPL^g; zSI9~%OVrOv%uCnz%qvMvPc5=$WMIwDNdc)~%}XucT+L*}$jCf-9do)H3nPOdgAfA~ t0~^qIP9_FnASD9C+(0bO#K6eF1H`<=Kyf%z1gM%5D9ywm${+@&#Q`Xy93B7w delta 58 zcmdnSxtv4z)W2Q(7#J8#7{u8bMA#Wb*%`z(3g<9wzQv@+$jCIAlO select (select count(1) from han_hai_member where shop_id = #{shopId}) user, - (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (0,1,2) and type = 0) lease, - (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (0,1,2) and type = 1) wash, - (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (0,1,2) and type = 2) worn, - (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (0,1,2) and type = 3) refund + (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (1,2,15) and type = 0) lease, + (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (4,5,6,15,16) and type = 1) wash, + (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (7,8,9,10,15) and type = 2) worn, + (select count(1) from hotel_order where shop_id = #{userId} and del_flag = 0 and status in (11,12,13,14,15) and type = 3) refund + + UPDATE han_hai_member SET id = #{newId} WHERE id = #{oldId} + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/hanHaiMember/service/IHanHaiMemberService.class b/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/hanHaiMember/service/IHanHaiMemberService.class index c9527d25ac2098fc99acbbe3e3a055c040d38e9e..09398f98709a3c8a24340a576a751554257e2d37 100644 GIT binary patch delta 259 zcmZ3-K8aKK)W2Q(7#J8#7^K-5B-j}w*%_oZ3X3xd@RSy$B$lLx7N-_@rZ6&CPCmw{ zUZ0g%mZ+bTn3t~anOBmUo?2wh$iSMPlLAt~nwMG*qLqS5^GY&vQ^PWgGm~;s0}_i8 zb5l!FiyZUv@=Fp+GV}9_85vZ4@{7{-6AKcPGg9?4lYqj-`iTey`e0ok!^;wLN>dpb zYJEUfZ#G~uWn^TYoW^YC#=^+J$H33P#J~o0Jtq@`0FV*{Vj&Yp)8YWxOFeP` delta 58 zcmbQlxsF}<)W2Q(7#J8#7)00^1lbvc*cpU33X3yszQttC$jCHVjKxfdfr)_=sDz1u KkAWXd3jhFi-3b!_ diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/hanHaiMember/service/impl/HanHaiMemberServiceImpl.class b/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/hanHaiMember/service/impl/HanHaiMemberServiceImpl.class index a035f68d7acb55836ddf53f98178c9334ee3b55d..8ea57801b5b6fce85a464a13e4edf52bb6aceaf2 100644 GIT binary patch delta 600 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%0Ac!0$K^a$$Z9nqbvZt>J2A~C=XVsmQ=hV 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 couponPage(CouponPageReq couponPageReq); + +} diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/service/impl/CouponServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/service/impl/CouponServiceImpl.java new file mode 100644 index 0000000..7b66424 --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/coupon/service/impl/CouponServiceImpl.java @@ -0,0 +1,39 @@ +package org.jeecg.modules.xcx.coupon.service.impl; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.config.shiro.ShiroRealm; +import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; +import org.jeecg.modules.hotelcouponlog.entity.HotelCouponLog; +import org.jeecg.modules.hotelcouponlog.service.IHotelCouponLogService; +import org.jeecg.modules.xcx.coupon.req.CouponPageReq; +import org.jeecg.modules.xcx.coupon.service.ICouponService; +import org.jeecgframework.codegenerate.a.a; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Slf4j +@Service +public class CouponServiceImpl implements ICouponService { + + @Resource + private IHotelCouponLogService hotelCouponLogService; + @Resource + private ShiroRealm shiroRealm; + + @Override + public Result couponPage(CouponPageReq couponPageReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(couponPageReq.getToken()); + Page page = new Page<>(couponPageReq.getPageNo(), couponPageReq.getPageSize()); + Page hotelCouponLogPage = hotelCouponLogService.lambdaQuery() + .eq(HotelCouponLog::getDelFlag, 0) + .eq(HotelCouponLog::getStatus, 0) + .eq(HotelCouponLog::getUserId, hanHaiMember.getId()) + .orderByDesc(HotelCouponLog::getCreateTime) + .page(page); + + return Result.OK(hotelCouponLogPage); + } +} diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/req/JoinShoppingCartReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/req/JoinShoppingCartReq.java index 5a6024e..27c00c4 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/req/JoinShoppingCartReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/req/JoinShoppingCartReq.java @@ -12,6 +12,8 @@ public class JoinShoppingCartReq { @ApiModelProperty(value = "规格id") private String skuId; private String token; + @ApiModelProperty(value = "数量") + private Integer num = 1; } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/service/impl/GoodsServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/service/impl/GoodsServiceImpl.java index 7060403..9fa2c06 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/service/impl/GoodsServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/goods/service/impl/GoodsServiceImpl.java @@ -132,11 +132,11 @@ public class GoodsServiceImpl implements IGoodsService { hotelShoppingCat.setGoodsId(hotelGoods.getId()); hotelShoppingCat.setSkuId(hotelGoodsSku.getId()); hotelShoppingCat.setUserId(hanHaiMember.getId()); - hotelShoppingCat.setNum(1); + hotelShoppingCat.setNum(joinShoppingCartReq.getNum()); hotelShoppingCatService.save(hotelShoppingCat); }else{ hotelShoppingCat.setId(hotelShoppingCat1.getId()); - hotelShoppingCat.setNum(hotelShoppingCat1.getNum() + 1); + hotelShoppingCat.setNum(hotelShoppingCat1.getNum() + joinShoppingCartReq.getNum()); hotelShoppingCatService.updateById(hotelShoppingCat1); } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java index f6c5b28..52736e3 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java @@ -88,4 +88,18 @@ public class OrderController { return orderService.confirmAcceptOrder(confirmAcceptOrderReq); } + + @ApiOperation(value = "换货支付") + @PostMapping("/replace/pay") + public Result replaceOrderPay(HttpServletRequest request,ReplaceOrderPayReq replaceOrderPayReq){ + replaceOrderPayReq.setToken(TokenUtils.getTokenByRequest(request)); + return orderService.replaceOrderPay(replaceOrderPayReq); + } + + + @PostMapping("/replace/notify") + public Object replaceOrderNotify(String requestBody){ + return orderService.replaceOrderNotify(requestBody); + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ConfirmAcceptOrderReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ConfirmAcceptOrderReq.java index 63ab541..a288dc2 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ConfirmAcceptOrderReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ConfirmAcceptOrderReq.java @@ -2,6 +2,7 @@ package org.jeecg.modules.xcx.order.req; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.Value; @Data public class ConfirmAcceptOrderReq { @@ -10,8 +11,21 @@ public class ConfirmAcceptOrderReq { /**订单id*/ @ApiModelProperty(value = "订单id") private String id; - /**0确认接单 0确认 1不确认*/ - @ApiModelProperty(value = "0确认接单 0确认 1不确认") + /**0确认接单 1确认正常 2破损上报*/ + @ApiModelProperty(value = "0确认接单 1确认正常 2破损上报") private Integer flag = 0; + /**商品id*/ + @ApiModelProperty(value = "商品id") + private String goodsId; + /**退货数量*/ + @ApiModelProperty(value = "退货数量") + private Integer num; + /**详细说明*/ + @ApiModelProperty(value = "详细说明") + private String info; + /**图片、视频*/ + @ApiModelProperty(value = "图片、视频") + private String pic; + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPageReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPageReq.java index fcb60ef..d6423f2 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPageReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPageReq.java @@ -12,7 +12,7 @@ public class OrderPageReq { @ApiModelProperty(value = "订单类型 0租赁 1水洗 2破损 3退货") private Integer type; @ApiModelProperty(value = "用户Id") - private String userId; + private String uid; private String token; } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPayReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPayReq.java index 25d27f9..e0318a6 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPayReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/OrderPayReq.java @@ -8,6 +8,8 @@ public class OrderPayReq { @ApiModelProperty(value = "orderLogId") private String id; + @ApiModelProperty(value = "优惠券id") + private String couponId; private String token; } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ReplaceOrderPayReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ReplaceOrderPayReq.java new file mode 100644 index 0000000..77ee31d --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ReplaceOrderPayReq.java @@ -0,0 +1,12 @@ +package org.jeecg.modules.xcx.order.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ReplaceOrderPayReq { + + private String token; + @ApiModelProperty(value = "订单id") + private String id; +} diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java index 93f05e4..a62e452 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java @@ -82,4 +82,19 @@ public interface IOrderService { * @return */ Result cancelOrder(CancelOrderReq cancelOrderReq); + + + /** + * 换货订单支付接口 + * @param replaceOrderPayReq + * @return + */ + Result replaceOrderPay(ReplaceOrderPayReq replaceOrderPayReq); + + /** + * 换货订单支付回调 + * @param requestBody + * @return + */ + Object replaceOrderNotify(String requestBody); } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java index 1754bfa..d68f233 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java @@ -27,6 +27,8 @@ import org.jeecg.modules.hotelcategory.entity.HotelCategory; import org.jeecg.modules.hotelcategory.service.IHotelCategoryService; import org.jeecg.modules.hotelconf.entity.HotelConf; import org.jeecg.modules.hotelconf.service.IHotelConfService; +import org.jeecg.modules.hotelcouponlog.entity.HotelCouponLog; +import org.jeecg.modules.hotelcouponlog.service.IHotelCouponLogService; import org.jeecg.modules.hotelgoods.entity.HotelGoods; import org.jeecg.modules.hotelgoods.service.IHotelGoodsService; import org.jeecg.modules.hotelgoodssku.entity.HotelGoodsSku; @@ -83,6 +85,8 @@ public class OrderServiceImpl implements IOrderService { private IHotelConfService hotelConfService; @Value("${weixin.orderNotifyUrl}") private String orderNotifyUrl; + @Value("${weixin.replaceOrderNotifyUrl}") + private String replaceOrderNotifyUrl; @Resource private IHotelOrderLogService hotelOrderLogService; @Resource @@ -95,6 +99,8 @@ public class OrderServiceImpl implements IOrderService { private IHotelCategoryService hotelCategoryService; @Resource private IHotelOrderFlowService hotelOrderFlowService; + @Resource + private IHotelCouponLogService hotelCouponLogService; @@ -104,19 +110,23 @@ public class OrderServiceImpl implements IOrderService { Page page = new Page<>(orderPageReq.getPageNo(), orderPageReq.getPageSize()); LambdaQueryChainWrapper queryChainWrapper = hotelOrderService.lambdaQuery(); queryChainWrapper.eq(HotelOrder::getDelFlag , 0); - if(StringUtils.isBlank(orderPageReq.getUserId())){ + if(StringUtils.isBlank(orderPageReq.getUid())){ queryChainWrapper.and(ew->ew.eq(HotelOrder::getUserId,hanHaiMember.getId()).or().eq(HotelOrder::getShopId,hanHaiMember.getId())); }else{ + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hanHaiMember.getId()) + .one(); HanHaiMember haiMember = hanHaiMemberService.lambdaQuery() - .eq(HanHaiMember::getId, orderPageReq.getUserId()) - .eq(HanHaiMember::getShopId, hanHaiMember.getId()) + .eq(HanHaiMember::getId, orderPageReq.getUid()) + .eq(HanHaiMember::getShopId, hotelShop.getId()) .one(); if(haiMember == null){ throw new JeecgBootException("数据错误,请刷新重试"); } - queryChainWrapper.eq(HotelOrder::getUserId,orderPageReq.getUserId()); + queryChainWrapper.eq(HotelOrder::getUserId,orderPageReq.getUid()); } @@ -518,6 +528,28 @@ public class OrderServiceImpl implements IOrderService { .eq(HotelOrderLog::getIsPay, 0) .one(); + HotelCouponLog hotelCouponLog = hotelCouponLogService.lambdaQuery() + .eq(HotelCouponLog::getDelFlag, 0) + .eq(HotelCouponLog::getUserId, hanHaiMember.getId()) + .eq(HotelCouponLog::getId, orderPayReq.getCouponId()) + .one(); + + HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); + BigDecimal multiply = BigDecimal.ZERO; + + if(hotelCouponLog != null){ + if(hotelOrderLog.getOrderPay().compareTo(hotelCouponLog.getConditionPrice()) >= 0){ + multiply = hotelOrderLog.getOrderPay().subtract(hotelCouponLog.getPrice()); + + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); + hotelCouponLogService.updateById(hotelCouponLog1); + + } + } + + multiply = multiply.multiply(new BigDecimal(100)); // HotelOrder hotelOrder = hotelOrderService.lambdaQuery() // .eq(HotelOrder::getDelFlag, 0) // .eq(HotelOrder::getId, orderPayReq.getId()) @@ -528,8 +560,7 @@ public class OrderServiceImpl implements IOrderService { // .eq(HotelGoods::getId, hotelOrder.getGoodsId()) // .one(); - HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); - BigDecimal multiply = hotelOrderLog.getOrderPay().multiply(new BigDecimal(100)); + Object order = mpWxPayService.createOrder("酒店桌布", oConvertUtils.getIpAddrByRequest(req), hotelOrderLog.getId(), multiply.intValue(), hotelOrderLog.getId(), hanHaiMember.getAppletOpenid(),orderNotifyUrl,"{}"); return Result.OK(order); @@ -538,6 +569,11 @@ public class OrderServiceImpl implements IOrderService { @Override public Object orderNotify(String requestBody) { WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + //对比outTradeNo进行业务处理 + if (notify == null){ + //会继续通知 + return "FAIL"; + } String outTradeNo = notify.getOutTradeNo(); System.err.println(outTradeNo); HotelOrderLog hotelOrderLog = hotelOrderLogService.lambdaQuery() @@ -555,6 +591,20 @@ public class OrderServiceImpl implements IOrderService { System.err.println("订单未找到"); return "FAIL"; } + HotelCouponLog hotelCouponLog = hotelCouponLogService.lambdaQuery() + .eq(HotelCouponLog::getDelFlag, 0) + .eq(HotelCouponLog::getStatus, 0) + .eq(HotelCouponLog::getOrderLogId, hotelOrderLog.getId()) + .one(); + + if(hotelCouponLog != null){ + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setStatus(1); + hotelCouponLogService.updateById(hotelCouponLog1); + } + + List hotelOrders = new ArrayList<>(); ArrayList hotelLeaseLogs = new ArrayList<>(); Integer type = 0; @@ -642,11 +692,7 @@ public class OrderServiceImpl implements IOrderService { hotelOrderService.updateBatchById(hotelOrders); - //对比outTradeNo进行业务处理 - if (notify == null){ - //会继续通知 - return "FAIL"; - } + //不再通知该结果 return "SUCCESS"; } @@ -804,6 +850,22 @@ public class OrderServiceImpl implements IOrderService { break; } + }else if(confirmAcceptOrderReq.getFlag() == 2){/*破损换布流程*/ + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getStatus, 1) + .eq(HotelShop::getUserId, hanHaiMember.getId()) + .one(); + + if(hotelShop == null){ + throw new JeecgBootException("数据错误"); + } + hotelOrder1.setStatus(16); + hotelOrder1.setReason("破损换布"); + hotelOrder1.setRefundNum(confirmAcceptOrderReq.getNum()); + hotelOrder1.setReasonInfo(confirmAcceptOrderReq.getInfo()); + hotelOrder1.setReasonPic(confirmAcceptOrderReq.getPic()); + hotelOrder1.setReasonPhone(hotelShop.getPhone()); } @@ -827,6 +889,68 @@ public class OrderServiceImpl implements IOrderService { return null; } + @Override + public Result replaceOrderPay(ReplaceOrderPayReq replaceOrderPayReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(replaceOrderPayReq.getToken()); + + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getType, 2) + .eq(HotelOrder::getStatus, 10) + .eq(HotelOrder::getUserId,hanHaiMember.getId()) + .eq(HotelOrder::getId, replaceOrderPayReq.getId()) + .one(); + + if(hotelOrder == null){ + throw new JeecgBootException("数据错误,请稍后重试"); + } + + HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); + BigDecimal multiply = hotelOrder.getReasonPrice().multiply(new BigDecimal(100)); + Object order = mpWxPayService.createOrder("酒店桌布换货", oConvertUtils.getIpAddrByRequest(req), hotelOrder.getId(), multiply.intValue(), hotelOrder.getId(), hanHaiMember.getAppletOpenid(),replaceOrderNotifyUrl,"{}"); + + return Result.OK(order); + } + + @Override + public Object replaceOrderNotify(String requestBody) { + WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + //对比outTradeNo进行业务处理 + if (notify == null){ + //会继续通知 + return "FAIL"; + } + String outTradeNo = notify.getOutTradeNo(); + System.err.println(outTradeNo); + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getId, outTradeNo) + .one(); + + if(hotelOrder.getStatus() == 15){ + return "SUCCESS"; + } + + HotelOrder hotelOrder2 = new HotelOrder(); + hotelOrder2.setId(hotelOrder.getId()); + hotelOrder2.setStatus(15); + hotelOrderService.updateById(hotelOrder2); + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrder.getId()) + .one(); + + HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); + hotelLeaseLog2.setId(hotelLeaseLog.getId()); + hotelLeaseLog2.setStatus(0); + hotelLeaseLogService.updateById(hotelLeaseLog2); + + + //不再通知该结果 + return "SUCCESS"; + } + public Object testPay(String id){ HotelOrder hotelOrder = hotelOrderService.lambdaQuery() .eq(HotelOrder::getDelFlag, 0) diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/controller/ShopController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/controller/ShopController.java index a1afb21..46a2079 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/controller/ShopController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/controller/ShopController.java @@ -77,4 +77,11 @@ public class ShopController { bindWxReq.setToken(TokenUtils.getTokenByRequest(request)); return shopService.bindWx(bindWxReq); } + + @ApiOperation(value = "修改店铺信息") + @PostMapping("/edit/info") + public Result editShopInfo(HttpServletRequest request, EditShopInfoReq editShopInfoReq){ + editShopInfoReq.setToken(TokenUtils.getTokenByRequest(request)); + return shopService.editShopInfo(editShopInfoReq); + } } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/ApplyShopReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/ApplyShopReq.java index a9856a3..ac7a759 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/ApplyShopReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/ApplyShopReq.java @@ -21,6 +21,7 @@ public class ApplyShopReq { private String address; private String password; private String token; + private String pic; } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/EditShopInfoReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/EditShopInfoReq.java new file mode 100644 index 0000000..4bb8dc4 --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/EditShopInfoReq.java @@ -0,0 +1,15 @@ +package org.jeecg.modules.xcx.shop.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class EditShopInfoReq { + + private String token; + @ApiModelProperty(value = "店铺图像") + private String pic; + @ApiModelProperty(value = "店铺名") + private String name; + +} diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/IShopService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/IShopService.java index 02963b8..cfe7150 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/IShopService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/IShopService.java @@ -63,4 +63,11 @@ public interface IShopService { Result bindWx(BindWxReq bindWxReq); + /** + * 修改店铺信息 + * @param editShopInfoReq + * @return + */ + Result editShopInfo(EditShopInfoReq editShopInfoReq); + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/impl/ShopServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/impl/ShopServiceImpl.java index 6547c46..7ba5dda 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/impl/ShopServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/service/impl/ShopServiceImpl.java @@ -100,6 +100,7 @@ public class ShopServiceImpl implements IShopService { String encrypt = PasswordUtil.encrypt(applyShopReq.getPassword(), applyShopReq.getPhone(), salt); HanHaiMember hanHaiMember1 = new HanHaiMember(); hanHaiMember1.setId(hanHaiMember.getId()); + hanHaiMember1.setPhone(applyShopReq.getPhone()); hanHaiMember1.setPassword(encrypt); hanHaiMember1.setPasswordSalt(salt); hanHaiMemberService.updateById(hanHaiMember1); @@ -113,6 +114,8 @@ public class ShopServiceImpl implements IShopService { hotelShop1.setLongitude(applyShopReq.getLongitude()); hotelShop1.setAddress(applyShopReq.getAddress()); hotelShop1.setStatus(0); + hotelShop1.setOldId(hanHaiMember.getId()); + hotelShop1.setPic(applyShopReq.getPic()); hotelShopService.save(hotelShop1); return Result.OK(); @@ -134,7 +137,7 @@ public class ShopServiceImpl implements IShopService { if(applyWithdrawalReq.getMoney() == null || applyWithdrawalReq.getMoney().compareTo(BigDecimal.ZERO) <= 0){ throw new JeecgBootException("请填写正确的提现金额"); } - if(applyWithdrawalReq.getMoney().compareTo(hotelMemberAccount.getShopBalance()) == -1){ + if(applyWithdrawalReq.getMoney().compareTo(hotelMemberAccount.getShopBalance()) == 1){ throw new JeecgBootException("提现金额不能大于余额"); } if(StringUtils.isBlank(applyWithdrawalReq.getName())){ @@ -169,7 +172,7 @@ public class ShopServiceImpl implements IShopService { hotelBalanceLog.setBankCard(applyWithdrawalReq.getBankCard()); hotelBalanceLog.setBankAddress(applyWithdrawalReq.getBankAddress()); hotelBalanceLogService.save(hotelBalanceLog); - return null; + return Result.OK(); } @Override @@ -213,7 +216,7 @@ public class ShopServiceImpl implements IShopService { if(hotelShop == null){ return Result.OK(); } - ShopIndexResp shopIndex = hanHaiMemberService.getShopIndex(hanHaiMember.getId(), hotelShop.getId()); + ShopIndexResp shopIndex = hanHaiMemberService.getShopIndex(hotelShop.getUserId(), hotelShop.getId()); return Result.OK(shopIndex); } @@ -283,4 +286,27 @@ public class ShopServiceImpl implements IShopService { return Result.OK(); } + @Override + public Result editShopInfo(EditShopInfoReq editShopInfoReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(editShopInfoReq.getToken()); + + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hanHaiMember.getId()) + .one(); + + HotelShop hotelShop1 = new HotelShop(); + hotelShop1.setId(hotelShop.getId()); + if(StringUtils.isNotBlank(editShopInfoReq.getPic())){ + hotelShop1.setPic(editShopInfoReq.getPic()); + } + if(StringUtils.isNotBlank(editShopInfoReq.getName())){ + hotelShop1.setName(editShopInfoReq.getName()); + } + + hotelShopService.updateById(hotelShop1); + + return Result.OK(); + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/controller/UserController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/controller/UserController.java index 52a0fb5..5005313 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/controller/UserController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/controller/UserController.java @@ -45,5 +45,11 @@ public class UserController { return userService.myLeasePage(myLeasePageReq); } + @ApiOperation(value = "客服") + @GetMapping("/custom") + public Result getCustom(){ + return userService.getCustom(); + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/IUserService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/IUserService.java index f6c91de..b7093c4 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/IUserService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/IUserService.java @@ -28,4 +28,10 @@ public interface IUserService { */ Result myLeasePage(MyLeasePageReq myLeasePageReq); + /** + * 获取客服 + * @return + */ + Result getCustom(); + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/LoginServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/LoginServiceImpl.java index ae9fe32..d358fda 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/LoginServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/LoginServiceImpl.java @@ -165,8 +165,12 @@ public class LoginServiceImpl implements ILoginService { HotelShop hotelShop = hotelShopService.lambdaQuery() .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getStatus,1) .eq(HotelShop::getUserId, hanHaiMember.getId()) .one(); + if(hotelShop == null){ + throw new JeecgBootException("您还不是水洗店,无法使用账号密码登录!"); + } hanHaiMember.setShop(hotelShop); String token = JwtUtil.sign(hanHaiMember.getPhone(), hanHaiMember.getPassword()); redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/UserServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/UserServiceImpl.java index d717409..36a3a23 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/UserServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/service/impl/UserServiceImpl.java @@ -7,6 +7,7 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.config.shiro.ShiroRealm; import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService; +import org.jeecg.modules.hotelconf.service.IHotelConfService; import org.jeecg.modules.hotelleaselog.entity.HotelLeaseLog; import org.jeecg.modules.hotelleaselog.service.IHotelLeaseLogService; import org.jeecg.modules.hotelmemberaccount.entity.HotelMemberAccount; @@ -19,6 +20,8 @@ import org.jeecg.modules.xcx.user.service.IUserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; @Service public class UserServiceImpl implements IUserService { @@ -33,6 +36,8 @@ public class UserServiceImpl implements IUserService { private IHotelLeaseLogService hotelLeaseLogService; @Resource private IHotelShopService hotelShopService; + @Resource + private IHotelConfService hotelConfService; @Override public Result getUserInfo(String token) { @@ -85,4 +90,12 @@ public class UserServiceImpl implements IUserService { return Result.OK(hotelLeaseLogPage); } + + @Override + public Result getCustom() { + Map map = new HashMap<>(); + String customerService = hotelConfService.getConf("customerService"); + map.put("phone",customerService); + return Result.OK(map); + } } diff --git a/jeecg-boot-module-system/src/main/resources/application-dev.yml b/jeecg-boot-module-system/src/main/resources/application-dev.yml index b91bd11..46b04f8 100644 --- a/jeecg-boot-module-system/src/main/resources/application-dev.yml +++ b/jeecg-boot-module-system/src/main/resources/application-dev.yml @@ -134,7 +134,7 @@ spring: # connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 datasource: master: - url: jdbc:mysql://127.0.0.1:3306/hotel-api?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false + url: jdbc:mysql://124.220.65.222:3306/hotel-api?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false username: root password: m`A_E+`m driver-class-name: com.mysql.cj.jdbc.Driver @@ -147,7 +147,7 @@ spring: #redis 配置 redis: database: 0 - host: 127.0.0.1 + host: 124.220.65.222 lettuce: pool: max-active: -1 #最大连接数据库连接数,设 -1 为没有限制 @@ -333,4 +333,5 @@ third-app: weixin: mpAppId: wxad5b3d20a75974c0 mpAppSecret: 3b60a80c8e673986dd42f3cd6f2cf6b1 - orderNotifyUrl: https://hotel.java996.icu/hotel/order/notify \ No newline at end of file + orderNotifyUrl: https://hotel.java996.icu/hotel/order/notify + replaceOrderNotifyUrl: https://hotel.java996.icu/hotel/order/replace/notify \ No newline at end of file diff --git a/jeecg-boot-module-system/src/main/resources/application-pord.yml b/jeecg-boot-module-system/src/main/resources/application-pord.yml index 3615b65..73a0c5d 100644 --- a/jeecg-boot-module-system/src/main/resources/application-pord.yml +++ b/jeecg-boot-module-system/src/main/resources/application-pord.yml @@ -1,5 +1,5 @@ server: - port: 8000 + port: 8081 tomcat: max-swallow-size: -1 error: @@ -169,6 +169,7 @@ mybatis-plus: # 默认数据库表下划线命名 table-underline: true configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 @@ -330,5 +331,6 @@ third-app: agent-id: ?? weixin: - mpAppId: wx15be4225a7e41a1e - mpAppSecret: 0fdb77429ffdf206c151af76a663041c \ No newline at end of file + mpAppId: wxad5b3d20a75974c0 + mpAppSecret: 3b60a80c8e673986dd42f3cd6f2cf6b1 + orderNotifyUrl: https://hotel.java996.icu/hotel/order/notify \ No newline at end of file