From de50f43f116b6f375d942c39142db15000cb25c1 Mon Sep 17 00:00:00 2001 From: ieaii <1069385070@qq.com> Date: Fri, 11 Oct 2024 11:35:32 +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 --- admin-hanhai-vue/.env.development | 2 +- admin-hanhai-vue/src/views/system/CategoryList.vue | 11 +- admin-hanhai-vue/src/views/system/GoodsList.vue | 6 + .../src/views/system/HotelBalanceLogList.vue | 201 ++++++++++++ .../src/views/system/HotelConfList.vue | 188 ++++++++++++ .../src/views/system/HotelLeaseLogList.vue | 239 +++++++++++++++ .../src/views/system/HotelMemberAccountList.vue | 195 ++++++++++++ .../src/views/system/HotelOrderFlowList.vue | 194 ++++++++++++ .../src/views/system/HotelShopList.vue | 31 ++ .../src/views/system/modules/CategoryModal.vue | 9 + .../views/system/modules/HotelBalanceLogForm.vue | 139 +++++++++ .../modules/HotelBalanceLogModal.Style#Drawer.vue | 84 +++++ .../views/system/modules/HotelBalanceLogModal.vue | 60 ++++ .../src/views/system/modules/HotelCategoryForm.vue | 130 ++++++++ .../modules/HotelCategoryModal.Style#Drawer.vue | 84 +++++ .../views/system/modules/HotelCategoryModal.vue | 60 ++++ .../src/views/system/modules/HotelConfForm.vue | 120 ++++++++ .../system/modules/HotelConfModal.Style#Drawer.vue | 84 +++++ .../src/views/system/modules/HotelConfModal.vue | 60 ++++ .../src/views/system/modules/HotelGoodsForm.vue | 15 +- .../src/views/system/modules/HotelLeaseLogForm.vue | 168 ++++++++++ .../modules/HotelLeaseLogModal.Style#Drawer.vue | 84 +++++ .../views/system/modules/HotelLeaseLogModal.vue | 60 ++++ .../system/modules/HotelMemberAccountForm.vue | 128 ++++++++ .../HotelMemberAccountModal.Style#Drawer.vue | 84 +++++ .../system/modules/HotelMemberAccountModal.vue | 60 ++++ .../views/system/modules/HotelOrderFlowForm.vue | 128 ++++++++ .../modules/HotelOrderFlowModal.Style#Drawer.vue | 84 +++++ .../views/system/modules/HotelOrderFlowModal.vue | 60 ++++ .../src/views/system/modules/HotelOrderForm.vue | 2 +- .../src/views/system/modules/HotelShopForm.vue | 35 +++ .../target/jeecg-system-cloud-api-3.2.0.jar | Bin 9792 -> 9792 bytes .../target/jeecg-system-local-api-3.2.0.jar | Bin 3835 -> 3835 bytes .../java/org/jeecg/config/shiro/ShiroRealm.java | 2 +- .../main/java/org/jeecg/modules/bean/LoginReq.java | 11 + .../hotelbalancelog/entity/HotelBalanceLog.java | 2 + .../hotelcategory/entity/HotelCategory.java | 2 + .../jeecg/modules/hotelconf/entity/HotelConf.java | 5 + .../jeecg/modules/hotelconf/vue/HotelConfList.vue | 19 +- .../hotelconf/vue/modules/HotelConfForm.vue | 17 +- .../modules/hotelgoods/entity/HotelGoods.java | 4 + .../hotelleaselog/entity/HotelLeaseLog.java | 16 +- .../hotelleaselog/mapper/HotelLeaseLogMapper.java | 10 + .../mapper/xml/HotelLeaseLogMapper.xml | 15 + .../service/IHotelLeaseLogService.java | 11 + .../service/impl/HotelLeaseLogServiceImpl.java | 6 + .../hotelleaselog/vue/HotelLeaseLogList.vue | 48 ++- .../vue/modules/HotelLeaseLogForm.vue | 49 ++- .../modules/hotelorder/entity/HotelOrder.java | 22 +- .../hotelorder/mapper/HotelOrderMapper.java | 2 + .../hotelorder/mapper/xml/HotelOrderMapper.xml | 7 + .../hotelorder/service/IHotelOrderService.java | 1 + .../service/impl/HotelOrderServiceImpl.java | 5 + .../controller/HotelOrderFlowController.java | 171 +++++++++++ .../hotelorderflow/entity/HotelOrderFlow.java | 66 ++++ .../mapper/HotelOrderFlowMapper.java | 17 ++ .../mapper/xml/HotelOrderFlowMapper.xml | 5 + .../service/IHotelOrderFlowService.java | 14 + .../service/impl/HotelOrderFlowServiceImpl.java | 19 ++ .../hotelorderflow/vue/HotelOrderFlowList.vue | 189 ++++++++++++ .../vue/modules/HotelOrderFlowForm.vue | 123 ++++++++ .../modules/HotelOrderFlowModal.Style#Drawer.vue | 84 +++++ .../vue/modules/HotelOrderFlowModal.vue | 60 ++++ .../hotelorderflow/vue3/HotelOrderFlow.api.ts | 61 ++++ .../hotelorderflow/vue3/HotelOrderFlow.data.ts | 61 ++++ .../hotelorderflow/vue3/HotelOrderFlowList.vue | 162 ++++++++++ .../vue3/components/HotelOrderFlowModal.vue | 58 ++++ .../hotelshop/controller/HotelShopController.java | 40 +++ .../jeecg/modules/hotelshop/entity/HotelShop.java | 2 + .../org/jeecg/config/shiro/ShiroRealm.class | Bin 7685 -> 7645 bytes .../classes/org/jeecg/modules/bean/LoginReq.class | Bin 6534 -> 8284 bytes .../target/jeecg-boot-base-core-3.2.0.jar | Bin 502448 -> 515943 bytes .../target/jeecg-boot-base-tools-3.2.0.jar | Bin 29159 -> 29159 bytes .../system/service/impl/SysBaseApiImpl.java | 6 +- .../address/service/impl/AddressServiceImpl.java | 4 +- .../jeecg/modules/xcx/goods/req/GoodsListReq.java | 2 + .../xcx/goods/service/impl/GoodsServiceImpl.java | 10 + .../xcx/order/controller/OrderController.java | 15 + .../modules/xcx/order/req/ApplyRefundOrderReq.java | 2 + .../modules/xcx/order/req/CancelOrderReq.java | 13 + .../xcx/order/req/ConfirmAcceptOrderReq.java | 17 ++ .../jeecg/modules/xcx/order/req/OrderPayReq.java | 2 +- .../modules/xcx/order/req/UploadTableclothReq.java | 29 ++ .../modules/xcx/order/service/IOrderService.java | 22 +- .../xcx/order/service/impl/OrderServiceImpl.java | 337 ++++++++++++++++++--- .../xcx/shop/controller/ShopController.java | 7 + .../jeecg/modules/xcx/shop/req/ApplyShopReq.java | 1 + .../org/jeecg/modules/xcx/shop/req/BindWxReq.java | 11 + .../modules/xcx/shop/service/IShopService.java | 8 + .../xcx/shop/service/impl/ShopServiceImpl.java | 61 ++++ .../jeecg/modules/xcx/user/req/MyLeasePageReq.java | 5 + .../xcx/user/service/impl/LoginServiceImpl.java | 141 +++++---- .../xcx/user/service/impl/UserServiceImpl.java | 13 +- .../src/main/resources/application-dev.yml | 3 +- .../org/jeecg/modules/system/test/SysUserTest.java | 6 +- 95 files changed, 4743 insertions(+), 163 deletions(-) create mode 100644 admin-hanhai-vue/src/views/system/HotelBalanceLogList.vue create mode 100644 admin-hanhai-vue/src/views/system/HotelConfList.vue create mode 100644 admin-hanhai-vue/src/views/system/HotelLeaseLogList.vue create mode 100644 admin-hanhai-vue/src/views/system/HotelMemberAccountList.vue create mode 100644 admin-hanhai-vue/src/views/system/HotelOrderFlowList.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelBalanceLogForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelCategoryForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelConfForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelConfModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelConfModal.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelLeaseLogForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelMemberAccountForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelOrderFlowForm.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.Style#Drawer.vue create mode 100644 admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/controller/HotelOrderFlowController.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/entity/HotelOrderFlow.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/HotelOrderFlowMapper.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/xml/HotelOrderFlowMapper.xml create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/IHotelOrderFlowService.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/impl/HotelOrderFlowServiceImpl.java create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/HotelOrderFlowList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowForm.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.Style#Drawer.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlow.api.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlow.data.ts create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlowList.vue create mode 100644 jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/components/HotelOrderFlowModal.vue create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/CancelOrderReq.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ConfirmAcceptOrderReq.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/UploadTableclothReq.java create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/BindWxReq.java diff --git a/admin-hanhai-vue/.env.development b/admin-hanhai-vue/.env.development index 7e8bf61..8010fa6 100644 --- a/admin-hanhai-vue/.env.development +++ b/admin-hanhai-vue/.env.development @@ -1,5 +1,5 @@ NODE_ENV=development -VUE_APP_API_BASE_URL=https://hotel.java996.icu/hotel/ +VUE_APP_API_BASE_URL=http://127.0.0.1:8081/hotel/ VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview diff --git a/admin-hanhai-vue/src/views/system/CategoryList.vue b/admin-hanhai-vue/src/views/system/CategoryList.vue index 9c8fcd8..b34eb23 100644 --- a/admin-hanhai-vue/src/views/system/CategoryList.vue +++ b/admin-hanhai-vue/src/views/system/CategoryList.vue @@ -50,8 +50,8 @@ 编辑 - 分类配置 - + + 删除 @@ -59,7 +59,7 @@ - + @@ -110,6 +110,11 @@ align: "left", dataIndex: 'code', }, + { + title: '水洗价格', + align: "left", + dataIndex: 'price', + }, { title: '操作', dataIndex: 'action', diff --git a/admin-hanhai-vue/src/views/system/GoodsList.vue b/admin-hanhai-vue/src/views/system/GoodsList.vue index 8ad0139..e888f06 100644 --- a/admin-hanhai-vue/src/views/system/GoodsList.vue +++ b/admin-hanhai-vue/src/views/system/GoodsList.vue @@ -263,6 +263,7 @@ align: 'center', dataIndex: 'name' }, + { title:'商品图', align:"center", @@ -274,6 +275,11 @@ align:"center", dataIndex: 'shopId_dictText' }, + { + title: '分类', + align: 'center', + dataIndex: 'categoryId_dictText' + }, { title:'规格', align:"center", diff --git a/admin-hanhai-vue/src/views/system/HotelBalanceLogList.vue b/admin-hanhai-vue/src/views/system/HotelBalanceLogList.vue new file mode 100644 index 0000000..b6e8316 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/HotelBalanceLogList.vue @@ -0,0 +1,201 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/HotelConfList.vue b/admin-hanhai-vue/src/views/system/HotelConfList.vue new file mode 100644 index 0000000..7d30e81 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/HotelConfList.vue @@ -0,0 +1,188 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/HotelLeaseLogList.vue b/admin-hanhai-vue/src/views/system/HotelLeaseLogList.vue new file mode 100644 index 0000000..305d07a --- /dev/null +++ b/admin-hanhai-vue/src/views/system/HotelLeaseLogList.vue @@ -0,0 +1,239 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/HotelMemberAccountList.vue b/admin-hanhai-vue/src/views/system/HotelMemberAccountList.vue new file mode 100644 index 0000000..0a67a19 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/HotelMemberAccountList.vue @@ -0,0 +1,195 @@ + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/HotelOrderFlowList.vue b/admin-hanhai-vue/src/views/system/HotelOrderFlowList.vue new file mode 100644 index 0000000..5218098 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/HotelOrderFlowList.vue @@ -0,0 +1,194 @@ + + + + \ 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 bdcfc67..226c305 100644 --- a/admin-hanhai-vue/src/views/system/HotelShopList.vue +++ b/admin-hanhai-vue/src/views/system/HotelShopList.vue @@ -126,6 +126,12 @@ align:"center", dataIndex: 'name' }, + { + title:'图片', + align:"center", + dataIndex: 'pic', + scopedSlots: {customRender: 'imgSlot'} + }, { title:'用户编号', align:"center", @@ -141,6 +147,16 @@ align:"center", dataIndex: 'phone' }, + { + title:'绑定用户上限', + align:"center", + dataIndex: 'userNum' + }, + { + title:'分佣比例', + align:"center", + dataIndex: 'rate' + }, { title:'纬度', align:"center", @@ -156,6 +172,21 @@ align:"center", dataIndex: 'address' }, + { + title:'状态', + align:"center", + dataIndex: 'status_dictText' + }, + { + title:'标签', + align:"center", + dataIndex: 'label_dictText' + }, + { + title:'营业时间', + align:"center", + dataIndex: 'jobTime' + }, { title:'是否删除', align:"center", diff --git a/admin-hanhai-vue/src/views/system/modules/CategoryModal.vue b/admin-hanhai-vue/src/views/system/modules/CategoryModal.vue index 09614ac..7354653 100644 --- a/admin-hanhai-vue/src/views/system/modules/CategoryModal.vue +++ b/admin-hanhai-vue/src/views/system/modules/CategoryModal.vue @@ -29,6 +29,15 @@ + + + + diff --git a/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogForm.vue new file mode 100644 index 0000000..4097b46 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogForm.vue @@ -0,0 +1,139 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.Style#Drawer.vue new file mode 100644 index 0000000..f0ee5ab --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.vue new file mode 100644 index 0000000..7d3c3bd --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelBalanceLogModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelCategoryForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelCategoryForm.vue new file mode 100644 index 0000000..6e33368 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelCategoryForm.vue @@ -0,0 +1,130 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.Style#Drawer.vue new file mode 100644 index 0000000..0e80bd8 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.vue new file mode 100644 index 0000000..5092e6e --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelCategoryModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelConfForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelConfForm.vue new file mode 100644 index 0000000..5d1d28e --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelConfForm.vue @@ -0,0 +1,120 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelConfModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelConfModal.Style#Drawer.vue new file mode 100644 index 0000000..ba1c3b7 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelConfModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelConfModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelConfModal.vue new file mode 100644 index 0000000..eba6c00 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelConfModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelGoodsForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelGoodsForm.vue index 6254482..b7115b4 100644 --- a/admin-hanhai-vue/src/views/system/modules/HotelGoodsForm.vue +++ b/admin-hanhai-vue/src/views/system/modules/HotelGoodsForm.vue @@ -13,6 +13,11 @@ + + + + + @@ -23,11 +28,11 @@ - - - - - + + + + + diff --git a/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogForm.vue new file mode 100644 index 0000000..7268ac2 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogForm.vue @@ -0,0 +1,168 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.Style#Drawer.vue new file mode 100644 index 0000000..32038f2 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.vue new file mode 100644 index 0000000..a0ac1d4 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelLeaseLogModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountForm.vue new file mode 100644 index 0000000..3094087 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountForm.vue @@ -0,0 +1,128 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.Style#Drawer.vue new file mode 100644 index 0000000..5f8dbff --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.vue new file mode 100644 index 0000000..31c0d4c --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelMemberAccountModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowForm.vue new file mode 100644 index 0000000..832512d --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowForm.vue @@ -0,0 +1,128 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.Style#Drawer.vue b/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.Style#Drawer.vue new file mode 100644 index 0000000..47a4bf8 --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.vue b/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.vue new file mode 100644 index 0000000..55ac6ac --- /dev/null +++ b/admin-hanhai-vue/src/views/system/modules/HotelOrderFlowModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/admin-hanhai-vue/src/views/system/modules/HotelOrderForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelOrderForm.vue index 2dd78c1..61665c2 100644 --- a/admin-hanhai-vue/src/views/system/modules/HotelOrderForm.vue +++ b/admin-hanhai-vue/src/views/system/modules/HotelOrderForm.vue @@ -70,7 +70,7 @@ - + diff --git a/admin-hanhai-vue/src/views/system/modules/HotelShopForm.vue b/admin-hanhai-vue/src/views/system/modules/HotelShopForm.vue index 440b77a..3335536 100644 --- a/admin-hanhai-vue/src/views/system/modules/HotelShopForm.vue +++ b/admin-hanhai-vue/src/views/system/modules/HotelShopForm.vue @@ -8,6 +8,11 @@ + + + + + @@ -23,6 +28,21 @@ + + + + + + + + + + + + + + + @@ -38,6 +58,21 @@ + + + + + + + + + + + + + + + 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 162915f2332f4b4706a2924302727fd618faf23b..059202c8d68424c374efb0149c093325de218899 100644 GIT binary patch delta 287 zcmX@$bHIl;z?+$ci-CcIfuV`Rdm^t2Gl()-&uqo%G4Yu^h?>m7s0yYH7sc)*N>LTk90Z8Ft2 z2gq$^WS(1OGMP wrjIBEfN61MD=;0R90aCUDrbUeQI$L}-KLTOra!7gfE+T}N3{U#j{T~Q0Hj7x82|tP delta 287 zcmX@$bHIl;z?+$ci-CcIf#G?F-9%m$W)Nkvo>{5UZsId}5H*>DQ58%ZFzSHmct&H8 zs>xFs&B63}Mtd+V$m9T~LzuL{bR&}!m_Ei738FVEF?Tb885>yN@qif%h1PI`jNBX` zx0w-aHk-nBu$}`7CSdxzf<0K=Qc)jFXDgb5>BWjRVEU1wGgzI5k~^3#Qt}7WN0b7< pw79Yrm<~}60@Ev%Gr_c|N*mFs0yYH8Fj#P0;4gQ zp2lbnQa$+sqZXL{%jg8AotPp)@|))|MRR}!{&1OqX=84Cu*OnueK5V8+Z0US=e7aU iay-spI)%p_tbQGj6_|d_69lFmcr!uro7eFAGXekssx-X- delta 189 zcmew@`&*Vbz?+$ci-CcIfniRO$wXciW)Nkv0ZcuY2T_wb8CAiwA)^kMPGB?!)6*Eu z!Sn@2EinC;(FsgDF-3yt&GVR|IluycxJNgx3KTst diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroRealm.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroRealm.java index c5d6759..027e1e7 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroRealm.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroRealm.java @@ -176,7 +176,7 @@ public class ShiroRealm extends AuthorizingRealm { // 查询用户信息 log.debug("———校验token是否有效————checkUserTokenIsEffect——————— "+ token); HanHaiMember user = commonApi.getUserByNameHanHaiAccount(account); - if (user == null || user.getAppletOpenid() == null) { + if (user == null) { throw new AuthenticationException("用户不存在!"); } // // 判断用户状态 diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/bean/LoginReq.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/bean/LoginReq.java index b26e301..0be0fcf 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/bean/LoginReq.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/bean/LoginReq.java @@ -63,4 +63,15 @@ public class LoginReq { private Double latitude; @ApiModelProperty(value = "经度") private Double longitude; + /** + * 登录方式 0微信 1账号密码 + */ + @ApiModelProperty(value = "登录方式 0微信 1账号密码") + private Integer loginType = 0; + /**账号*/ + @ApiModelProperty(value = "账号") + private String account; + /**密码*/ + @ApiModelProperty(value = "密码") + private String password; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelbalancelog/entity/HotelBalanceLog.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelbalancelog/entity/HotelBalanceLog.java index d0a7fa8..010bc52 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelbalancelog/entity/HotelBalanceLog.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelbalancelog/entity/HotelBalanceLog.java @@ -49,10 +49,12 @@ public class HotelBalanceLog implements Serializable { @ApiModelProperty(value = "用户余额") private java.math.BigDecimal userBalance; /**类型 余额记录0 提现记录1 佣金记录2*/ + @Dict(dicCode = "balance_type") @Excel(name = "类型 余额记录0 提现记录1 佣金记录2", width = 15) @ApiModelProperty(value = "类型 0交易 1提现") private java.lang.Integer type; /**状态 0未审核 1已审核未打款 2已打款 3审核未通过*/ + @Dict(dicCode = "balance_status") @Excel(name = "状态 0未审核 1已审核未打款 2已打款 3审核未通过", width = 15) @ApiModelProperty(value = "状态 0未审核 1已审核未打款 2已打款 3审核未通过") private java.lang.Integer status; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcategory/entity/HotelCategory.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcategory/entity/HotelCategory.java index 2eaa321..30cc12a 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcategory/entity/HotelCategory.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelcategory/entity/HotelCategory.java @@ -67,6 +67,8 @@ public class HotelCategory implements Serializable { @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "updateTime") private java.util.Date updateTime; + /**水洗价格*/ + private BigDecimal price; @TableField(exist = false) private List hotelCategoryItems; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/entity/HotelConf.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/entity/HotelConf.java index 52fee41..0ec89e3 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/entity/HotelConf.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/entity/HotelConf.java @@ -6,6 +6,7 @@ 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.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; @@ -43,7 +44,11 @@ public class HotelConf implements Serializable { @Excel(name = "value", width = 15) @ApiModelProperty(value = "value") private java.lang.String value; + /**说明*/ + private String info; /**delFlag*/ + @TableLogic + @Dict(dicCode = "is_delete") @Excel(name = "delFlag", width = 15) @ApiModelProperty(value = "delFlag") private java.lang.Integer delFlag; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/HotelConfList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/HotelConfList.vue index 64dba45..7d30e81 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/HotelConfList.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/HotelConfList.vue @@ -12,10 +12,10 @@
新增 - 导出 - - 导入 - + + + + @@ -122,17 +122,22 @@ } }, { - title:'name', + title:'名称', align:"center", dataIndex: 'name' }, { - title:'value', + title:'值', align:"center", dataIndex: 'value' }, { - title:'delFlag', + title:'说明', + align:"center", + dataIndex: 'info' + }, + { + title:'是否删除', align:"center", dataIndex: 'delFlag_dictText' }, diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/modules/HotelConfForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/modules/HotelConfForm.vue index 1a0f49c..5d1d28e 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/modules/HotelConfForm.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelconf/vue/modules/HotelConfForm.vue @@ -4,18 +4,23 @@ - - + + - - + + - - + + + + + + + diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelgoods/entity/HotelGoods.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelgoods/entity/HotelGoods.java index 7cb2318..d2ad0c2 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelgoods/entity/HotelGoods.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelgoods/entity/HotelGoods.java @@ -86,6 +86,7 @@ public class HotelGoods implements Serializable { /** * 分类ID */ + @Dict(dictTable = "hotel_category",dicCode = "id",dicText = "name") private String categoryId; /**原价*/ private BigDecimal originalPrice; @@ -96,4 +97,7 @@ public class HotelGoods implements Serializable { private List hotelGoodsSkuList; @TableField(exist = false) private HotelGoodsSku goodsSku; + /**押金*/ + @TableField(exist = false) + private BigDecimal depositPrice; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java index b01657a..6adf5c7 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java @@ -4,10 +4,8 @@ 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.TableLogic; -import com.baomidou.mybatisplus.annotation.TableName; + +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -88,6 +86,7 @@ public class HotelLeaseLog implements Serializable { private String goodsPic; private String sku; /**状态 0正常 1换货 2退货*/ + @Dict(dicCode = "lease_log_status") private Integer status; /**数量*/ private Integer num; @@ -95,4 +94,13 @@ public class HotelLeaseLog implements Serializable { private BigDecimal price; /**来自用户Id*/ private String formUserId; + /**是否为租赁水布 0否 1是*/ + @Dict(dicCode = "is_delete") + private Integer leaseFlag; + /**分类id*/ + private String categoryId; + @TableField(exist = false) + private BigDecimal zujin; + @TableField(exist = false) + private BigDecimal washPrice; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/HotelLeaseLogMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/HotelLeaseLogMapper.java index 212667f..277d2e7 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/HotelLeaseLogMapper.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/HotelLeaseLogMapper.java @@ -2,6 +2,8 @@ package org.jeecg.modules.hotelleaselog.mapper; 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.jeecg.modules.hotelleaselog.entity.HotelLeaseLog; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -14,4 +16,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface HotelLeaseLogMapper extends BaseMapper { + /** + * 我的租赁 + * @param page + * @param userId + * @return + */ + IPage myLeaseLogPage(Page page,@Param("userId") String userId,@Param("leaseFlag") Integer leaseFlag,@Param("status") Integer status); + } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml index 0c309f2..221d53a 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml @@ -2,4 +2,19 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/IHotelLeaseLogService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/IHotelLeaseLogService.java index b54b42f..ea8173c 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/IHotelLeaseLogService.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/IHotelLeaseLogService.java @@ -1,5 +1,8 @@ package org.jeecg.modules.hotelleaselog.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; import org.jeecg.modules.hotelleaselog.entity.HotelLeaseLog; import com.baomidou.mybatisplus.extension.service.IService; @@ -11,4 +14,12 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IHotelLeaseLogService extends IService { + /** + * 我的租赁 + * @param page + * @param userId + * @return + */ + IPage myLeaseLogPage(Page page, String userId,Integer leaseFlag,Integer status); + } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/impl/HotelLeaseLogServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/impl/HotelLeaseLogServiceImpl.java index 95fb327..ddcc9fa 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/impl/HotelLeaseLogServiceImpl.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/service/impl/HotelLeaseLogServiceImpl.java @@ -1,5 +1,7 @@ package org.jeecg.modules.hotelleaselog.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.jeecg.modules.hotelleaselog.entity.HotelLeaseLog; import org.jeecg.modules.hotelleaselog.mapper.HotelLeaseLogMapper; import org.jeecg.modules.hotelleaselog.service.IHotelLeaseLogService; @@ -16,4 +18,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @Service public class HotelLeaseLogServiceImpl extends ServiceImpl implements IHotelLeaseLogService { + @Override + public IPage myLeaseLogPage(Page page, String userId,Integer leaseFlag,Integer status) { + return baseMapper.myLeaseLogPage(page, userId,leaseFlag,status); + } } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/HotelLeaseLogList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/HotelLeaseLogList.vue index c5ffa36..305d07a 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/HotelLeaseLogList.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/HotelLeaseLogList.vue @@ -12,10 +12,10 @@
新增 - 导出 - - 导入 - + + + + @@ -108,7 +108,7 @@ }, data () { return { - description: 'hotel_lease_log管理页面', + description: '我的租赁管理页面', // 表头 columns: [ { @@ -122,30 +122,56 @@ } }, { - title:'用户id', + title:'用户编号', align:"center", dataIndex: 'userId' }, { - title:'店铺id', + title:'店铺编号', align:"center", dataIndex: 'shopId' }, { - title:'订单id', + title:'订单编号', align:"center", dataIndex: 'orderId' }, { - title:'商品id', + title:'商品编号', align:"center", dataIndex: 'goodsId' }, { - title:'规格id', + title:'规格编号', align:"center", dataIndex: 'skuId' }, + { + title:'商品名', + align:"center", + dataIndex: 'goodsName' + }, + { + title:'商品图', + align:"center", + dataIndex: 'goodsPic', + scopedSlots: {customRender: 'imgSlot'} + }, + { + title:'金额', + align:"center", + dataIndex: 'price' + }, + { + title:'数量', + align:"center", + dataIndex: 'num' + }, + { + title:'状态', + align:"center", + dataIndex: 'status_dictText' + }, { title:'租赁开始时间', align:"center", @@ -157,7 +183,7 @@ dataIndex: 'endTime' }, { - title:'是否删除 0否 1是', + title:'是否删除', align:"center", dataIndex: 'delFlag_dictText' }, diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/modules/HotelLeaseLogForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/modules/HotelLeaseLogForm.vue index efbe46d..7268ac2 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/modules/HotelLeaseLogForm.vue +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/vue/modules/HotelLeaseLogForm.vue @@ -4,28 +4,53 @@ - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -39,8 +64,8 @@ - - + + 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 b2277b7..64b3413 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 @@ -4,10 +4,12 @@ import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; +import java.util.List; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; +import org.jeecg.modules.hotelorderflow.entity.HotelOrderFlow; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; @@ -89,22 +91,22 @@ public class HotelOrder implements Serializable { /** * 状态 * 租赁订单:0待支付 1待发货 2待收货 - * 水洗订单:3待支付 4水洗店接单 5水洗店检查 - * 6开始清洗 + * 水洗订单:3待支付 4待接单 5待检查 + * 6待清洗 * 换货订单:7待回收 8待发货 9平台待收货 - * 10平台检查损失待用户支付 + * 10平台检查损失待用户支付 17待接单 * 退货订单:11待回收 12待发货 13平台待收货 - * 14平台检查损失并且退还定金 + * 14平台检查损失并且退还定金 18待接单 * 15 已完成 * */ @Excel(name = "状态 \n" + "租赁订单:0待支付 1待发货 2待收货 \n" + "水洗订单:3待支付 4水洗店接单 5水洗店检查\n" + - "6开始清洗 \n" + + "6开始清洗 16待接单\n" + "换货订单:7待回收 8待发货 9平台待收货\n" + - "10平台检查损失待用户支付\n" + + "10平台检查损失待用户支付 17待接单\n" + "退货订单:11待回收 12待发货 13平台待收货\n" + - "14平台检查损失并且退还定金\n" + + "14平台检查损失并且退还定金 18待接单\n" + "15 已完成", width = 15) @ApiModelProperty(value = "状态 \n" + "租赁订单:0待支付 1待发货 2待收货 \n" + @@ -167,5 +169,11 @@ public class HotelOrder implements Serializable { /**是否水洗店租赁订单 0否 1是*/ @Dict(dicCode = "is_delete") private Integer washShopFlag; + /**分类id*/ + private String categoryId; + /**租赁id*/ + private String LeaseId; + @TableField(exist = false) + private List hotelOrderFlows; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/HotelOrderMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/HotelOrderMapper.java index f114cb7..0ce5ec9 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/HotelOrderMapper.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/HotelOrderMapper.java @@ -17,4 +17,6 @@ public interface HotelOrderMapper extends BaseMapper { HotelOrder getOrderOne(@Param("id") String id,@Param("userId") String userId); + HotelOrder getOrderOne2(@Param("id") String id,@Param("userId") String userId); + } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/xml/HotelOrderMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/xml/HotelOrderMapper.xml index 0a23561..3b29fc7 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/xml/HotelOrderMapper.xml +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/mapper/xml/HotelOrderMapper.xml @@ -9,4 +9,11 @@ FROM hotel_order a WHERE a.del_flag = 0 AND (a.shop_id = #{userId} OR a.user_id = #{userId}) AND a.id = #{id} + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/IHotelOrderService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/IHotelOrderService.java index ecdf60e..82a2c50 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/IHotelOrderService.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/IHotelOrderService.java @@ -14,4 +14,5 @@ public interface IHotelOrderService extends IService { HotelOrder getOrderOne(String id, String userId); + HotelOrder getOrderOne2(String id, String userId); } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/impl/HotelOrderServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/impl/HotelOrderServiceImpl.java index 418a38b..2eef055 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/impl/HotelOrderServiceImpl.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorder/service/impl/HotelOrderServiceImpl.java @@ -20,4 +20,9 @@ public class HotelOrderServiceImpl extends ServiceImpl { + @Autowired + private IHotelOrderFlowService hotelOrderFlowService; + + /** + * 分页列表查询 + * + * @param hotelOrderFlow + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "hotel_order_flow-分页列表查询") + @ApiOperation(value="hotel_order_flow-分页列表查询", notes="hotel_order_flow-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(HotelOrderFlow hotelOrderFlow, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(hotelOrderFlow, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = hotelOrderFlowService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param hotelOrderFlow + * @return + */ + @AutoLog(value = "hotel_order_flow-添加") + @ApiOperation(value="hotel_order_flow-添加", notes="hotel_order_flow-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody HotelOrderFlow hotelOrderFlow) { + hotelOrderFlowService.save(hotelOrderFlow); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param hotelOrderFlow + * @return + */ + @AutoLog(value = "hotel_order_flow-编辑") + @ApiOperation(value="hotel_order_flow-编辑", notes="hotel_order_flow-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody HotelOrderFlow hotelOrderFlow) { + hotelOrderFlowService.updateById(hotelOrderFlow); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "hotel_order_flow-通过id删除") + @ApiOperation(value="hotel_order_flow-通过id删除", notes="hotel_order_flow-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + hotelOrderFlowService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "hotel_order_flow-批量删除") + @ApiOperation(value="hotel_order_flow-批量删除", notes="hotel_order_flow-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.hotelOrderFlowService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "hotel_order_flow-通过id查询") + @ApiOperation(value="hotel_order_flow-通过id查询", notes="hotel_order_flow-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + HotelOrderFlow hotelOrderFlow = hotelOrderFlowService.getById(id); + if(hotelOrderFlow==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(hotelOrderFlow); + } + + /** + * 导出excel + * + * @param request + * @param hotelOrderFlow + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HotelOrderFlow hotelOrderFlow) { + return super.exportXls(request, hotelOrderFlow, HotelOrderFlow.class, "hotel_order_flow"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, HotelOrderFlow.class); + } + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/entity/HotelOrderFlow.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/entity/HotelOrderFlow.java new file mode 100644 index 0000000..45b1a28 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/entity/HotelOrderFlow.java @@ -0,0 +1,66 @@ +package org.jeecg.modules.hotelorderflow.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_order_flow + * @Author: jeecg-boot + * @Date: 2024-10-10 + * @Version: V1.0 + */ +@Data +@TableName("hotel_order_flow") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="hotel_order_flow对象", description="hotel_order_flow") +public class HotelOrderFlow implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**名称*/ + @Excel(name = "name", width = 15) + @ApiModelProperty(value = "name") + private java.lang.String name; + /**值*/ + @Excel(name = "value", width = 15) + @ApiModelProperty(value = "value") + private java.lang.Integer value; + /**订单类型*/ + @Excel(name = "订单类型", width = 15) + @ApiModelProperty(value = "订单类型") + private java.lang.Integer pid; + /**是否删除*/ + @Dict(dicCode = "is_delete") + @Excel(name = "是否删除", width = 15) + @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; + private Integer sort; +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/HotelOrderFlowMapper.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/HotelOrderFlowMapper.java new file mode 100644 index 0000000..ce2a2d2 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/HotelOrderFlowMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.hotelorderflow.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.hotelorderflow.entity.HotelOrderFlow; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: hotel_order_flow + * @Author: jeecg-boot + * @Date: 2024-10-10 + * @Version: V1.0 + */ +public interface HotelOrderFlowMapper extends BaseMapper { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/xml/HotelOrderFlowMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/xml/HotelOrderFlowMapper.xml new file mode 100644 index 0000000..61569b7 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/mapper/xml/HotelOrderFlowMapper.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/hotelorderflow/service/IHotelOrderFlowService.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/IHotelOrderFlowService.java new file mode 100644 index 0000000..7adbe77 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/IHotelOrderFlowService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.hotelorderflow.service; + +import org.jeecg.modules.hotelorderflow.entity.HotelOrderFlow; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: hotel_order_flow + * @Author: jeecg-boot + * @Date: 2024-10-10 + * @Version: V1.0 + */ +public interface IHotelOrderFlowService extends IService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/impl/HotelOrderFlowServiceImpl.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/impl/HotelOrderFlowServiceImpl.java new file mode 100644 index 0000000..31954c6 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/service/impl/HotelOrderFlowServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.hotelorderflow.service.impl; + +import org.jeecg.modules.hotelorderflow.entity.HotelOrderFlow; +import org.jeecg.modules.hotelorderflow.mapper.HotelOrderFlowMapper; +import org.jeecg.modules.hotelorderflow.service.IHotelOrderFlowService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: hotel_order_flow + * @Author: jeecg-boot + * @Date: 2024-10-10 + * @Version: V1.0 + */ +@Service +public class HotelOrderFlowServiceImpl extends ServiceImpl implements IHotelOrderFlowService { + +} diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/HotelOrderFlowList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/HotelOrderFlowList.vue new file mode 100644 index 0000000..cc7f58b --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/HotelOrderFlowList.vue @@ -0,0 +1,189 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowForm.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowForm.vue new file mode 100644 index 0000000..2da9952 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowForm.vue @@ -0,0 +1,123 @@ + + + \ No newline at end of file diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.Style#Drawer.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.Style#Drawer.vue new file mode 100644 index 0000000..47a4bf8 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.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/hotelorderflow/vue/modules/HotelOrderFlowModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.vue new file mode 100644 index 0000000..55ac6ac --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue/modules/HotelOrderFlowModal.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/hotelorderflow/vue3/HotelOrderFlow.api.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlow.api.ts new file mode 100644 index 0000000..0e9aac0 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlow.api.ts @@ -0,0 +1,61 @@ +import {defHttp} from '/@/utils/http/axios'; +import {Modal} from 'ant-design-vue'; + +enum Api { + list = '/hotelorderflow/hotelOrderFlow/list', + save='/hotelorderflow/hotelOrderFlow/add', + edit='/hotelorderflow/hotelOrderFlow/edit', + deleteOne = '/hotelorderflow/hotelOrderFlow/delete', + deleteBatch = '/hotelorderflow/hotelOrderFlow/deleteBatch', + importExcel = '/hotelorderflow/hotelOrderFlow/importExcel', + exportXls = '/hotelorderflow/hotelOrderFlow/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/hotelorderflow/vue3/HotelOrderFlow.data.ts b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlow.data.ts new file mode 100644 index 0000000..b821569 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlow.data.ts @@ -0,0 +1,61 @@ +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: 'name', + align:"center", + dataIndex: 'name' + }, + { + title: 'value', + align:"center", + dataIndex: 'value' + }, + { + title: '订单类型', + align:"center", + dataIndex: 'pid' + }, + { + title: '是否删除', + align:"center", + dataIndex: 'delFlag_dictText' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: 'name', + field: 'name', + component: 'Input', + }, + { + label: 'value', + field: 'value', + component: 'InputNumber', + }, + { + label: '订单类型', + field: 'pid', + component: 'InputNumber', + }, + { + label: '是否删除', + field: 'delFlag', + component: 'JDictSelectTag', + componentProps:{ + dictCode:"" + }, + dynamicRules: ({model,schema}) => { + return [ + { required: true, message: '请输入是否删除!'}, + ]; + }, + }, +]; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlowList.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlowList.vue new file mode 100644 index 0000000..17d0742 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/HotelOrderFlowList.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/hotelorderflow/vue3/components/HotelOrderFlowModal.vue b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/components/HotelOrderFlowModal.vue new file mode 100644 index 0000000..78ed091 --- /dev/null +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelorderflow/vue3/components/HotelOrderFlowModal.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/hotelshop/controller/HotelShopController.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelshop/controller/HotelShopController.java index 3af3312..9124ab0 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 @@ -7,11 +7,20 @@ 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 com.baomidou.mybatisplus.core.toolkit.IdWorker; +import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.PasswordUtil; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; +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.service.IHotelShopService; @@ -49,6 +58,10 @@ import org.jeecg.common.aspect.annotation.AutoLog; public class HotelShopController extends JeecgController { @Autowired private IHotelShopService hotelShopService; + @Resource + private IHanHaiMemberService hanHaiMemberService; + @Resource + private IHotelMemberAccountService hotelMemberAccountService; /** * 分页列表查询 @@ -82,6 +95,21 @@ public class HotelShopController extends JeecgController add(@RequestBody HotelShop hotelShop) { + HanHaiMember hanHaiMember = new HanHaiMember(); + hanHaiMember.setId(IdWorker.getIdStr()); + hanHaiMember.setPhone(hotelShop.getPhone()); + String salt = oConvertUtils.randomGen(8); + hanHaiMember.setPasswordSalt(salt); + String encrypt = PasswordUtil.encrypt(hotelShop.getPassword(), hotelShop.getPhone(), salt); + hanHaiMember.setPassword(encrypt); + hanHaiMember.setHeadImage(hotelShop.getPic()); + + HotelMemberAccount hotelMemberAccount = new HotelMemberAccount(); + hotelMemberAccount.setUserId(hanHaiMember.getId()); + hotelShop.setUserId(hanHaiMember.getId()); + + hanHaiMemberService.save(hanHaiMember); + hotelMemberAccountService.save(hotelMemberAccount); hotelShopService.save(hotelShop); return Result.OK("添加成功!"); } @@ -96,6 +124,18 @@ public class HotelShopController extends JeecgController edit(@RequestBody HotelShop hotelShop) { + if(StringUtils.isNotBlank(hotelShop.getPassword())){ + HanHaiMember hanHaiMember = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getId, hotelShop.getUserId()) + .one(); + String salt = oConvertUtils.randomGen(8); + String encrypt = PasswordUtil.encrypt(hotelShop.getPassword(), hotelShop.getPhone(), salt); + HanHaiMember hanHaiMember1 = new HanHaiMember(); + hanHaiMember1.setId(hanHaiMember.getId()); + hanHaiMember1.setPassword(encrypt); + hanHaiMember1.setPasswordSalt(salt); + hanHaiMemberService.updateById(hanHaiMember1); + } hotelShopService.updateById(hotelShop); 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 aae22c1..40e5327 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 @@ -97,4 +97,6 @@ public class HotelShop implements Serializable { private Integer num; /**分佣比例*/ private BigDecimal rate; + @TableField(exist = false) + private String password; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/config/shiro/ShiroRealm.class b/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/config/shiro/ShiroRealm.class index 6e7a3a54030de21594554e219e5231b8eefad04d..dae6ea8eba2a6d75a6d5799430f195e8cb299b57 100644 GIT binary patch delta 2164 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 UiR1iFvn~M7SWlaJk+coKf8Gv{K>z>% diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/bean/LoginReq.class b/jeecg-boot-base/jeecg-boot-base-core/target/classes/org/jeecg/modules/bean/LoginReq.class index 4cbf76393ab234d74287269dcf6edb873a5e3410..17a4cbe9fcf7781ff40b2d5681eea05de719997d 100644 GIT binary patch literal 8284 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 literal 6534 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 HRsZ~d(7euQ diff --git a/jeecg-boot-base/jeecg-boot-base-core/target/jeecg-boot-base-core-3.2.0.jar b/jeecg-boot-base/jeecg-boot-base-core/target/jeecg-boot-base-core-3.2.0.jar index ba831dabdc074eecd15d269aa0c3bbec285266fb..e99938ccf2dcdfe9cad572e94c9f7cf63963a589 100644 GIT binary patch delta 84310 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 I?TFI<0+bjlaR2}S delta 71420 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 delta 755 zcmYk((MwZN90%}o?zwlaEs0@LIipyvhY`5dHqGX0ri2M%NuXkc;_ltOce|U&AlE}l z|A2Z3q9DYir?7Co1VMY~ArN7`tOp;(#3z*qf~4|%PeBit&+m7Bzu!IQp1ZwCw>N41 zKp#^*gt!T5f1I4FZ()My8y1*J&V4;2;BFd(VR`}HqiwLH26)xhc!he9uhUDADOX@h ziNR^*B3xFYa7*ccI*ahUCSS-LD=X7~DP?Q5k@P`L|Mc0$J?+78k4xel2 zOPWXc^Y8{Xn2vm52nJ*Q#}O>`o@zi)8ST_WurhubujGk|ReamGi6{)EuZlX)rd#2Q zw7l(FI)S`VzagBr{Jf-}$I?q(Uf+)1hrG?`fe(!?_|fQw-poz-I^*Y4nfTxMmT=x2 zl=%6i*)A)ltXL_WtJ~^;GuCZbvodH)*`sj5?uYyK9oU9IJ3f^gL0-+> kg<;2l&zy1i+p%FTuftkC3wsI!@M%HLe=p>b8 hotelGoodsPage = query.orderByAsc(HotelGoods::getSort).orderByDesc(HotelGoods::getCreateTime).page(page); @@ -83,6 +90,9 @@ public class GoodsServiceImpl implements IGoodsService { .orderByAsc(HotelGoodsSku::getSort) .list(); + BigDecimal depositPrice = new BigDecimal(hotelConfService.getConf("depositPrice")); + hotelGoods.setDepositPrice(depositPrice); + hotelGoods.setHotelGoodsSkuList(hotelGoodsSkus); return Result.OK(hotelGoods); 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 0b67451..f6c5b28 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 @@ -73,4 +73,19 @@ public class OrderController { confirmOrderReq.setToken(TokenUtils.getTokenByRequest(request)); return orderService.confirmOrder(confirmOrderReq); } + + @ApiOperation(value = "上传自己的桌布") + @PostMapping("/upload/tablecloth") + public Result uploadTablecloth(HttpServletRequest request,UploadTableclothReq uploadTableclothReq){ + uploadTableclothReq.setToken(TokenUtils.getTokenByRequest(request)); + return orderService.uploadTablecloth(uploadTableclothReq); + } + + @ApiOperation(value = "确认接单") + @PostMapping("/confirm/accept") + public Result confirmAcceptOrder(HttpServletRequest request,ConfirmAcceptOrderReq confirmAcceptOrderReq){ + confirmAcceptOrderReq.setToken(TokenUtils.getTokenByRequest(request)); + return orderService.confirmAcceptOrder(confirmAcceptOrderReq); + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ApplyRefundOrderReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ApplyRefundOrderReq.java index fabb65d..643281d 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ApplyRefundOrderReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ApplyRefundOrderReq.java @@ -33,6 +33,8 @@ public class ApplyRefundOrderReq { /**联系电话*/ @ApiModelProperty(value = "联系电话") private String phone; + @ApiModelProperty(value = "地址id") + private String addressId; private String token; } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/CancelOrderReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/CancelOrderReq.java new file mode 100644 index 0000000..0143598 --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/CancelOrderReq.java @@ -0,0 +1,13 @@ +package org.jeecg.modules.xcx.order.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CancelOrderReq { + + private String token; + @ApiModelProperty(value = "订单id") + private String id; + +} 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 new file mode 100644 index 0000000..63ab541 --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/ConfirmAcceptOrderReq.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.xcx.order.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ConfirmAcceptOrderReq { + + private String token; + /**订单id*/ + @ApiModelProperty(value = "订单id") + private String id; + /**0确认接单 0确认 1不确认*/ + @ApiModelProperty(value = "0确认接单 0确认 1不确认") + private Integer flag = 0; + +} 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 20abe0a..25d27f9 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 @@ -6,7 +6,7 @@ import lombok.Data; @Data public class OrderPayReq { - @ApiModelProperty(value = "订单Id") + @ApiModelProperty(value = "orderLogId") private String id; private String token; diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/UploadTableclothReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/UploadTableclothReq.java new file mode 100644 index 0000000..c515eb6 --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/req/UploadTableclothReq.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.xcx.order.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UploadTableclothReq { + + private String token; + /**商品图片*/ + @ApiModelProperty(value = "商品图片") + private String pic; + /**商品名*/ + @ApiModelProperty(value = "商品名") + private String name; + /**数量*/ + @ApiModelProperty(value = "数量") + private Integer num; + /**长度*/ + @ApiModelProperty(value = "长度") + private String length; + /**宽*/ + @ApiModelProperty(value = "宽") + private String wide; + /**分类id*/ + @ApiModelProperty(value = "分类id") + private String categoryId; + +} 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 65c5c47..93f05e4 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 @@ -27,7 +27,7 @@ public interface IOrderService { /** * 创建订单 - * @param createOrderReq + * @param req * @return */ Result createOrder(String req, String token); @@ -62,4 +62,24 @@ public interface IOrderService { */ Result confirmOrder(ConfirmOrderReq confirmOrderReq); + /** + * 上传桌布 + * @param uploadTableclothReq + * @return + */ + Result uploadTablecloth(UploadTableclothReq uploadTableclothReq); + + /** + * 确认接单 + * @param confirmAcceptOrderReq + * @return + */ + Result confirmAcceptOrder(ConfirmAcceptOrderReq confirmAcceptOrderReq); + + /** + * 取消订单 + * @param cancelOrderReq + * @return + */ + Result cancelOrder(CancelOrderReq cancelOrderReq); } 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 ec5984a..1754bfa 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 @@ -23,6 +23,8 @@ import org.jeecg.modules.hoteladdress.entity.HotelAddress; import org.jeecg.modules.hoteladdress.service.IHotelAddressService; import org.jeecg.modules.hotelbalancelog.entity.HotelBalanceLog; import org.jeecg.modules.hotelbalancelog.service.IHotelBalanceLogService; +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.hotelgoods.entity.HotelGoods; @@ -35,6 +37,8 @@ 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.service.IHotelOrderService; +import org.jeecg.modules.hotelorderflow.entity.HotelOrderFlow; +import org.jeecg.modules.hotelorderflow.service.IHotelOrderFlowService; import org.jeecg.modules.hotelorderlog.entity.HotelOrderLog; import org.jeecg.modules.hotelorderlog.service.IHotelOrderLogService; import org.jeecg.modules.hotelshop.entity.HotelShop; @@ -87,6 +91,10 @@ public class OrderServiceImpl implements IOrderService { private IHotelMemberAccountService hotelMemberAccountService; @Resource private IHotelBalanceLogService hotelBalanceLogService; + @Resource + private IHotelCategoryService hotelCategoryService; + @Resource + private IHotelOrderFlowService hotelOrderFlowService; @@ -97,7 +105,9 @@ public class OrderServiceImpl implements IOrderService { LambdaQueryChainWrapper queryChainWrapper = hotelOrderService.lambdaQuery(); queryChainWrapper.eq(HotelOrder::getDelFlag , 0); if(StringUtils.isBlank(orderPageReq.getUserId())){ - queryChainWrapper.eq(HotelOrder::getUserId,hanHaiMember.getId()); + queryChainWrapper.and(ew->ew.eq(HotelOrder::getUserId,hanHaiMember.getId()).or().eq(HotelOrder::getShopId,hanHaiMember.getId())); + + }else{ HanHaiMember haiMember = hanHaiMemberService.lambdaQuery() .eq(HanHaiMember::getId, orderPageReq.getUserId()) @@ -123,7 +133,24 @@ public class OrderServiceImpl implements IOrderService { @Override public Result orderDetail(String id, String token) { HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(token); - HotelOrder hotelOrder = hotelOrderService.getOrderOne(id,hanHaiMember.getId()); + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hanHaiMember.getId()) + .one(); +// HotelOrder byId = hotelOrderService.getById(id); + HotelOrder hotelOrder = null; +// if(hotelShop == null){ + hotelOrder = hotelOrderService.getOrderOne(id,hanHaiMember.getId()); +// }else if(byId.getType() == 0 ){ +// hotelOrder = hotelOrderService.getOrderOne2(id,hotelShop.getUserId()); +// } + List hotelOrderFlows = hotelOrderFlowService.lambdaQuery() + .eq(HotelOrderFlow::getDelFlag, 0) + .eq(HotelOrderFlow::getPid, hotelOrder.getType()) + .orderByAsc(HotelOrderFlow::getSort) + .list(); + hotelOrder.setHotelOrderFlows(hotelOrderFlows); + // HotelOrder hotelOrder = hotelOrderService.lambdaQuery() // .eq(HotelOrder::getDelFlag, 0) // .and(qw -> qw.eq(HotelOrder::getShopId, hanHaiMember.getId()).or().eq(HotelOrder::getUserId, hanHaiMember.getId())) @@ -159,16 +186,8 @@ public class OrderServiceImpl implements IOrderService { HotelOrderLog hotelOrderLog = new HotelOrderLog(); hotelOrderLog.setId(IdWorker.getIdStr()); for (CreateOrderReq createOrderReq:createOrderReqs){ - if(StringUtils.isBlank(createOrderReq.getId())){ - throw new JeecgBootException("商品信息错误"); - } - HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() - .eq(HotelGoods::getDelFlag, 0) - .eq(HotelGoods::getId, createOrderReq.getId()) - .one(); - if(hotelGoods == null){ - throw new JeecgBootException("商品信息错误"); - } + + Long count = hotelAddressService.lambdaQuery() .eq(HotelAddress::getDelFlag, 0) .eq(HotelAddress::getUserId, hanHaiMember.getId()) @@ -190,23 +209,41 @@ public class OrderServiceImpl implements IOrderService { .one(); BigDecimal depositPrice = new BigDecimal(hotelConf.getValue()); - HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() - .eq(HotelGoodsSku::getDelFlag, 0) - .eq(HotelGoodsSku::getId, createOrderReq.getSkuId()) - .one(); - if(hotelGoodsSku == null){ - throw new JeecgBootException("规格信息错误"); - } + HotelOrder hotelOrder = new HotelOrder(); - HotelOrder hotelOrder2 = new HotelOrder(); + HotelOrder hotelOrder2 = null; //租赁逻辑 if(createOrderReq.getType() == 0){ + hotelOrder2 = new HotelOrder(); + if(StringUtils.isBlank(createOrderReq.getId())){ + throw new JeecgBootException("商品信息错误"); + } + HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() + .eq(HotelGoods::getDelFlag, 0) + .eq(HotelGoods::getId, createOrderReq.getId()) + .one(); + if(hotelGoods == null){ + throw new JeecgBootException("商品信息错误"); + } + if(StringUtils.isBlank(createOrderReq.getSkuId())){ throw new JeecgBootException("请选择规格"); } + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, createOrderReq.getSkuId()) + .one(); + if(hotelGoodsSku == null){ + throw new JeecgBootException("规格信息错误"); + } + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelGoods.getCategoryId()) + .one(); BigDecimal price = depositPrice.multiply(new BigDecimal(createOrderReq.getNum())); totalPrice = totalPrice.add(price); @@ -217,7 +254,7 @@ public class OrderServiceImpl implements IOrderService { hotelOrder.setUserPhone(hotelAddress.getPhone()); hotelOrder.setUserAddress(hotelAddress.getAddress()+hotelAddress.getAddressDetail()); hotelOrder.setUserId(hanHaiMember.getId()); - hotelOrder.setShopId(hotelShop.getUserId()); +// hotelOrder.setShopId(hotelShop.getUserId()); hotelOrder.setDeposit(price); hotelOrder.setType(0); hotelOrder.setStatus(0); @@ -229,6 +266,7 @@ public class OrderServiceImpl implements IOrderService { hotelOrder.setOrderPay(price); hotelOrder.setOrderLogId(hotelOrderLog.getId()); hotelOrder.setWashShopFlag(0); + hotelOrder.setCategoryId(hotelCategory.getId()); /*水洗店*/ hotelOrder2.setTitle(hotelGoods.getName()); @@ -249,6 +287,7 @@ public class OrderServiceImpl implements IOrderService { hotelOrder2.setOrderPay(price); hotelOrder2.setOrderLogId(hotelOrderLog.getId()); hotelOrder2.setWashShopFlag(1); + hotelOrder2.setCategoryId(hotelCategory.getId()); }else if(createOrderReq.getType() == 1){/*水洗逻辑*/ @@ -260,21 +299,48 @@ public class OrderServiceImpl implements IOrderService { if(hotelLeaseLog == null){ throw new JeecgBootException("数据错误,请刷新重试"); } - if(hotelLeaseLog.getStartTime() == null){ + if(hotelLeaseLog.getLeaseFlag() == 1 && hotelLeaseLog.getStartTime() == null){ throw new JeecgBootException("还未确认收货,无法水洗"); } - if(!StringUtils.equals(createOrderReq.getShopId(), hotelLeaseLog.getShopId())){ - throw new JeecgBootException("所选择的店铺不是绑定店铺"); + + HotelOrder hotelOrder1 = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getType, 1) + .in(HotelOrder::getStatus, 4, 5, 6, 16) + .eq(HotelOrder::getLeaseId, hotelLeaseLog.getId()) + .one(); + if(hotelOrder1 != null){ + throw new JeecgBootException("该租赁正在水洗中"); } +// if(!StringUtils.equals(createOrderReq.getShopId(), hotelLeaseLog.getShopId())){ +// throw new JeecgBootException("所选择的店铺不是绑定店铺"); +// } + +// if(StringUtils.isBlank(createOrderReq.getId())){ +// throw new JeecgBootException("商品信息错误"); +// } + + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelLeaseLog.getCategoryId()) + .one(); /*相差天数*/ - Long untilDay = DateUtils2.getUntilDay(hotelLeaseLog.getStartTime(), new Date(DateUtils2.getNowDateStrings())); - /*租赁费用*/ - BigDecimal sumDepositPrice = depositPrice.multiply(new BigDecimal(untilDay)); + Long untilDay = new Long(0); + BigDecimal sumDepositPrice = BigDecimal.ZERO; + if(hotelLeaseLog.getLeaseFlag() == 1){ + untilDay = DateUtils2.getUntilDay(hotelLeaseLog.getStartTime(), DateUtils2.getDate(DateUtils2.getNowDate())); +// untilDay = untilDay == null + /*租赁费用*/ + sumDepositPrice = depositPrice.multiply(new BigDecimal(untilDay)); + } + /*水洗费用*/ - BigDecimal washPrice = hotelGoodsSku.getPrice().multiply(new BigDecimal(createOrderReq.getNum())); + BigDecimal washPrice = hotelCategory.getPrice().multiply(new BigDecimal(hotelLeaseLog.getNum())); /*总费用*/ BigDecimal countPrice = sumDepositPrice.add(washPrice); + totalPrice = totalPrice.add(countPrice); hotelOrder.setTitle(hotelLeaseLog.getGoodsName()); hotelOrder.setPic(hotelLeaseLog.getGoodsPic()); @@ -288,17 +354,25 @@ public class OrderServiceImpl implements IOrderService { hotelOrder.setOrderPay(countPrice); hotelOrder.setType(1); hotelOrder.setStatus(3); - hotelOrder.setGoodsId(hotelGoods.getId()); - hotelOrder.setGoodsName(hotelGoods.getName()); - hotelOrder.setSkuId(hotelGoodsSku.getId()); - hotelOrder.setSku(hotelGoodsSku.getTitle()); + if(StringUtils.isNotBlank(hotelLeaseLog.getGoodsId())){ + hotelOrder.setGoodsId(hotelLeaseLog.getGoodsId()); + } + + hotelOrder.setGoodsName(hotelLeaseLog.getGoodsName()); + if(StringUtils.isNotBlank(hotelLeaseLog.getSkuId())){ + hotelOrder.setSkuId(hotelLeaseLog.getSkuId()); + } + + hotelOrder.setSku(hotelLeaseLog.getSku()); hotelOrder.setNum(createOrderReq.getNum()); - hotelOrder.setOrderLogId(hotelLeaseLog.getId()); + hotelOrder.setOrderLogId(hotelOrderLog.getId()); + hotelOrder.setLeaseId(hotelLeaseLog.getId()); } hotelOrders.add(hotelOrder); - hotelOrders2.add(hotelOrder2); - + if(hotelOrder2 != null){ + hotelOrders2.add(hotelOrder2); + } } hotelOrderLog.setOrderPay(totalPrice); hotelOrderLog.setUserId(hanHaiMember.getId()); @@ -330,6 +404,19 @@ public class OrderServiceImpl implements IOrderService { String name = applyRefundOrderReq.getType() == 0?"退货数量":"换货数量"; throw new JeecgBootException("请填写"+name); } + + if(StringUtils.isBlank(applyRefundOrderReq.getAddressId())){ + throw new JeecgBootException("请选择收货地址"); + } + HotelAddress hotelAddress = hotelAddressService.lambdaQuery() + .eq(HotelAddress::getDelFlag, 0) + .eq(HotelAddress::getId, applyRefundOrderReq.getAddressId()) + .one(); + if(hotelAddress == null){ + throw new JeecgBootException("地址数据错误"); + } + + HotelOrder hotelOrder1 = new HotelOrder(); if(applyRefundOrderReq.getType() == 0){ @@ -347,6 +434,43 @@ public class OrderServiceImpl implements IOrderService { if(hotelLeaseLog == null){ throw new JeecgBootException("数据错误,请刷新重试"); } + List hotelOrders = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getLeaseId, hotelLeaseLog.getId()) + .ne(HotelOrder::getStatus, 15) + .list(); + if(hotelOrders.size() != 0){ + throw new JeecgBootException("该租赁不可操作"); + } + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getId, hotelLeaseLog.getOrderId()) + .one(); + if(hotelOrder.getStatus() != 15){ + throw new JeecgBootException("该订单还未收货"); + } + + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); + if(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()){ + + 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(applyRefundOrderReq.getType() == 0?2:1); + hotelLeaseLog2.setNum(applyRefundOrderReq.getRefundNum()); + hotelLeaseLog2.setPrice(hotelLeaseLog.getPrice()); + hotelLeaseLog2.setCategoryId(hotelLeaseLog.getCategoryId()); + hotelLeaseLogService.save(hotelLeaseLog2); + } hotelOrder1.setReason(applyRefundOrderReq.getReason()); @@ -363,13 +487,24 @@ public class OrderServiceImpl implements IOrderService { hotelOrder1.setSku(hotelLeaseLog.getSku()); hotelOrder1.setPic(hotelLeaseLog.getGoodsPic()); hotelOrder1.setStatus(applyRefundOrderReq.getType() == 0 ?11:7); + hotelOrder1.setLeaseId(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()?hotelLeaseLog2.getId():hotelLeaseLog.getId()); + hotelOrder1.setUserName(hotelAddress.getName()); + hotelOrder1.setUserPhone(hotelAddress.getPhone()); + hotelOrder1.setUserAddress(hotelAddress.getAddress()+hotelAddress.getAddressDetail()); + hotelOrder1.setShopId(hotelShop.getUserId()); hotelOrderService.save(hotelOrder1); HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); hotelLeaseLog1.setId(hotelLeaseLog.getId()); - hotelLeaseLog1.setStatus(applyRefundOrderReq.getType() == 0?2:1); + if(hotelLeaseLog.getNum() == applyRefundOrderReq.getRefundNum()){ + hotelLeaseLog1.setStatus(applyRefundOrderReq.getType() == 0?2:1); + } + + hotelLeaseLog1.setNum(hotelLeaseLog.getNum() - applyRefundOrderReq.getRefundNum()); hotelLeaseLogService.updateById(hotelLeaseLog1); + + return Result.OK(); } @@ -422,6 +557,7 @@ public class OrderServiceImpl implements IOrderService { } List hotelOrders = new ArrayList<>(); ArrayList hotelLeaseLogs = new ArrayList<>(); + Integer type = 0; for (HotelOrder hotelOrder:hotelOrderList) { /*租赁业务*/ if(hotelOrder.getType() == 0){ @@ -443,6 +579,7 @@ public class OrderServiceImpl implements IOrderService { hotelLeaseLog.setNum(hotelOrder.getNum()); hotelLeaseLog.setPrice(hotelOrder.getDeposit()); hotelLeaseLog.setFormUserId(hotelOrderLog.getUserId()); + hotelLeaseLog.setCategoryId(hotelOrder.getCategoryId()); }else{ hotelLeaseLog.setUserId(hotelOrder.getUserId()); hotelLeaseLog.setShopId(hotelOrder.getShopId()); @@ -455,6 +592,7 @@ public class OrderServiceImpl implements IOrderService { hotelLeaseLog.setStatus(0); hotelLeaseLog.setNum(hotelOrder.getNum()); hotelLeaseLog.setPrice(hotelOrder.getDeposit()); + hotelLeaseLog.setCategoryId(hotelOrder.getCategoryId()); } @@ -466,10 +604,28 @@ public class OrderServiceImpl implements IOrderService { hotelOrders.add(hotelOrder1); }else if(hotelOrder.getType() == 1){/*水洗逻辑*/ + HotelOrder hotelOrder1 = new HotelOrder(); hotelOrder1.setId(hotelOrder.getId()); hotelOrder1.setStatus(4); hotelOrders.add(hotelOrder1); + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrder.getLeaseId()) + .one(); + if(hotelLeaseLog == null){ + return "FAIL"; + } + if(hotelLeaseLog.getLeaseFlag() == 1){ + type = 1; + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setStartTime(new Date()); + hotelLeaseLogs.add(hotelLeaseLog1); + } + + } } @@ -478,7 +634,12 @@ public class OrderServiceImpl implements IOrderService { hotelOrderLog1.setIsPay(1); hotelOrderLogService.updateById(hotelOrderLog1); - hotelLeaseLogService.saveBatch(hotelLeaseLogs); + if(type == 0){ + hotelLeaseLogService.saveBatch(hotelLeaseLogs); + }else{ + hotelLeaseLogService.updateBatchById(hotelLeaseLogs); + } + hotelOrderService.updateBatchById(hotelOrders); //对比outTradeNo进行业务处理 @@ -503,12 +664,15 @@ public class OrderServiceImpl implements IOrderService { HotelOrder hotelOrder = hotelOrderService.lambdaQuery() .eq(HotelOrder::getDelFlag, 0) .eq(HotelOrder::getId, confirmOrderReq.getId()) - .eq(HotelOrder::getUserId, hanHaiMember.getId()) +// .eq(HotelOrder::getUserId, hanHaiMember.getId()) .one(); if(hotelOrder == null){ throw new JeecgBootException("数据错误,请刷新重试"); } if(hotelOrder.getType() == 0){ + if(!StringUtils.equals(hotelOrder.getUserId(),hanHaiMember.getId())){ + throw new JeecgBootException("数据订单错误"); + } HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() .eq(HotelLeaseLog::getDelFlag, 0) .eq(HotelLeaseLog::getOrderId, hotelOrder.getId()) @@ -526,7 +690,9 @@ public class OrderServiceImpl implements IOrderService { hotelLeaseLog1.setStartTime(new Date()); hotelLeaseLogService.updateById(hotelLeaseLog1); }else if(hotelOrder.getType() == 1){ - + if(!StringUtils.equals(hotelOrder.getShopId(),hanHaiMember.getId())){ + throw new JeecgBootException("数据订单错误"); + } HotelShop hotelShop = hotelShopService.lambdaQuery() .eq(HotelShop::getDelFlag, 0) .eq(HotelShop::getUserId, hotelOrder.getShopId()) @@ -561,13 +727,106 @@ public class OrderServiceImpl implements IOrderService { hotelBalanceLog.setOrderId(hotelOrder.getId()); hotelBalanceLogService.save(hotelBalanceLog); + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(15); + hotelOrderService.updateById(hotelOrder1); + + } + + + return Result.OK(); + } + + @Override + public Result uploadTablecloth(UploadTableclothReq uploadTableclothReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(uploadTableclothReq.getToken()); + if(StringUtils.isBlank(uploadTableclothReq.getCategoryId())){ + throw new JeecgBootException("请选择分类"); + } + if(uploadTableclothReq.getNum() == null || uploadTableclothReq.getNum() <= 0){ + throw new JeecgBootException("请填写数量"); + } + if(StringUtils.isBlank(uploadTableclothReq.getLength())){ + throw new JeecgBootException("请填写长度"); + } + if(StringUtils.isBlank(uploadTableclothReq.getWide())){ + throw new JeecgBootException("请填写宽"); + } + + HotelLeaseLog hotelLeaseLog = new HotelLeaseLog(); + hotelLeaseLog.setCategoryId(uploadTableclothReq.getCategoryId()); + hotelLeaseLog.setGoodsName(uploadTableclothReq.getName()); + hotelLeaseLog.setNum(uploadTableclothReq.getNum()); + hotelLeaseLog.setGoodsPic(uploadTableclothReq.getPic()); + hotelLeaseLog.setUserId(hanHaiMember.getId()); + hotelLeaseLog.setShopId(hotelLeaseLog.getShopId()); + hotelLeaseLog.setLeaseFlag(0); + hotelLeaseLog.setStatus(0); + hotelLeaseLog.setSku(uploadTableclothReq.getLength()+"*"+uploadTableclothReq.getWide()); + hotelLeaseLogService.save(hotelLeaseLog); + + + return Result.OK(); + } + + @Override + public Result confirmAcceptOrder(ConfirmAcceptOrderReq confirmAcceptOrderReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(confirmAcceptOrderReq.getToken()); + + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getShopId,hanHaiMember.getId()) + .eq(HotelOrder::getId, confirmAcceptOrderReq.getId()) + .one(); + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + + if(confirmAcceptOrderReq.getFlag() == 0){ + switch (hotelOrder.getType()){ + case 1: + hotelOrder1.setStatus(5); + break; + case 2: + hotelOrder1.setStatus(17); + break; + case 3: + hotelOrder1.setStatus(18); + break; + } + }else if(confirmAcceptOrderReq.getFlag() == 1){ + switch (hotelOrder.getStatus()){ + case 5: + hotelOrder1.setStatus(6); + break; + case 6: + hotelOrder1.setStatus(15); + break; + } } + hotelOrderService.updateById(hotelOrder1); + return Result.OK(); } + @Override + public Result cancelOrder(CancelOrderReq cancelOrderReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(cancelOrderReq.getToken()); + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .in(HotelOrder::getStatus, 0, 3) + .eq(HotelOrder::getId, cancelOrderReq.getId()) + .one(); + if(hotelOrder == null){ + throw new JeecgBootException("未找到该订单"); + } + + return null; + } + 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 6fafe90..a1afb21 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 @@ -70,4 +70,11 @@ public class ShopController { editShopJobTimeReq.setToken(TokenUtils.getTokenByRequest(request)); return shopService.editShopJobTime(editShopJobTimeReq); } + + @ApiOperation(value = "绑定微信") + @PostMapping("/bind/wx") + public Result bindWx(HttpServletRequest request, BindWxReq bindWxReq){ + bindWxReq.setToken(TokenUtils.getTokenByRequest(request)); + return shopService.bindWx(bindWxReq); + } } 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 0d5c6c6..a9856a3 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 @@ -19,6 +19,7 @@ public class ApplyShopReq { private String latitude; private String longitude; private String address; + private String password; private String token; diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/BindWxReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/BindWxReq.java new file mode 100644 index 0000000..3ee4546 --- /dev/null +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/shop/req/BindWxReq.java @@ -0,0 +1,11 @@ +package org.jeecg.modules.xcx.shop.req; + +import lombok.Data; + +@Data +public class BindWxReq { + + private String token; + private String code; + +} 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 30cf0cd..02963b8 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 @@ -55,4 +55,12 @@ public interface IShopService { */ Result editShopJobTime(EditShopJobTimeReq editShopJobTimeReq); + /** + * 绑定微信 + * @param bindWxReq + * @return + */ + Result bindWx(BindWxReq bindWxReq); + + } 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 c75cfce..6547c46 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 @@ -1,12 +1,16 @@ package org.jeecg.modules.xcx.shop.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.util.PasswordUtil; import org.jeecg.common.util.RedisUtil; +import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.shiro.ShiroRealm; +import org.jeecg.modules.bean.HttpConf; import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; import org.jeecg.modules.hanHaiMember.resp.MyUserResp; import org.jeecg.modules.hanHaiMember.resp.ShopIndexResp; @@ -20,6 +24,7 @@ import org.jeecg.modules.hotelshop.entity.HotelShop; import org.jeecg.modules.hotelshop.service.IHotelShopService; import org.jeecg.modules.xcx.shop.req.*; import org.jeecg.modules.xcx.shop.service.IShopService; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,7 +46,21 @@ public class ShopServiceImpl implements IShopService { private IHotelMemberAccountService hotelMemberAccountService; @Resource private IHanHaiMemberService hanHaiMemberService; + @Resource + private HttpConf httpConf; + /** + * 微信公众号-appid + */ + @Value("${weixin.mpAppId}") + private String mpAppId; + + /** + * 微信公众号-appSecret + */ + @Value("${weixin.mpAppSecret}") + private String mpAppSecret; + @Transactional(rollbackFor = Exception.class) @Override public Result applyShop(ApplyShopReq applyShopReq) { Integer n = (Integer) redisUtil.get("apply:shop:"+applyShopReq.getToken()); @@ -65,6 +84,9 @@ public class ShopServiceImpl implements IShopService { if (StringUtils.isBlank(applyShopReq.getAddress())){ throw new JeecgBootException("请填写地址"); } + if(StringUtils.isBlank(applyShopReq.getPassword())){ + throw new JeecgBootException("请输入密码"); + } HotelShop hotelShop = hotelShopService.lambdaQuery() .eq(HotelShop::getDelFlag, 0) .eq(HotelShop::getUserId, hanHaiMember.getId()) @@ -73,6 +95,15 @@ public class ShopServiceImpl implements IShopService { if(hotelShop != null){ throw new JeecgBootException("您已申请过店铺,请勿重复申请"); } + + String salt = oConvertUtils.randomGen(8); + String encrypt = PasswordUtil.encrypt(applyShopReq.getPassword(), applyShopReq.getPhone(), salt); + HanHaiMember hanHaiMember1 = new HanHaiMember(); + hanHaiMember1.setId(hanHaiMember.getId()); + hanHaiMember1.setPassword(encrypt); + hanHaiMember1.setPasswordSalt(salt); + hanHaiMemberService.updateById(hanHaiMember1); + HotelShop hotelShop1 = new HotelShop(); hotelShop1.setUserId(hanHaiMember.getId()); hotelShop1.setName(applyShopReq.getName()); @@ -222,4 +253,34 @@ public class ShopServiceImpl implements IShopService { return Result.OK(); } + @Override + public Result bindWx(BindWxReq bindWxReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(bindWxReq.getToken()); + if(StringUtils.isNotBlank(hanHaiMember.getAppletOpenid())){ + throw new JeecgBootException("您已绑定过微信"); + } + if (org.apache.commons.lang.StringUtils.isBlank(bindWxReq.getCode())) { + throw new JeecgBootException("小程序code为空"); + } + String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + bindWxReq.getCode() + "&grant_type=authorization_code"; + //使用工具类 + JSONObject json_test = httpConf.getJSONObject(loginUrl); + String wxOpenid = json_test.getString("openid"); + String sessionKey = json_test.getString("session_key"); + if (org.apache.commons.lang.StringUtils.isBlank(wxOpenid)) { + throw new JeecgBootException("未获取到openid"); + } + HanHaiMember hanHaiMember2 = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getAppletOpenid, wxOpenid) + .one(); + if(hanHaiMember2 != null){ + throw new JeecgBootException("该微信已注册,无法绑定"); + } + HanHaiMember hanHaiMember1 = new HanHaiMember(); + hanHaiMember1.setId(hanHaiMember.getId()); + hanHaiMember1.setAppletOpenid(wxOpenid); + hanHaiMemberService.updateById(hanHaiMember1); + return Result.OK(); + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/req/MyLeasePageReq.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/req/MyLeasePageReq.java index d38118d..4424b1c 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/req/MyLeasePageReq.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/user/req/MyLeasePageReq.java @@ -1,5 +1,6 @@ package org.jeecg.modules.xcx.user.req; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @@ -8,6 +9,10 @@ public class MyLeasePageReq { private Integer pageNo = 1; private Integer pageSize = 10; private String token; + @ApiModelProperty(value = "是否租赁 0否 1是") + private Integer leaseFlag; + @ApiModelProperty(value = "0正常 1换货 2退货") + private Integer status; } 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 f551f8c..ae9fe32 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 @@ -74,65 +74,66 @@ public class LoginServiceImpl implements ILoginService { public Result officialLogin(LoginReq loginReq){ Result result = new Result<>(); Map map = new HashMap<>(); - if (StringUtils.isBlank(loginReq.getCode())) { - throw new JeecgBootException("小程序code为空"); - } - String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + loginReq.getCode() + "&grant_type=authorization_code"; - //使用工具类 - JSONObject json_test = httpConf.getJSONObject(loginUrl); - String wxOpenid = json_test.getString("openid"); - String sessionKey = json_test.getString("session_key"); - if (StringUtils.isBlank(wxOpenid)) { - throw new JeecgBootException("未获取到openid"); - } - - HanHaiMember member = memberService.lambdaQuery().eq(HanHaiMember::getAppletOpenid,wxOpenid).one(); - if (member == null) { - if (loginReq.getLatitude() == null || loginReq.getLatitude() == 0 || loginReq.getLongitude() == null || loginReq.getLongitude() == 0){ - throw new JeecgBootException("请授权定位信息"); + if(loginReq.getLoginType() == 0){ + if (StringUtils.isBlank(loginReq.getCode())) { + throw new JeecgBootException("小程序code为空"); } - HotelShop hotelShop = hotelShopService.getDistance(loginReq.getLatitude(), loginReq.getLongitude()); - if(hotelShop == null){ - throw new JeecgBootException("目前无水洗店可绑定,请联系客服处理"); + String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + loginReq.getCode() + "&grant_type=authorization_code"; + //使用工具类 + JSONObject json_test = httpConf.getJSONObject(loginUrl); + String wxOpenid = json_test.getString("openid"); + String sessionKey = json_test.getString("session_key"); + if (StringUtils.isBlank(wxOpenid)) { + throw new JeecgBootException("未获取到openid"); } - //如果user等于null说明该用户第一次登录,数据库没有该用户信息。 - loginReq.setOpenid(wxOpenid); - loginReq.setSession_key(sessionKey); - member = new HanHaiMember(); + + HanHaiMember member = memberService.lambdaQuery().eq(HanHaiMember::getAppletOpenid,wxOpenid).one(); + if (member == null) { + if (loginReq.getLatitude() == null || loginReq.getLatitude() == 0 || loginReq.getLongitude() == null || loginReq.getLongitude() == 0){ + throw new JeecgBootException("请授权定位信息"); + } + HotelShop hotelShop = hotelShopService.getDistance(loginReq.getLatitude(), loginReq.getLongitude()); + if(hotelShop == null){ + throw new JeecgBootException("目前无水洗店可绑定,请联系客服处理"); + } + //如果user等于null说明该用户第一次登录,数据库没有该用户信息。 + loginReq.setOpenid(wxOpenid); + loginReq.setSession_key(sessionKey); + member = new HanHaiMember(); // member.setSesssionKey(sessionKey); - member.setAppletOpenid(wxOpenid); - member.setNickName(loginReq.getNickName()); - member.setHeadImage(loginReq.getHeadimgurl()); - member.setShopId(hotelShop.getId()); - // 生成token返回给小程序端 - String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); - memberService.save(member); - HotelMemberAccount hotelMemberAccount = new HotelMemberAccount(); - hotelMemberAccount.setUserId(member.getId()); - hotelMemberAccountService.save(hotelMemberAccount); - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - // 设置超时时间 - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); - map.put("userInfo", member); - map.put("token", token); + member.setAppletOpenid(wxOpenid); + member.setNickName(loginReq.getNickName()); + member.setHeadImage(loginReq.getHeadimgurl()); + member.setShopId(hotelShop.getId()); + // 生成token返回给小程序端 + String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); + memberService.save(member); + HotelMemberAccount hotelMemberAccount = new HotelMemberAccount(); + hotelMemberAccount.setUserId(member.getId()); + hotelMemberAccountService.save(hotelMemberAccount); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + // 设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); + map.put("userInfo", member); + map.put("token", token); - result.setCode(200); - result.setResult(map); - return result; - } else { + result.setCode(200); + result.setResult(map); + return result; + } else { // member.setHeadImage(loginReq.getHeadimgurl()); // member.setSessionKey(sessionKey); // memberService.saveOrUpdate(member); - // 生成token返回给小程序端 - String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - // 设置超时时间 - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); - map.put("userInfo", member); - map.put("token", token); - //用户id做im账号 - result.setResult(map); - result.setCode(200); + // 生成token返回给小程序端 + String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + // 设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); + map.put("userInfo", member); + map.put("token", token); + //用户id做im账号 + result.setResult(map); + result.setCode(200); // result.setMessage(member.getNickName()+"已于"+member.getCreateTime()+"注册成功!请勿重复注册!"); // // 未绑定手机号,跳转授权绑定手机号 // if (StringUtils.isBlank(member.getPhone())) { @@ -141,7 +142,43 @@ public class LoginServiceImpl implements ILoginService { // result.setResult(map); // return result; // } + } + }else{ + if(org.apache.commons.lang3.StringUtils.isBlank(loginReq.getAccount())){ + throw new JeecgBootException("请输入账号"); + } + if(org.apache.commons.lang3.StringUtils.isBlank(loginReq.getPassword())){ + throw new JeecgBootException("请输入密码"); + } + HanHaiMember hanHaiMember = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getPhone, loginReq.getAccount()) + .one(); + + if(hanHaiMember == null){ + throw new JeecgBootException("账号未注册"); + } + + String encrypt = PasswordUtil.encrypt(loginReq.getPassword(), loginReq.getAccount(), hanHaiMember.getPasswordSalt()); + if(!org.apache.commons.lang3.StringUtils.equals(encrypt,hanHaiMember.getPassword())){ + throw new JeecgBootException("密码不正确"); + } + + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hanHaiMember.getId()) + .one(); + hanHaiMember.setShop(hotelShop); + String token = JwtUtil.sign(hanHaiMember.getPhone(), hanHaiMember.getPassword()); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + // 设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); + map.put("userInfo", hanHaiMember); + map.put("token", token); + //用户id做im账号 + result.setResult(map); + result.setCode(200); } + return result; } } 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 8560f95..d717409 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 @@ -1,5 +1,6 @@ package org.jeecg.modules.xcx.user.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; @@ -75,12 +76,12 @@ public class UserServiceImpl implements IUserService { Page page = new Page<>(myLeasePageReq.getPageNo(), myLeasePageReq.getPageSize()); - - Page hotelLeaseLogPage = hotelLeaseLogService.lambdaQuery() - .eq(HotelLeaseLog::getDelFlag, 0) - .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) - .orderByDesc(HotelLeaseLog::getCreateTime) - .page(page); + IPage hotelLeaseLogPage = hotelLeaseLogService.myLeaseLogPage(page, hanHaiMember.getId(), myLeasePageReq.getLeaseFlag(),myLeasePageReq.getStatus()); +// Page hotelLeaseLogPage = hotelLeaseLogService.lambdaQuery() +// .eq(HotelLeaseLog::getDelFlag, 0) +// .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) +// .orderByDesc(HotelLeaseLog::getCreateTime) +// .page(page); return Result.OK(hotelLeaseLogPage); } 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 e979bf8..b91bd11 100644 --- a/jeecg-boot-module-system/src/main/resources/application-dev.yml +++ b/jeecg-boot-module-system/src/main/resources/application-dev.yml @@ -169,8 +169,9 @@ mybatis-plus: # 默认数据库表下划线命名 table-underline: true configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 - # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 call-setters-on-nulls: true #jeecg专用配置 diff --git a/jeecg-boot-module-system/src/test/java/org/jeecg/modules/system/test/SysUserTest.java b/jeecg-boot-module-system/src/test/java/org/jeecg/modules/system/test/SysUserTest.java index cdcde94..703d6f5 100644 --- a/jeecg-boot-module-system/src/test/java/org/jeecg/modules/system/test/SysUserTest.java +++ b/jeecg-boot-module-system/src/test/java/org/jeecg/modules/system/test/SysUserTest.java @@ -2,6 +2,7 @@ package org.jeecg.modules.system.test; import org.jeecg.JeecgSystemApplication; import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.util.DateUtils2; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RestUtil; @@ -16,6 +17,8 @@ import org.springframework.http.MediaType; import com.alibaba.fastjson.JSONObject; import org.springframework.http.ResponseEntity; +import java.util.Date; + /** * 系统用户单元测试 */ @@ -187,7 +190,8 @@ public class SysUserTest { } @Test public void Test4(){ - System.out.println(this.getDistance(12610325.24929662,3240104.8254822833,26.07421,119.29647)); + Long untilDay = DateUtils2.getUntilDay(new Date("2024-10-09"), new Date(DateUtils2.getNowDateStrings())); + System.out.println(untilDay); } public Double getDistance(double longitude1,double latitude1,double longitude2,double latitude2){