xuhaifeng 1 month ago
parent
commit
75521f85d0
58 changed files with 971 additions and 252 deletions
  1. 6 6
      admin-ui/.env.development
  2. 8 0
      admin-ui/src/api/app/banner.js
  3. 8 0
      admin-ui/src/api/order/goods.js
  4. 2 1
      admin-ui/src/views/activity/couponInfo/index.vue
  5. 2 1
      admin-ui/src/views/activity/discountInfo/index.vue
  6. 2 1
      admin-ui/src/views/activity/rechargeInfo/index.vue
  7. 47 44
      admin-ui/src/views/app/banner/index.vue
  8. 4 2
      admin-ui/src/views/goods/goodsComment/index.vue
  9. 9 11
      admin-ui/src/views/order/cloth/orderList.vue
  10. 59 25
      admin-ui/src/views/order/delivery/index.vue
  11. 23 5
      admin-ui/src/views/order/retailOrder/index.vue
  12. 13 14
      admin-ui/src/views/recharge/batchRecord/index.vue
  13. 17 18
      admin-ui/src/views/refund/refundRetailOrder/index.vue
  14. 4 5
      admin-ui/src/views/system/groupData/list.vue
  15. 5 0
      admin-ui/src/views/system/user/index.vue
  16. 15 0
      yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderClothController.java
  17. 3 1
      yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderDeliveryController.java
  18. 24 11
      yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderGoodsController.java
  19. 47 3
      yiqi-admin/src/main/java/com/yiqi/admin/controller/recharge/RechargePasswordCardController.java
  20. 1 1
      yiqi-admin/src/main/java/com/yiqi/web/controller/system/SysDataGroupController.java
  21. 5 5
      yiqi-api/src/main/java/com/yiqi/api/controller/WeAppBannerController.java
  22. 5 0
      yiqi-api/src/main/java/com/yiqi/api/controller/WeAppUserController.java
  23. 419 0
      yiqi-api/src/main/java/com/yiqi/api/controller/common/CommonController.java
  24. 2 2
      yiqi-api/src/main/java/com/yiqi/api/controller/common/WeAppGoodsCommentController.java
  25. 1 0
      yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderClothController.java
  26. 1 2
      yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderGoodsController.java
  27. 2 1
      yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderRechargeController.java
  28. 3 2
      yiqi-api/src/main/java/com/yiqi/api/controller/system/WeAppStoreController.java
  29. 5 0
      yiqi-common/src/main/java/com/yiqi/app/domain/AppBanner.java
  30. 8 0
      yiqi-common/src/main/java/com/yiqi/app/service/IAppBannerService.java
  31. 3 3
      yiqi-common/src/main/java/com/yiqi/common/enums/OrderGoodsStatusType.java
  32. 2 2
      yiqi-common/src/main/java/com/yiqi/common/enums/PayType.java
  33. 0 7
      yiqi-common/src/main/java/com/yiqi/core/service/IGoodsCommentService.java
  34. 7 8
      yiqi-common/src/main/java/com/yiqi/order/domain/OrderDelivery.java
  35. 7 0
      yiqi-common/src/main/java/com/yiqi/order/domain/OrderGoodsRefund.java
  36. 6 0
      yiqi-common/src/main/java/com/yiqi/order/domain/dto/OrderClothQueryDTO.java
  37. 7 0
      yiqi-common/src/main/java/com/yiqi/order/domain/vo/GoodsOrderRefundQueryVO.java
  38. 30 8
      yiqi-common/src/main/java/com/yiqi/order/domain/vo/OrderDeliveryVO.java
  39. 3 0
      yiqi-common/src/main/java/com/yiqi/order/domain/vo/weapp/AppGoodsOrderInfoVO.java
  40. 3 1
      yiqi-common/src/main/java/com/yiqi/order/service/IOrderGoodsService.java
  41. 6 0
      yiqi-common/src/main/java/com/yiqi/system/domain/vo/SysStoreVo.java
  42. 9 0
      yiqi-common/src/main/java/com/yiqi/system/service/ISysStoreService.java
  43. 10 1
      yiqi-core/src/main/java/com/yiqi/app/service/impl/AppBannerServiceImpl.java
  44. 1 1
      yiqi-core/src/main/java/com/yiqi/app/service/impl/AppUserServiceImpl.java
  45. 50 26
      yiqi-core/src/main/java/com/yiqi/core/service/impl/GoodsCommentServiceImpl.java
  46. 1 1
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderClothServiceImpl.java
  47. 2 1
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderDeliveryServiceImpl.java
  48. 18 7
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderGoodsServiceImpl.java
  49. 3 1
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderRechargeServiceImpl.java
  50. 1 2
      yiqi-core/src/main/java/com/yiqi/recharge/service/impl/RechargePasswordCardServiceImpl.java
  51. 1 1
      yiqi-core/src/main/resources/mapper/app/AppBannerMapper.xml
  52. 5 13
      yiqi-core/src/main/resources/mapper/order/OrderGoodsMapper.xml
  53. 10 1
      yiqi-system/src/main/java/com/yiqi/system/mapper/SysDataGroupInfoMapper.java
  54. 9 0
      yiqi-system/src/main/java/com/yiqi/system/mapper/SysStoreMapper.java
  55. 1 7
      yiqi-system/src/main/java/com/yiqi/system/service/impl/SysDataGroupInfoServiceImpl.java
  56. 6 0
      yiqi-system/src/main/java/com/yiqi/system/service/impl/SysStoreServiceImpl.java
  57. 8 0
      yiqi-system/src/main/resources/mapper/system/SysDataGroupInfoMapper.xml
  58. 12 0
      yiqi-system/src/main/resources/mapper/system/SysStoreMapper.xml

+ 6 - 6
admin-ui/.env.development

@@ -5,12 +5,12 @@ VUE_APP_TITLE = 一七管理系统
 ENV = 'development'
 
 
-# VUE_APP_BASE_API_HOST = 'http://127.0.0.1:9801'
-# VUE_APP_BASE_API = 'http://127.0.0.1:9801'
-# VUE_APP_BASE_API_HOST = 'http://139.224.65.227:8091/prod-api'
-# VUE_APP_BASE_API = 'http://139.224.65.227:8091/prod-api'
-VUE_APP_BASE_API_HOST = 'http://192.168.5.176:9801/'
-VUE_APP_BASE_API = 'http://192.168.5.176:9801/'
+VUE_APP_BASE_API_HOST = 'http://192.168.5.176:9801'
+VUE_APP_BASE_API = 'http://192.168.5.176:9801'
+#VUE_APP_BASE_API_HOST = 'http://139.224.65.227:8091/prod-api'
+#VUE_APP_BASE_API = 'http://139.224.65.227:8091/prod-api'
+# VUE_APP_BASE_API_HOST = 'http://192.168.5.247:9801/'
+# VUE_APP_BASE_API = 'http://192.168.5.247:9801/'
 
 
 # 路由懒加载

+ 8 - 0
admin-ui/src/api/app/banner.js

@@ -42,3 +42,11 @@ export function delBanner(id) {
     method: 'delete'
   })
 }
+
+//获取所有页面配置
+export function getAllPageLink() {
+  return request({
+    url: '/mapi/system/group/data/selectByKey?key=page_link',
+    method: 'get'
+  })
+}

+ 8 - 0
admin-ui/src/api/order/goods.js

@@ -17,6 +17,14 @@ export function getGoods(id) {
   })
 }
 
+// 查询商品订单详细
+export function getRefundGoods(id) {
+  return request({
+    url: '/mapi/order/goods/refund/' + id,
+    method: 'get'
+  })
+}
+
 // 新增商品订单
 export function insertRetailOrderGoods(data) {
   return request({

+ 2 - 1
admin-ui/src/views/activity/couponInfo/index.vue

@@ -34,7 +34,8 @@
         <!-- 列表区域 -->
         <el-card shadow="never">
             <Page uri="/mapi/activity/couponInfo/list" :request-params="queryParams" ref="pagination">
-                <el-table-column label="活动信息" min-width="250" align="left">
+              <el-table-column label="活动编号" align="center" prop="id" width="100" />
+              <el-table-column label="活动信息" min-width="250" align="left">
                     <template slot-scope="scope">
                         <div class="activity-card">
                             <div class="activity-main">

+ 2 - 1
admin-ui/src/views/activity/discountInfo/index.vue

@@ -25,7 +25,8 @@
         <!-- 列表区域 -->
         <el-card shadow="never">
             <Page uri="/mapi/activity/discountInfo/list" :request-params="queryParams" ref="pagination">
-                <el-table-column label="活动信息" min-width="250" align="left">
+              <el-table-column label="活动编号" align="center" prop="id" width="100" />
+              <el-table-column label="活动信息" min-width="250" align="left">
                     <template slot-scope="scope">
                         <div class="activity-card">
                             <div class="activity-main">

+ 2 - 1
admin-ui/src/views/activity/rechargeInfo/index.vue

@@ -25,7 +25,8 @@
         <!-- 列表区域 -->
         <el-card shadow="never">
             <Page uri="/mapi/activity/recharge/list" :request-params="queryParams" ref="pagination">
-                <el-table-column label="活动信息" width="350" align="left">
+              <el-table-column label="活动编号" align="center" prop="id" width="100" />
+              <el-table-column label="活动信息" width="350" align="left">
                     <template slot-scope="scope">
                         <div class="activity-card">
                             <div class="activity-main">

+ 47 - 44
admin-ui/src/views/app/banner/index.vue

@@ -41,7 +41,7 @@
 
         <Page uri="/app/banner/list" :request-params="queryParams" ref="pagination">
             <el-table-column label="ID" align="center" prop="id" />
-            <el-table-column label="图片" align="center" prop="imgUrl" width="110">
+            <el-table-column label="图片" align="center" prop="imgUrl" width="100">
                 <template slot-scope="scope">
                     <el-image style="width: 80px; height: 80px" :src="scope.row.imgUrl" :preview-src-list="[scope.row.imgUrl]"> </el-image>
                 </template>
@@ -68,12 +68,12 @@
                     <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.isHot" />
                 </template>
             </el-table-column>
+          <el-table-column label="排序" align="center" prop="sort" />
             <el-table-column label="创建人" align="center" prop="createBy" />
             <el-table-column label="创建时间" align="center" prop="createTime" width="180" />
             <el-table-column label="修改人" align="center" prop="updateBy" />
             <el-table-column label="修改时间" align="center" prop="createTime" width="180" />
-            <el-table-column label="排序" align="center" prop="sort" width="100" />
-            <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
                 <template slot-scope="scope">
                     <el-button type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="[bannerType == 0 ? 'app:banner:edit' : 'app:launchAdver:edit']">修改</el-button>
                     <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="[bannerType == 0 ? 'app:banner:remove' : 'app:launchAdver:remove']">删除</el-button>
@@ -100,6 +100,11 @@
                     <!--              </el-radio-group>-->
                     <!--            </el-form-item>-->
                     <!--          </el-col>-->
+                  <el-col :span="24">
+                    <el-form-item label="标题" prop="redirectTitle">
+                      <el-input v-model="form.redirectTitle" placeholder="请输入标题" />
+                    </el-form-item>
+                  </el-col>
                     <el-col :span="24">
                         <el-form-item label="点击类型" prop="clickType">
                             <el-radio-group v-model="form.clickType" size="small" @input="onClickTypeChange">
@@ -107,11 +112,6 @@
                             </el-radio-group>
                         </el-form-item>
                     </el-col>
-                    <el-col :span="24">
-                        <el-form-item label="标题" prop="redirectTitle">
-                            <el-input v-model="form.redirectTitle" placeholder="请输入标题" />
-                        </el-form-item>
-                    </el-col>
                     <el-col :span="24" v-if="form.clickType == '1'">
                         <el-form-item label="跳转内容" prop="redirectContent">
                             <el-input v-model="form.redirectContent" placeholder="请输入跳转网址" />
@@ -122,21 +122,26 @@
                             <editor v-model="form.redirectContent" :min-height="192" />
                         </el-form-item>
                     </el-col>
+                  <el-col :span="24" v-if="form.clickType == '3'">
+                    <el-form-item label="跳转页面" >
+                      <el-select placeholder="请选择页面" v-model="pageSelectUrl" @change="switchPage">
+                        <el-option v-for="dict in pageData" :key="dict.id" :label="dict.name" :value="dict.url" />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
                     <el-col :span="24" v-if="form.clickType == '3'">
-                        <el-form-item label="跳转内容" prop="redirectContent">
-                            <!-- <el-input v-model="form.redirectContent" placeholder="请输入内部页面路径" /> -->
-                             <el-select v-model="form.redirectContent" placeholder="请选择内部页面路径">
-                                <el-option v-for="item in tabList" :key="item.url" :label="item.name" :value="item.url" />
-                            </el-select>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="24" v-if="bannerType == 3">
-                        <el-form-item label="是否热销" prop="isHot">
-                            <el-radio-group v-model="form.isHot">
-                                <el-radio-button v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio-button>
-                            </el-radio-group>
+                        <el-form-item label="页面地址" prop="redirectContent">
+                            <el-input v-model="form.redirectContent" placeholder="请输入内部页面路径" />
+                            <span style="color: #888a8e">
+                              如果地址包含?,则要修改页面地址,把?内容换成对应业务的id
+                            </span>
                         </el-form-item>
                     </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="排序" prop="sort">
+                      <el-input-number v-model="form.sort" placeholder="请输入排序号" />
+                    </el-form-item>
+                  </el-col>
                     <el-col :span="24">
                         <el-form-item label="状态" prop="status">
                             <el-radio-group v-model="form.status" size="small">
@@ -144,11 +149,6 @@
                             </el-radio-group>
                         </el-form-item>
                     </el-col>
-                    <el-col :span="24" v-if="bannerType == 3">
-                        <el-form-item label="排序">
-                            <el-input-number v-model="form.sort" :min="1" step="1" :max="10000"></el-input-number>
-                        </el-form-item>
-                    </el-col>
                 </el-form>
             </el-row>
             <div slot="footer" class="dialog-footer">
@@ -160,10 +160,7 @@
 </template>
 
 <script>
-import { listBanner, getBanner, delBanner, addBanner, updateBanner } from '@/api/app/banner'
-import {
-    groupDataListApi
-} from "@/api/system/group";
+import { listBanner, getBanner, delBanner, addBanner, updateBanner, getAllPageLink } from '@/api/app/banner'
 
 export default {
     name: 'Banner',
@@ -183,8 +180,10 @@ export default {
             showSearch: true,
             // 总条数
             total: 0,
+          pageSelectUrl: '',
             // 轮播图表格数据
             bannerList: [],
+            pageData: [],
             // 弹出层标题
             title: '',
             // 是否显示弹出层
@@ -194,14 +193,13 @@ export default {
                 bannerType: null,
                 imgUrl: null,
                 clickType: null,
-                redirectContent: null,
                 status: null,
                 createById: null,
                 updateById: null
             },
             // 表单参数
             form: {
-                isHot: 'N'
+              sort: 0
             },
             // 表单校验
             rules: {
@@ -241,8 +239,7 @@ export default {
                     }
                 ]
             },
-            bannerType: '',
-            tabList: []
+            bannerType: ''
         }
     },
     created() {
@@ -250,20 +247,25 @@ export default {
         this.queryParams.bannerType = this.bannerType
         this.form.bannerType = this.bannerType
         this.getList()
-
-        groupDataListApi({
-            page: 1,
-            limit: 100,
-            gid: 5
-        }).then(async (res) => {
-            this.tabList = res.rows;
-        }).catch((res) => {
-            this.$message.error(res.msg);
-        });
+        this.getPageLink()
     },
     methods: {
+      //获取快递公司
+      getPageLink() {
+        getAllPageLink().then((res) => {
+          this.pageData = res.data
+        })
+      },
+      switchPage(){
+        if(this.pageSelectUrl){
+          this.form.redirectContent = this.pageSelectUrl
+        } else {
+          this.form.redirectContent = ''
+        }
+      },
         onClickTypeChange() {
             this.form.redirectContent = ''
+            this.pageSelectUrl = ''
         },
         // 上传前校检格式和大小
         handleBeforeUpload(file) {
@@ -320,8 +322,9 @@ export default {
                 clickType: null,
                 redirectContent: null,
                 status: '0',
-                sort: 0
+                 sort: 0
             }
+            this.pageSelectUrl = ''
             this.resetForm('form')
         },
         /** 搜索按钮操作 */

+ 4 - 2
admin-ui/src/views/goods/goodsComment/index.vue

@@ -1,7 +1,9 @@
 <template>
     <div class="app-container">
       <el-tabs v-model="goodsType" @tab-click="onChangeGoodsType">
-        <el-tab-pane v-for="dict in dict.type.goods_type" :label="dict.label" :name="dict.value"></el-tab-pane>
+        <el-tab-pane  label="普通商品" name="0"></el-tab-pane>
+        <el-tab-pane  label="生活服务" name="2"></el-tab-pane>
+        <el-tab-pane  label="汽车美容" name="3"></el-tab-pane>
       </el-tabs>
         <!-- 搜索区域卡片 -->
         <el-card class="search-card" shadow="never">
@@ -19,7 +21,6 @@
                 </el-form-item>
                 <el-form-item label="评论类型" prop="commentType">
                     <el-radio-group v-model="queryParams.commentType">
-                        <el-radio-button label="">全部</el-radio-button>
                         <el-radio-button label="0">好评</el-radio-button>
                         <el-radio-button label="1">差评</el-radio-button>
                     </el-radio-group>
@@ -385,6 +386,7 @@ export default {
       onChangeGoodsType() {
         this.queryParams.goodsType = this.goodsType
         this.handleQuery()
+        this.getGoodsList()
       },
         /** 查询商品评论列表 */
         getList() {

+ 9 - 11
admin-ui/src/views/order/cloth/orderList.vue

@@ -99,14 +99,8 @@
         </el-table-column>
         <el-table-column label="支付方式" align="center" width="100">
           <template slot-scope="scope">
-            <span v-if=" scope.row.payTimeType === '1' && scope.row.payStatus == 0">--</span>
-            <div v-else>
-                <span v-if=" scope.row.payType === '0'">微信</span>
-                <span v-if=" scope.row.payType === '1'">支付宝</span>
-                <span v-if=" scope.row.payType === '2'">现金</span>
-                <span v-if=" scope.row.payType === '3'">会员余额</span>
-            </div>
-            
+            <el-tag type="warning" v-if="scope.row.payStatus == 0">未付款</el-tag>
+            <dict-tag v-else :options="dict.type.recharge_pay_type" :value="scope.row.payType" />
           </template>
         </el-table-column>
         <el-table-column label="订单金额" align="center" width="100">
@@ -322,7 +316,7 @@ import { allOrg } from '@/api/system/store'
 
 export default {
     name: 'ClothItem',
-    dicts: ['sys_yes_no', 'cloth_appointment_status', 'pay_status', 'order_cloth_flow_status', 'order_cloth_flow_action', 'cloth_order_status', 'goods_order_refund_status'],
+    dicts: ['sys_yes_no', 'cloth_appointment_status', 'pay_status', 'recharge_pay_type', 'order_cloth_flow_status', 'order_cloth_flow_action', 'cloth_order_status', 'goods_order_refund_status'],
     data() {
         return {
             orgList: [],
@@ -485,7 +479,11 @@ export default {
             } else if (row.payType == '3') {
                 content += '余额 '
             }
-            content += row.payAmount + '元!是否确定撤单?'
+            var payAmount = row.payAmount
+            if(row.payStatus != '1') {
+              payAmount = "0"
+            }
+            content += payAmount + '元!是否确定撤单?'
             this.$confirm(content).then(function () {
                 refundOrderCloth({ orderId: row.id }).then((res) => {
                     _this.$message({
@@ -538,7 +536,7 @@ export default {
             //     this.pointerType = true
             // })
 
-            
+
         },
         setPointer(type) {
             if (!this.LODOP) {

+ 59 - 25
admin-ui/src/views/order/delivery/index.vue

@@ -39,10 +39,16 @@
     </el-row>
 
     <Page uri="/mapi/order/delivery/list" :request-params="queryParams" ref="pagination">
-      <el-table-column label="编号" align="center" prop="storeId" width="100px" />
-      <el-table-column label="商品订单号" align="center" prop="orderSn" />
+      <el-table-column label="编号" align="center" prop="id"  />
       <el-table-column label="配送单号" align="center" prop="deliverySn" />
+      <el-table-column label="商品订单号" align="center" prop="orderSn" />
       <el-table-column label="所属门店" align="center" prop="storeName" />
+      <el-table-column label="配送方式" align="center" prop="deliveryWay">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.deliveryWay == 0" type="primary"> {{ '三方' }}</el-tag>
+          <el-tag v-if="scope.row.deliveryWay == 1" type="primary"> {{ '自配送' }}</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column label="订单类型" align="center" prop="clothOrderType">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.clothOrderType == 0" type="success"> {{ '收衣' }}</el-tag>
@@ -57,33 +63,61 @@
           <el-tag v-if="scope.row.deliveryStatus == dict.value" v-for="dict in dict.type.delivery_status" :key="dict.code"> {{ dict.label }}</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="取货码" align="center" prop="fetchCode" />
-      <el-table-column label="收货码" align="center" prop="recvCode" />
-      <el-table-column label="配送员姓名" align="center" prop="transporterName" />
-      <el-table-column label="配送员电话" align="center" prop="transporterPhone" />
-
-<!--      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150">-->
-<!--        <template slot-scope="scope">-->
-<!--          <el-button type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['settlement:store:rate:edit']">修改</el-button>-->
-<!--        </template>-->
-<!--      </el-table-column>-->
+<!--      <el-table-column label="取货码" align="center" prop="fetchCode" />-->
+<!--      <el-table-column label="收货码" align="center" prop="recvCode" />-->
+      <el-table-column label="配送员" align="center" prop="transporterName" >
+        <template slot-scope="scope">
+          {{ scope.row.transporterName || '--' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="配送员电话" align="center" prop="transporterPhone" >
+        <template slot-scope="scope">
+          {{ scope.row.transporterPhone || '--' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="下单时间" align="center" prop="createTime"  />
+      <el-table-column label="接单时间" align="center" prop="acceptTime"  >
+        <template slot-scope="scope">
+          {{ scope.row.acceptTime || '--' }}
+        </template>
+      </el-table-column>
+<!--      <el-table-column label="完成时间" align="center" prop="finishTime" width="140" />-->
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="100">
+        <template slot-scope="scope">
+          <el-button type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >查看</el-button>
+        </template>
+      </el-table-column>
     </Page>
 
     <!-- 添加或修改结算费率对话框 -->
     <el-dialog :title="title" :visible.sync="open" size="30%" append-to-body>
-      <el-row :gutter="15">
-        <el-form ref="form" :model="form" :rules="rules" label-width="130px">
-          <el-col :span="24">
-            <el-form-item label="工厂结算费率" prop="factoryRate">
-              <el-input-number v-model="form.factoryRate" :precision="2" :step="0.01" :max="1" />
-            </el-form-item>
-          </el-col>
-        </el-form>
-      </el-row>
-
+      <el-descriptions :column="1" border>
+        <el-descriptions-item label="配送单号">{{ form.deliverySn }}</el-descriptions-item>
+        <el-descriptions-item label="商品订单号">{{ form.orderSn }}</el-descriptions-item>
+        <el-descriptions-item label="配送方式">
+          <el-tag v-if="form.deliveryWay == 0" type="primary"> {{ '三方' }}</el-tag>
+          <el-tag v-if="form.deliveryWay == 1" type="primary"> {{ '自配送' }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="订单类型">
+          <el-tag v-if="form.clothOrderType == 0" type="success">收衣</el-tag>
+          <el-tag v-if="form.clothOrderType == 1" type="primary">取衣</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="客户名称">{{ form.userName }}</el-descriptions-item>
+        <el-descriptions-item label="地址">{{ form.userAddress }}</el-descriptions-item>
+        <el-descriptions-item label="联系方式">{{ form.userPhone }}</el-descriptions-item>
+        <el-descriptions-item label="订单状态">
+          <el-tag v-if="form.deliveryStatus == dict.value" v-for="dict in dict.type.delivery_status" :key="dict.code">{{ dict.label }}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="取货码">{{ form.fetchCode }}</el-descriptions-item>
+        <el-descriptions-item label="收货码">{{ form.recvCode }}</el-descriptions-item>
+        <el-descriptions-item label="配送员">{{ form.transporterName || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="配送员电话">{{ form.transporterPhone || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="下单时间">{{ form.createTime }}</el-descriptions-item>
+        <el-descriptions-item label="接单时间">{{ form.acceptTime }}</el-descriptions-item>
+        <el-descriptions-item label="完成时间">{{ form.finishTime }}</el-descriptions-item>
+      </el-descriptions>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm" style="margin-left: 5%">提交</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button @click="cancel">关 闭</el-button>
       </div>
     </el-dialog>
   </div>
@@ -207,7 +241,7 @@ export default {
         this.open = true
       }
       this.form.storeId = row.storeId
-      this.title = '修改门店结算费率'
+      this.title = '查看配送单明细'
     },
     /** 提交按钮 */
     submitForm() {

+ 23 - 5
admin-ui/src/views/order/retailOrder/index.vue

@@ -1,22 +1,29 @@
 <template>
     <div class="app-container">
         <el-form :model="queryParams" ref="queryForm" @submit.native.prevent :inline="true" v-show="showSearch" label-width="100px">
-            <el-form-item prop="orderNo">
+          <el-form-item label-width="120px" prop="orgId" label="订单归属" v-if="userInfoVO.userType == '00'">
+            <el-select v-model="queryParams.orgId" filterable placeholder="请选择" clearable style="width: 240px">
+              <template>
+                <el-option v-for="store in storeList" :key="store.id" :label="store.name" :value="store.id"> </el-option>
+              </template>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="orderNo" label="订单编号">
                 <el-input v-model="queryParams.orderNo" placeholder="请输入订单编号" clearable @keyup.enter.native="handleQuery" />
             </el-form-item>
-            <el-form-item prop="orderStatus">
+            <el-form-item prop="orderStatus" label="状态">
                 <el-select v-model="queryParams.orderStatus" placeholder="请选择支付状态" clearable>
                     <el-option v-for="dict in dict.type.order_goods_status" :key="dict.code" :label="dict.label" :value="dict.value" />
                 </el-select>
             </el-form-item>
-            <el-form-item prop="realName">
+            <el-form-item prop="realName" label="客户姓名">
                 <el-input v-model="queryParams.realName" placeholder="请输入客户姓名" clearable @keyup.enter.native="handleQuery" />
             </el-form-item>
-            <el-form-item prop="phoneNumber">
+            <el-form-item prop="phoneNumber" label="手机号">
                 <el-input v-model="queryParams.phoneNumber" placeholder="请输入手机号" clearable @keyup.enter.native="handleQuery" />
             </el-form-item>
             <br />
-            <el-form-item>
+            <el-form-item label="下单日期">
                 <el-date-picker clearable v-model="queryCreateTime" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="下单时间" end-placeholder="结束日期" @change="getCreateTime"></el-date-picker>
             </el-form-item>
             <el-form-item>
@@ -346,6 +353,7 @@ import { cancelOrder, getGoods, listGoods, outOrderGoods, refundOrderGoods, rePa
 import { findUserByPhoneNumber, getUser } from '@/api/app/user'
 import { getLodop } from '@/utils/lodopUtils'
 import { printGoods } from '@/api/order/clothItem'
+import { allOrg } from '@/api/system/store'
 
 export default {
     name: 'goodsRetailOrder',
@@ -386,11 +394,13 @@ export default {
             openRefundPage: false,
             // 查询参数
             queryParams: {
+                orgId: null,
                 realName: null,
                 phoneNumber: null,
                 orderNo: null,
                 orderStatus: null
             },
+           storeList: [],
             // 表单参数
             payFrom: {},
             // 表单校验
@@ -481,6 +491,14 @@ export default {
         this.goodsType = this.getUrlParam('goodsType')
         this.getList()
         this.getdeliveryAll()
+        allOrg().then((res) => {
+          this.orgList = res.data
+          this.orgList.forEach((org) => {
+            if (org.sourceType == '02') {
+              this.storeList.push(org)
+            }
+          })
+        })
     },
     mounted() {
         this.number = 1

+ 13 - 14
admin-ui/src/views/recharge/batchRecord/index.vue

@@ -65,13 +65,12 @@
                 </el-table-column>
                 <el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width">
                     <template slot-scope="scope">
-                        <el-button
-                            type="text"
-                            icon="el-icon-edit"
-                            @click="handleUpdateExpireTime(scope.row)"
-                            v-hasPermi="['recharge:batchRecord:edit']"
-                        >修改过期时间</el-button>
-                        <el-divider direction="vertical" />
+<!--                        <el-button-->
+<!--                            type="text"-->
+<!--                            icon="el-icon-edit"-->
+<!--                            @click="handleUpdateExpireTime(scope.row)"-->
+<!--                            v-hasPermi="['recharge:batchRecord:edit']"-->
+<!--                        >修改过期时间</el-button>-->
                         <el-button
                             type="text"
                             icon="el-icon-tickets"
@@ -91,11 +90,11 @@
         </el-card>
 
         <!-- 修改过期时间对话框 -->
-        <el-dialog 
-            :title="title" 
-            :visible.sync="open" 
-            width="700px" 
-            append-to-body 
+        <el-dialog
+            :title="title"
+            :visible.sync="open"
+            width="700px"
+            append-to-body
             destroy-on-close
             :close-on-click-modal="false"
         >
@@ -116,7 +115,7 @@
                     </el-descriptions>
 
                     <el-divider content-position="left">过期时间设置</el-divider>
-                    
+
                     <el-form-item label="激活过期时间" prop="lastExpireTime">
                         <el-date-picker
                             v-model="form.lastExpireTime"
@@ -366,7 +365,7 @@ export default {
 
     :deep(.el-descriptions) {
         margin: 20px 0;
-        
+
         .el-descriptions-item__label {
             width: 120px;
             font-weight: bold;

+ 17 - 18
admin-ui/src/views/refund/refundRetailOrder/index.vue

@@ -43,12 +43,12 @@
                     <span>{{ scope.row.phoneNumber ? scope.row.phoneNumber : '' }}</span>
                 </template>
             </el-table-column>
-            <el-table-column label="订单总价(元)" align="center" prop="totalPrice" width="120px" />
+            <el-table-column label="订单总价(元)" align="center" prop="orderAmount" width="120px" />
             <el-table-column label="支付金额(元)" align="center" prop="payAmount" width="120px" />
-            <el-table-column label="订单状态" align="center" prop="orderStatus" width="100px">
-                <template slot-scope="scope">
-                    <dict-tag :options="dict.type.order_goods_status" :value="scope.row.orderStatus" />
-                </template>
+            <el-table-column label="支付方式" align="center" prop="payType" width="120px">
+              <template slot-scope="scope">
+                <dict-tag :options="dict.type.recharge_pay_type" :value="scope.row.payType" />
+              </template>
             </el-table-column>
             <el-table-column label="退款金额(元)" align="center" prop="refundAmount" width="120px" />
             <el-table-column label="退款描述" align="center" prop="refundReason" show-overflow-tooltip>
@@ -62,17 +62,6 @@
                 </template>
             </el-table-column>
             <el-table-column label="退款时间" align="center" prop="refundTime" width="140px" />
-            <el-table-column label="支付方式" align="center" prop="payType" width="120px">
-                <template slot-scope="scope">
-                    <dict-tag :options="dict.type.recharge_pay_type" :value="scope.row.payType" />
-                </template>
-            </el-table-column>
-            <el-table-column label="支付时间" align="center" prop="payTime" width="140">
-                <template slot-scope="scope">
-                    <span>{{ scope.row.payTime ? scope.row.payTime : '--' }}</span>
-                </template>
-            </el-table-column>
-            <!--      <el-table-column label="发货时间" align="center" prop="sendTime" width="200px"/>-->
             <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="250">
                 <template slot-scope="scope">
                     <el-button type="text" icon="el-icon-check" @click="approvalYes(scope.row)" v-if="scope.row.refundStatus == '1' && userInfoVO.userType == '00'">退款审核同意</el-button>
@@ -136,7 +125,17 @@
 </template>
 
 <script>
-import { cancelOrder, getGoods, listGoods, outOrderGoods, refundApprovalPass, refundApprovalReject, refundOrderGoodsList, rePayOrder } from '@/api/order/goods'
+import {
+  cancelOrder,
+  getGoods,
+  getRefundGoods,
+  listGoods,
+  outOrderGoods,
+  refundApprovalPass,
+  refundApprovalReject,
+  refundOrderGoodsList,
+  rePayOrder
+} from '@/api/order/goods'
 import { findUserByPhoneNumber, getUser } from '@/api/app/user'
 
 export default {
@@ -227,7 +226,7 @@ export default {
             this.detailLoading = true
             this.detailView = {}
             const id = row.id
-            getGoods(id).then((response) => {
+          getRefundGoods(id).then((response) => {
                 this.detailView = response.data
                 this.costTotalPrice = this.detailView.totalPrice
                 this.detailLoading = false

+ 4 - 5
admin-ui/src/views/system/groupData/list.vue

@@ -44,12 +44,11 @@
               <el-button type="text" icon="el-icon-edit" @click="edit(scope.row)">修改</el-button>
               <el-button type="text" icon="el-icon-delete" @click="del(scope.row)">删除</el-button>
             </template>
-
           </template>
         </el-table-column>
       </el-table>
       <div class="acea-row row-right page">
-        <pagination v-if="total" :total="total" :page.sync="formValidate.page" :limit.sync="formValidate.limit" @pagination="getList" />
+        <pagination v-if="total" :total="total" :page.sync="formValidate.pageNum" :limit.sync="formValidate.pageSize" @pagination="getList" />
       </div>
     </div>
   </div>
@@ -81,8 +80,8 @@ export default {
       },
       formValidate: {
         status: '',
-        page: 1,
-        limit: 20,
+        pageNum: 1,
+        pageSize: 10,
         gid: 0,
       },
       total: 0,
@@ -244,7 +243,7 @@ export default {
     },
     // 表格搜索
     userSearchs() {
-      this.formValidate.page = 1;
+      this.formValidate.pageNum = 1;
       this.getList();
     },
     // 添加表单

+ 5 - 0
admin-ui/src/views/system/user/index.vue

@@ -446,6 +446,7 @@ export default {
                 employeeNo: [{ required: true, message: '员工编号不能为空', trigger: 'blur' }],
                 certType: [{ required: true, message: '证件类型不能为空', trigger: 'change' }],
                 certNo: [{ required: true, message: '证件号不能为空', trigger: 'blur' }],
+                roleIds: [{ required: true, message: '角色不能为空', trigger: 'blur' }],
                 joinDate: [{ required: true, message: '入职日期不能为空', trigger: 'blur' }]
                 // nation: [
                 //   { required: true, message: "民族不能为空", trigger: "blur" }
@@ -719,6 +720,10 @@ export default {
         submitForm: function () {
             this.$refs['form'].validate((valid) => {
                 if (valid) {
+                    if(this.form.roleIds.length==0){
+                      this.$modal.msgError('请选择角色')
+                      return
+                    }
                     if (this.form.userId != undefined) {
                         updateUser(this.form).then((response) => {
                             this.$modal.msgSuccess('修改成功')

+ 15 - 0
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderClothController.java

@@ -245,6 +245,7 @@ public class OrderClothController extends BaseController {
                 orderDelivery.setFetchCode(result.getFetch_code());
                 orderDelivery.setServiceTransId(result.getService_trans_id());
                 orderDelivery.setTransOrderId(result.getTrans_order_id());
+                orderDelivery.buildCreateData();
                 orderDeliveryService.save(orderDelivery);
 
                 if (result.getErrcode() != 0) {
@@ -304,6 +305,10 @@ public class OrderClothController extends BaseController {
         orderDelivery.setDeliveryWay(ClothOrderDeliveryWay.delivery.getCode());
         orderDelivery.setStoreId(orderCloth.getOrgId());
         orderDelivery.setDeliveryManId(deliveryManId);
+        AppUser appUser = appUserService.selectAppUserById(deliveryManId);
+        orderDelivery.setTransporterName(appUser.getRealName());
+        orderDelivery.setTransporterPhone(appUser.getPhoneNumber());
+        orderDelivery.buildCreateData();
         orderDeliveryService.save(orderDelivery);
         return R.ok();
     }
@@ -503,6 +508,12 @@ public class OrderClothController extends BaseController {
         if (StringUtils.isNotEmpty(orderClothQueryDTO.getOrderType())) {
             queryWrapper.eq(OrderCloth::getOrderType, orderClothQueryDTO.getOrderType());
         }
+        if (StringUtils.isNotEmpty(orderClothQueryDTO.getPayType())) {
+            queryWrapper.eq(OrderCloth::getPayType, orderClothQueryDTO.getPayType());
+        }
+        if (StringUtils.isNotEmpty(orderClothQueryDTO.getPayStatus())) {
+            queryWrapper.eq(OrderCloth::getPayStatus, orderClothQueryDTO.getPayStatus());
+        }
         if (StringUtils.isNotEmpty(orderClothQueryDTO.getIsSelectOrg())) {
             if (SysBoolType.YES.getCode().equals(orderClothQueryDTO.getIsSelectOrg())) {
                 queryWrapper.isNotNull(OrderCloth::getOrgId);
@@ -786,7 +797,11 @@ public class OrderClothController extends BaseController {
         // 更新配送员id
         OrderDelivery orderDelivery = orderDeliveryService.selectOrderDeliveryByOrderId(orderCloth.getOrderNo(), ClothOrderDeliveryType.collectCloth.getCode());
         orderDelivery.setDeliveryManId(Long.valueOf(deliveryId));
+        AppUser appUser = appUserService.selectAppUserById(Long.valueOf(deliveryId));
+        orderDelivery.setTransporterName(appUser.getRealName());
+        orderDelivery.setTransporterPhone(appUser.getPhoneNumber());
         orderDelivery.setDeliveryStatus(OrderDeliveryStatusEnum.CREATE_ORDER_SUCCESS.getCode());
+        orderDelivery.buildUpdateData();
         orderDeliveryService.updateById(orderDelivery);
         return success(orderClothService.updateById(orderCloth));
     }

+ 3 - 1
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderDeliveryController.java

@@ -9,6 +9,7 @@ import com.yiqi.order.domain.OrderDelivery;
 import com.yiqi.order.domain.dto.OrderDeliveryRequestDTO;
 import com.yiqi.order.domain.vo.OrderDeliveryVO;
 import com.yiqi.order.service.IOrderDeliveryService;
+import com.yiqi.system.domain.SysStore;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -73,7 +74,8 @@ public class OrderDeliveryController extends BaseController {
     @GetMapping(value = "/{id}")
     @ApiOperation(value = "获取订单配送详细信息")
     public AjaxResult getInfo(@PathVariable("id") Integer id) {
-        return success(orderDeliveryService.getById(id));
+        OrderDelivery orderDelivery = orderDeliveryService.getById(id);
+        return success(orderDelivery);
     }
 
     /**

+ 24 - 11
yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderGoodsController.java

@@ -22,9 +22,11 @@ import com.yiqi.common.utils.DateUtils;
 import com.yiqi.common.utils.SecurityUtils;
 import com.yiqi.common.utils.bean.BeanUtils;
 import com.yiqi.common.utils.poi.ExcelUtil;
+import com.yiqi.order.domain.OrderGoodsRefund;
 import com.yiqi.order.domain.dto.*;
 import com.yiqi.order.domain.dto.weapp.AppOrderGoodsCancelDTO;
 import com.yiqi.order.domain.vo.*;
+import com.yiqi.order.service.IOrderGoodsRefundService;
 import com.yiqi.recharge.domain.RechargePasswordCard;
 import com.yiqi.recharge.service.IRechargePasswordCardService;
 import com.yiqi.system.domain.SysStore;
@@ -57,6 +59,9 @@ public class OrderGoodsController extends BaseController {
     @Autowired
     private IOrderGoodsService orderGoodsService;
 
+    @Autowired
+    private IOrderGoodsRefundService orderGoodsRefundService;
+
     @Autowired
     private IAppUserService appUserService;
 
@@ -72,16 +77,6 @@ public class OrderGoodsController extends BaseController {
     public TableDataInfo list(GoodsOrderQueryDTO goodsOrderQueryDTO) {
         startPage();
         List<GoodsOrderQueryVO> orderGoodsList = orderGoodsService.selectOrderGoodsList(goodsOrderQueryDTO);
-        List<Long> appUserIdList = orderGoodsList.stream().map(GoodsOrderQueryVO::getAppUserId).collect(Collectors.toList());
-        if (CollUtil.isNotEmpty(appUserIdList)) {
-            List<AppUserInfoVO> userInfoList = appUserService.getAppUserInfoByIds(appUserIdList);
-            Map<Long, AppUserInfoVO> userInfoVOMap = userInfoList.stream().collect(Collectors.toMap(AppUserInfoVO::getAppUserId, AppUserInfoVO -> AppUserInfoVO));
-            for (GoodsOrderQueryVO vo : orderGoodsList) {
-                if (userInfoVOMap.containsKey(vo.getAppUserId())) {
-                    BeanUtils.copyProperties(userInfoVOMap.get(vo.getAppUserId()), vo);
-                }
-            }
-        }
         return getDataTable(orderGoodsList);
     }
 
@@ -93,7 +88,7 @@ public class OrderGoodsController extends BaseController {
     @PostMapping("/export")
     @ApiOperation(value = "导出零售商品订单列表")
     public void export(HttpServletResponse response, GoodsOrderQueryDTO goodsOrderQueryDTO) {
-        goodsOrderQueryDTO.setPageSizeExport(50000);
+        goodsOrderQueryDTO.setPageSizeExport(10000);
         List<GoodsOrderQueryVO> list = orderGoodsService.selectOrderGoodsList(goodsOrderQueryDTO);
         ExcelUtil<GoodsOrderQueryVO> util = new ExcelUtil<GoodsOrderQueryVO>(GoodsOrderQueryVO.class);
         util.exportExcel(response, list, "商品订单数据");
@@ -116,6 +111,24 @@ public class OrderGoodsController extends BaseController {
         return R.ok(goodsOrderInfoVO);
     }
 
+    /**
+     * 获取零售商品订单详细信息
+     */
+    @GetMapping(value = "/refund/{id}")
+    @ApiOperation(value = "获取零售商品订单详细信息")
+    public R<GoodsOrderInfoVO> getRefundInfo(@PathVariable("id") Long id) {
+        GoodsOrderInfoVO goodsOrderInfoVO = new GoodsOrderInfoVO();
+        OrderGoodsRefund orderGoodsRefund = orderGoodsRefundService.getById(id);
+        OrderGoods orderGoods = orderGoodsService.getByOrderNo(orderGoodsRefund.getOrderNo());
+        BeanUtils.copyProperties(orderGoods, goodsOrderInfoVO);
+        goodsOrderInfoVO.setOrderGoodsSkuList(orderGoodsService.selectOrderGoodsById(id));
+        AppUserInfoVO userInfo = appUserService.getAppUserInfoById(orderGoods.getAppUserId());
+        if (userInfo != null) {
+            BeanUtils.copyProperties(userInfo, goodsOrderInfoVO);
+        }
+        return R.ok(goodsOrderInfoVO);
+    }
+
     /**
      * 获取零售商品订单详细信息
      */

+ 47 - 3
yiqi-admin/src/main/java/com/yiqi/admin/controller/recharge/RechargePasswordCardController.java

@@ -149,6 +149,52 @@ public class RechargePasswordCardController extends BaseController {
         util.importTemplateExcel(response, "直充充值卡数据");
     }
 
+    /**
+     * 充值卡导入
+     */
+    @Log(title = "充值卡导入", businessType = BusinessType.IMPORT)
+    @ApiOperation(value = "充值卡导入")
+    @PostMapping("/importData")
+    public R<DirectChargingImportVO> chargingImportData(
+            @RequestParam("file") MultipartFile file,
+            @RequestParam("batchName") String batchName,
+            @RequestParam("expireTime") @DateTimeFormat(pattern = "yyyy-MM-dd") Date expireTime,
+            @RequestParam(value = "remark", required = false) String remark) {
+
+        try {
+            // 1. 校验文件
+            if (file == null || file.isEmpty()) {
+                return R.fail("请选择要导入的文件");
+            }
+
+            // 2. 解析Excel
+            ExcelUtil<RechargePasswordImportDTO> util = new ExcelUtil<>(RechargePasswordImportDTO.class);
+            List<RechargePasswordImportDTO> importList = util.importExcel(file.getInputStream());
+
+            RechargeCardBatchRecord batchRecord = new RechargeCardBatchRecord();
+            batchRecord.setBatchNo(orderNoUtils.getOrderNo());
+            batchRecord.setBatchName(batchName);
+            batchRecord.setLastExpireTime(expireTime);
+            batchRecord.setRemark(remark);
+            batchRecord.setIsDirectRecharge(SysBoolType.NO.getCode());
+            batchRecord.setCreateById(getUserId());
+            batchRecord.setCreateBy(getUsername());
+            batchRecord.setCreateTime(new Date());
+            // 3. 执行导入
+             rechargePasswordCardService.importData(
+                    importList, batchRecord
+            );
+            return R.ok();
+
+        } catch (ServiceException e) {
+            log.error("直充导入失败", e);
+            return R.fail(e.getMessage());
+        } catch (Exception e) {
+            log.error("直充导入异常", e);
+            return R.fail("导入失败,请联系管理员");
+        }
+    }
+
     /**
      * 直充用户导入 (会绑定门店)
      */
@@ -158,9 +204,7 @@ public class RechargePasswordCardController extends BaseController {
     public R<DirectChargingImportVO> directChargingImportData(
             @RequestParam("file") MultipartFile file,
             @RequestParam("batchName") String batchName,
-            @RequestParam("expireTime") @DateTimeFormat(pattern = "yyyy-MM-dd") Date expireTime,
             @RequestParam(value = "remark", required = false) String remark) {
-
         try {
             // 1. 校验文件
             if (file == null || file.isEmpty()) {
@@ -176,7 +220,7 @@ public class RechargePasswordCardController extends BaseController {
                     DirectChargingImportRequest.builder()
                             .importList(importList)
                             .batchName(batchName)
-                            .expireTime(expireTime)
+                            .expireTime(null)
                             .remark(remark)
                             .operatorId(getUserId())
                             .operatorName(getUsername())

+ 1 - 1
yiqi-admin/src/main/java/com/yiqi/web/controller/system/SysDataGroupController.java

@@ -122,9 +122,9 @@ public class SysDataGroupController extends BaseController {
     @GetMapping("/data/list")
     @ApiOperation(value = "查询组合数据结果列表")
     public TableDataInfo dataList(Integer gid, Integer status) {
-        SysDataGroup sysDataGroup = sysDataGroupService.selectSysDataGroupById(gid);
         startPage();
         List<SysDataGroupInfo> list = sysDataGroupInfoService.getDataList(gid, status);
+        SysDataGroup sysDataGroup = sysDataGroupService.selectSysDataGroupById(gid);
         List<DataGroupFiled> dataGroupFileds = JSONUtil.toList(JSONUtil.parseArray(sysDataGroup.getFields()), DataGroupFiled.class);
         Map<String, DataGroupRules> rulesMap = new HashMap<>();
         for (DataGroupFiled dataGroupFiled : dataGroupFileds) {

+ 5 - 5
yiqi-api/src/main/java/com/yiqi/api/controller/WeAppBannerController.java

@@ -32,16 +32,16 @@ public class WeAppBannerController {
 
     @ApiOperation("获取轮播图列表")
     @GetMapping(value = "list")
-    public R<List<AppBanner>> list(@RequestParam @ApiParam("0:轮播,3:金刚位 4:腰线") String bannerType) throws Exception{
-        return R.ok(appBannerService.list(new QueryWrapper<AppBanner>().lambda().eq(AppBanner::getStatus, StatusType.OK.getCode()).eq(AppBanner::getBannerType, bannerType).eq(AppBanner::getStatus,StatusType.OK.getCode())));
+    public R<List<AppBanner>> list(@RequestParam @ApiParam("0:轮播,3:金刚位 4:腰线") String bannerType) throws Exception {
+        return R.ok(appBannerService.selectAppBannerListByType(bannerType));
     }
 
     @ApiOperation("获取广告")
     @GetMapping(value = "getAdver")
-    public R<AppBanner> getAdver(@RequestParam @ApiParam("1:启动页广告,2:首页广告") String bannerType) throws Exception{
+    public R<AppBanner> getAdver(@RequestParam @ApiParam("1:启动页广告,2:首页广告") String bannerType) throws Exception {
         return R.ok(appBannerService.getOne(new QueryWrapper<AppBanner>().lambda()
-                .eq(AppBanner::getStatus,StatusType.OK.getCode())
-                .eq(AppBanner::getBannerType, bannerType),false));
+                .eq(AppBanner::getStatus, StatusType.OK.getCode())
+                .eq(AppBanner::getBannerType, bannerType), false));
     }
 
 }

+ 5 - 0
yiqi-api/src/main/java/com/yiqi/api/controller/WeAppUserController.java

@@ -1,5 +1,6 @@
 package com.yiqi.api.controller;
 
+import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.yiqi.app.domain.AppUserAddress;
@@ -28,6 +29,7 @@ import com.yiqi.common.core.domain.AuthInfoDO;
 import com.yiqi.common.core.domain.R;
 import com.yiqi.common.enums.*;
 import com.yiqi.common.utils.DateUtils;
+import com.yiqi.common.utils.StringUtils;
 import com.yiqi.recharge.domain.RechargePasswordCard;
 import com.yiqi.recharge.service.IRechargePasswordCardService;
 import com.yiqi.system.domain.SysSessionRecord;
@@ -174,6 +176,9 @@ public class WeAppUserController extends BaseController {
         appUser.setPhoneNumber(appUserRegistDTO.getPhone());
         appUser.setRealName(appUserRegistDTO.getRealName());
         appUser.setNickName(appUserRegistDTO.getRealName());
+        if (StringUtils.isEmpty(appUserRegistDTO.getRealName())) {
+            appUser.setNickName("用户" + RandomUtil.randomNumbers(8));
+        }
         appUser.setIsUsePayPassword(SysBoolType.NO.getCode());
         appUser.setLevel(1);
         appUser.setPassword(appUserRegistDTO.getPassword());

+ 419 - 0
yiqi-api/src/main/java/com/yiqi/api/controller/common/CommonController.java

@@ -0,0 +1,419 @@
+package com.yiqi.api.controller.common;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.yiqi.common.annotation.Anonymous;
+import com.yiqi.common.config.RuoYiConfig;
+import com.yiqi.common.constant.Constants;
+import com.yiqi.common.core.domain.AjaxResult;
+import com.yiqi.common.core.domain.R;
+import com.yiqi.common.core.domain.UploadOSSVO;
+import com.yiqi.common.core.domain.vo.ExportTableColumnVO;
+import com.yiqi.common.exception.ServiceException;
+import com.yiqi.common.utils.DateUtils;
+import com.yiqi.common.utils.SmsUtils;
+import com.yiqi.common.utils.StringUtils;
+import com.yiqi.common.utils.file.FileUploadUtils;
+import com.yiqi.common.utils.file.FileUtils;
+import com.yiqi.common.utils.poi.ExcelUtil;
+import com.yiqi.framework.config.ServerConfig;
+import com.yiqi.generator.domain.GenTableColumn;
+import com.yiqi.generator.mapper.GenTableColumnMapper;
+import com.yiqi.oss.cloud.CloudStorageConfig;
+import com.yiqi.oss.cloud.OSSFactory;
+import com.yiqi.system.domain.SysSms;
+import com.yiqi.system.service.ISysSmsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 通用请求处理
+ *
+ * @author ruoyi
+ */
+@Api(tags = "通用接口")
+@RestController
+@RequestMapping("/common")
+public class CommonController {
+    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+    @Autowired
+    private ServerConfig serverConfig;
+    @Autowired
+    private GenTableColumnMapper genTableColumnMapper;
+    @Autowired
+    private ISysSmsService sysSmsService;
+    @Autowired
+    private RuoYiConfig ruoYiConfig;
+    @Autowired
+    private CloudStorageConfig cloudStorageConfig;
+
+    private static final String FILE_DELIMETER = ",";
+
+    @ApiOperation("导出库表结构")
+    @GetMapping("exportTableColumn")
+    public void exportTableColumn(HttpServletResponse response, @RequestParam String tableName) throws Exception {
+        List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
+        List<ExportTableColumnVO> list = new ArrayList<>();
+        for (GenTableColumn dbTableColumn : dbTableColumns) {
+            ExportTableColumnVO exportTableColumnVO = new ExportTableColumnVO();
+            exportTableColumnVO.setColumnName(dbTableColumn.getColumnName());
+            exportTableColumnVO.setColumnType(dbTableColumn.getColumnType());
+            exportTableColumnVO.setIsAutoIncrement(dbTableColumn.getIsIncrement());
+            exportTableColumnVO.setIsKey(dbTableColumn.getIsPk());
+            exportTableColumnVO.setIsRequire(dbTableColumn.getIsRequired());
+            exportTableColumnVO.setRemark(dbTableColumn.getColumnComment());
+            list.add(exportTableColumnVO);
+        }
+        ExcelUtil<ExportTableColumnVO> util = new ExcelUtil<ExportTableColumnVO>(ExportTableColumnVO.class);
+        util.exportExcel(response, list, "用户数据");
+    }
+
+    /**
+     * 通用下载请求
+     *
+     * @param fileName 文件名称
+     * @param delete   是否删除
+     */
+    @GetMapping("/download")
+    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) {
+        try {
+            if (!FileUtils.checkAllowDownload(fileName)) {
+                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
+            }
+            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+            String filePath = RuoYiConfig.getDownloadPath() + fileName;
+
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, realFileName);
+            FileUtils.writeBytes(filePath, response.getOutputStream());
+            if (delete) {
+                FileUtils.deleteFile(filePath);
+            }
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        }
+    }
+
+    /**
+     * 通用上传请求(单个)
+     */
+    @PostMapping("/upload")
+    public AjaxResult uploadFile(MultipartFile file) throws Exception {
+        try {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            // 上传并返回新文件名称
+            String fileName = FileUploadUtils.upload(filePath, file);
+            String url = serverConfig.getUrl() + fileName;
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("url", url);
+            ajax.put("fileName", fileName);
+            ajax.put("newFileName", FileUtils.getName(fileName));
+            ajax.put("originalFilename", file.getOriginalFilename());
+            return ajax;
+        } catch (Exception e) {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 通用上传请求(多个)
+     */
+    @PostMapping("/uploads")
+    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception {
+        try {
+            // 上传文件路径
+            String filePath = RuoYiConfig.getUploadPath();
+            List<String> urls = new ArrayList<String>();
+            List<String> fileNames = new ArrayList<String>();
+            List<String> newFileNames = new ArrayList<String>();
+            List<String> originalFilenames = new ArrayList<String>();
+            for (MultipartFile file : files) {
+                // 上传并返回新文件名称
+                String fileName = FileUploadUtils.upload(filePath, file);
+                String url = serverConfig.getUrl() + fileName;
+                urls.add(url);
+                fileNames.add(fileName);
+                newFileNames.add(FileUtils.getName(fileName));
+                originalFilenames.add(file.getOriginalFilename());
+            }
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+            return ajax;
+        } catch (Exception e) {
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    @Anonymous
+    @ApiOperation("上传文件到腾讯云OSS")
+    @PostMapping(value = "uploadOSS")
+    public R<UploadOSSVO> uploadOSS(HttpServletRequest request) throws Exception {
+        List items = ((MultipartRequest) request).getFiles("file");
+        System.out.println("itemsSize:" + items.size());
+        List<UploadOSSVO> uploadOSSVOS = new ArrayList<>();
+
+        Iterator itr = items.iterator();
+        while (itr.hasNext()) {
+            MultipartFile item = (MultipartFile) itr.next();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            String date = sdf.format(new Date());
+            String key = "image/" + date + "/";
+            if (!"image".equals(item.getContentType().split("/")[0])) {
+                key = "file/" + date + "/";
+            }
+            String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "."
+                    + item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf(".") + 1);
+            //上传文件
+            String suffix = item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf("."));
+            String url = OSSFactory.build(cloudStorageConfig).uploadSuffix(item.getBytes(), suffix);
+            UploadOSSVO uploadOSSVO = new UploadOSSVO(url, fileName);
+            return R.ok(uploadOSSVO);
+        }
+        return R.fail();
+    }
+
+    @Anonymous
+    @ApiOperation("wangEditor上传文件到腾讯云OSS")
+    @PostMapping(value = "uploadWangOSS")
+    public Object uploadWangOSS(HttpServletRequest request) throws Exception {
+        List items = ((MultipartRequest) request).getFiles("file");
+        System.out.println("itemsSize:" + items.size());
+        Map res = new HashMap();
+        List<Map> uploadOSSVOS = new ArrayList<>();
+        Iterator itr = items.iterator();
+        while (itr.hasNext()) {
+            MultipartFile item = (MultipartFile) itr.next();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            String date = sdf.format(new Date());
+            String key = "image/" + date + "/";
+            if (!"image".equals(item.getContentType().split("/")[0])) {
+                key = "file/" + date + "/";
+            }
+            String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "."
+                    + item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf(".") + 1);
+            //上传文件
+            String suffix = item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf("."));
+            String url = OSSFactory.build(cloudStorageConfig).uploadSuffix(item.getBytes(), suffix);
+            Map<String, String> map = new HashMap<>();
+            map.put("url", url);
+            map.put("alt", fileName);
+            map.put("href", "");
+            uploadOSSVOS.add(map);
+        }
+        res.put("errno", 0);
+        res.put("data", uploadOSSVOS);
+        return res;
+    }
+
+
+    @Anonymous
+    @ApiOperation("wangEditor上传视频文件到腾讯云OSS")
+    @PostMapping(value = "uploadWangVideoOSS")
+    public Object uploadWangVideoOSS(HttpServletRequest request) throws Exception {
+        List items = ((MultipartRequest) request).getFiles("video");
+        System.out.println("videoSize:" + items.size());
+        Map res = new HashMap();
+        Map<String, String> map = new HashMap<>();
+        Iterator itr = items.iterator();
+        while (itr.hasNext()) {
+            MultipartFile item = (MultipartFile) itr.next();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            String date = sdf.format(new Date());
+            String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "."
+                    + item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf(".") + 1);
+            //上传文件
+            String suffix = item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf("."));
+            String url = OSSFactory.build(cloudStorageConfig).uploadSuffix(item.getBytes(), suffix);
+            map.put("url", url);
+        }
+        res.put("errno", 0);
+        res.put("data", map);
+        return res;
+    }
+
+//    @Anonymous
+//    @ApiOperation("上传文件到腾讯云OSS")
+//    @PostMapping(value = "uploadOSS")
+//    public R<UploadOSSVO> uploadOSS(HttpServletRequest request) throws Exception{
+//        List items = ((MultipartRequest)request).getFiles("file");
+//        System.out.println("itemsSize:" + items.size());
+//        Iterator itr = items.iterator();
+//        while (itr.hasNext()) {
+//            MultipartFile item = (MultipartFile) itr.next();
+//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+//            String date = sdf.format(new Date());
+//            String key = "image/" + date + "/";
+//            if (!"image".equals(item.getContentType().split("/")[0])) {
+//                key = "file/" + date + "/";
+//            }
+//            String fileName = java.util.UUID.randomUUID().toString().replaceAll("-", "") + "."
+//                    + item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf(".") + 1);
+//            String oldFileName = fileName;
+//            ObjectMetadata objectMetadata = new ObjectMetadata();
+//            // 上传的流如果能够获取准确的流长度,则推荐一定填写 content-length
+//            // 如果确实没办法获取到,则下面这行可以省略,但同时高级接口也没办法使用分块上传了
+//            objectMetadata.setContentLength(item.getSize());
+//            objectMetadata.setHeader("expires", new Date(System.currentTimeMillis() + 30000L));
+//            PutObjectRequest putObjectRequest = new PutObjectRequest(ruoYiConfig.getCosBucket(), key + fileName, item.getInputStream(), objectMetadata);
+//            // 添加图片处理规则
+//            if ("image".equals(item.getContentType().split("/")[0])) {
+//                List<PicOperations.Rule> ruleList = new LinkedList<>();
+//                PicOperations picOperations = new PicOperations();
+//                picOperations.setIsPicInfo(1);
+//                PicOperations.Rule rule = new PicOperations.Rule();
+//                rule.setBucket(ruoYiConfig.getCosBucket());
+//                fileName = UUID.randomUUID().toString().replaceAll("-", "") + "."
+//                        + item.getOriginalFilename().substring(item.getOriginalFilename().lastIndexOf(".") + 1);
+//                rule.setFileId("thumb/" + fileName);
+//                rule.setRule("imageMogr2/thumbnail/800x800");
+//                ruleList.add(rule);
+//                picOperations.setRules(ruleList);
+//                putObjectRequest.setPicOperations(picOperations);
+//            }
+//            // 1 初始化用户身份信息(secretId, secretKey)。
+//            // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
+//            String secretId = ruoYiConfig.getCosSecretId();
+//            String secretKey = ruoYiConfig.getCosSecretKey();
+//            COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+//            // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
+//            // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
+//            Region region = new Region("ap-shanghai");
+//            ClientConfig clientConfig = new ClientConfig(region);
+//            // 这里建议设置使用 https 协议
+//            // 从 5.6.54 版本开始,默认使用了 https
+//            clientConfig.setHttpProtocol(HttpProtocol.https);
+//            // 3 生成 cos 客户端。
+//            COSClient cosClient = new COSClient(cred, clientConfig);
+//            PutObjectResult result = cosClient.putObject(putObjectRequest);
+//            UploadOSSVO uploadOSSVO = new UploadOSSVO(ruoYiConfig.getCosBaseUrl() + key + "thumb/" + fileName,fileName);
+//            return R.ok(uploadOSSVO);
+//        }
+//        return R.fail();
+//    }
+
+
+    @Anonymous
+    @ApiOperation("base64格式上传文件到腾讯云OSS")
+    @PostMapping(value = "uploadBase64OSS")
+    public R<UploadOSSVO> uploadBase64OSS(@RequestParam @ApiParam("base64文件") String base64Data) throws Exception {
+        String suffix = base64Data.split(";base64,")[0].split("/")[1];
+        if ("vnd.openxmlformats-officedocument.wordprocessingml.document".equals(suffix)) {
+            suffix = "docx";
+        }
+        if ("msword".equals(suffix)) {
+            suffix = "doc";
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        String date = sdf.format(new Date());
+        String key = "image/" + date + "/";
+        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "."
+                + suffix;
+//        ObjectMetadata objectMetadata = new ObjectMetadata();
+//        // 上传的流如果能够获取准确的流长度,则推荐一定填写 content-length
+//        // 如果确实没办法获取到,则下面这行可以省略,但同时高级接口也没办法使用分块上传了
+////        objectMetadata.setContentLength(item.getSize());
+//        objectMetadata.setHeader("expires", new Date(System.currentTimeMillis() + 30000L));
+//        Base64.Decoder decoder = Base64.getDecoder();
+//        byte[] imageByte = decoder.decode(base64Data.split(",")[1]);
+//        InputStream stream = new ByteArrayInputStream(imageByte);
+//        PutObjectRequest putObjectRequest = new PutObjectRequest(ruoYiConfig.getCosBucket(), key + fileName, stream, objectMetadata);
+//        // 添加图片处理规则
+//        List<PicOperations.Rule> ruleList = new LinkedList<>();
+//        PicOperations picOperations = new PicOperations();
+//        picOperations.setIsPicInfo(1);
+//        PicOperations.Rule rule = new PicOperations.Rule();
+//        rule.setBucket(ruoYiConfig.getCosBucket());
+//        fileName = UUID.randomUUID().toString().replaceAll("-", "") + "."
+//                + suffix;
+//        rule.setFileId("thumb/" + fileName);
+//        rule.setRule("imageMogr2/thumbnail/800x800");
+//        ruleList.add(rule);
+//        picOperations.setRules(ruleList);
+//        putObjectRequest.setPicOperations(picOperations);
+//        // 1 初始化用户身份信息(secretId, secretKey)。
+//        // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
+//        String secretId = ruoYiConfig.getCosSecretId();
+//        String secretKey = ruoYiConfig.getCosSecretKey();
+//        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+//        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
+//        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
+//        Region region = new Region("ap-shanghai");
+//        ClientConfig clientConfig = new ClientConfig(region);
+//        // 这里建议设置使用 https 协议
+//        // 从 5.6.54 版本开始,默认使用了 https
+//        clientConfig.setHttpProtocol(HttpProtocol.https);
+//        // 3 生成 cos 客户端。
+//        COSClient cosClient = new COSClient(cred, clientConfig);
+//        PutObjectResult result = cosClient.putObject(putObjectRequest);
+        UploadOSSVO uploadOSSVO = new UploadOSSVO(ruoYiConfig.getCosBaseUrl() + key + "thumb/" + fileName, fileName);
+        return R.ok(uploadOSSVO);
+    }
+
+    /**
+     * 本地资源通用下载
+     */
+    @GetMapping("/download/resource")
+    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
+            throws Exception {
+        try {
+            if (!FileUtils.checkAllowDownload(resource)) {
+                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
+            }
+            // 本地资源路径
+            String localPath = RuoYiConfig.getProfile();
+            // 数据库资源地址
+            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
+            // 下载名称
+            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            FileUtils.setAttachmentResponseHeader(response, downloadName);
+            FileUtils.writeBytes(downloadPath, response.getOutputStream());
+        } catch (Exception e) {
+            log.error("下载文件失败", e);
+        }
+    }
+
+    @ApiOperation("发送验证码")
+    @GetMapping(value = "sendSms")
+    public R sendSms(@RequestParam @ApiParam("手机号") String phone, @RequestParam @ApiParam("短信类型,0:注册,1:忘记密码,2修改支付密码") String smsType) throws Exception {
+        if (sysSmsService.count(new QueryWrapper<SysSms>().lambda().eq(SysSms::getPhone, phone)
+                .ge(SysSms::getCreateTime, DateUtils.parseDate(DateUtils.dateTimeNow("yyyy-MM-dd"), "yyyy-MM-dd"))) > 10) {
+            throw new ServiceException("今日短信数量已达上限");
+        }
+
+        if (sysSmsService.count(new QueryWrapper<SysSms>().lambda()
+                .eq(SysSms::getPhone, phone)
+                .eq(SysSms::getSmsType, smsType)
+                .gt(SysSms::getCreateTime, new Date(System.currentTimeMillis() - 1000 * 60 * 5))) > 3) {
+            throw new ServiceException("您的短信发送过于频繁,请稍后再操作");
+        }
+
+        SysSms sysSms = new SysSms();
+        sysSms.setPhone(phone);
+        sysSms.setCode((Math.random() + "").substring(2, 8));
+        sysSms.setSmsType(smsType);
+        sysSms.setCreateTime(DateUtils.getNowDate());
+
+        SmsUtils.sendSms(sysSms.getPhone(), "1125637", new String[]{sysSms.getCode(), "5"});
+        sysSmsService.save(sysSms);
+        return R.ok();
+    }
+}

+ 2 - 2
yiqi-api/src/main/java/com/yiqi/api/controller/common/WeAppGoodsCommentController.java

@@ -41,14 +41,14 @@ public class WeAppGoodsCommentController {
 
     @ApiOperation("分页获取商品评论列表")
     @PostMapping(value = "findPage")
-    public R<WeAppGoodsCommentQueryVO> findPage(@RequestBody @Valid WeAppGoodsCommentQueryDTO weAppGoodsCommentQueryDTO){
+    public R<WeAppGoodsCommentQueryVO> findPage(@RequestBody @Valid WeAppGoodsCommentQueryDTO weAppGoodsCommentQueryDTO) {
         return R.ok(goodsCommentService.findPage(weAppGoodsCommentQueryDTO));
     }
 
     @Transactional(rollbackFor = Exception.class)
     @ApiOperation("app新增商品评论")
     @PostMapping(value = "/addGoodsCommentByApp")
-    public R<Integer> addGoodsCommentByApp(@RequestBody @Valid WeAppGoodsCommentAddDTO weAppGoodsCommentAddDTO){
+    public R<Integer> addGoodsCommentByApp(@RequestBody @Valid WeAppGoodsCommentAddDTO weAppGoodsCommentAddDTO) {
         GoodsComment goodsComment = new GoodsComment();
         BeanUtils.copyProperties(weAppGoodsCommentAddDTO, goodsComment);
         goodsComment.setCommentSrcType(OrderSourceType.APP.getCode());

+ 1 - 0
yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderClothController.java

@@ -219,6 +219,7 @@ public class WeAppOrderClothController {
         orderDelivery.setDeliveryStatus(OrderDeliveryStatusEnum.WAIT_DELIVERY.getCode());
         orderDelivery.setDeliveryWay(ClothOrderDeliveryWay.delivery.getCode());
         orderDelivery.setStoreId(orderClothAppointmentDTO.getOrgId());
+        orderDelivery.buildCreateData();
         orderDeliveryService.save(orderDelivery);
         return R.ok();
     }

+ 1 - 2
yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderGoodsController.java

@@ -83,8 +83,7 @@ public class WeAppOrderGoodsController extends BaseController {
         }
         return R.ok(appGoodsOrderInfoVO);
     }
-    //</editor-folder>
-    //<editor-folder desc="普通商品下单">
+
     /**
      * 新增零售 普通商品订单-购物车
      */

+ 2 - 1
yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderRechargeController.java

@@ -132,7 +132,8 @@ public class WeAppOrderRechargeController {
         List<OrderRecharge> orderRecharges = orderRechargeService.page(new Page<>(pageVO.getPageNum(), pageVO.getPageSize(), false)
                 , new QueryWrapper<OrderRecharge>().lambda()
                         .eq(OrderRecharge::getAppUserId, AuthHolder.userId())
-                        .eq(OrderRecharge::getOrderStatus, OrderRechargeStatus.YES_PAY.getCode())).getRecords();
+                        .eq(OrderRecharge::getOrderStatus, OrderRechargeStatus.YES_PAY.getCode())
+                        .orderByDesc(OrderRecharge::getCreateTime)).getRecords();
         if (orderRecharges.size() == 0) {
             return R.ok(new ArrayList<>());
         }

+ 3 - 2
yiqi-api/src/main/java/com/yiqi/api/controller/system/WeAppStoreController.java

@@ -10,6 +10,7 @@ import com.yiqi.system.domain.SysStore;
 import com.yiqi.system.domain.dto.weapp.WeAppOrgInfoQueryDTO;
 import com.yiqi.system.domain.dto.weapp.WeAppOrgQueryDTO;
 import com.yiqi.system.domain.vo.OrgVO;
+import com.yiqi.system.domain.vo.SysStoreVo;
 import com.yiqi.system.service.ISysOrgService;
 import com.yiqi.system.service.ISysStoreService;
 import io.swagger.annotations.Api;
@@ -36,8 +37,8 @@ public class WeAppStoreController {
 
     @ApiOperation("获取门店列表")
     @PostMapping(value = "list")
-    public R<List<OrgVO>> list(@RequestBody WeAppOrgQueryDTO weAppOrgQueryDTO) throws Exception{
-        return R.ok(sysOrgService.findPageOrderByDistance(weAppOrgQueryDTO));
+    public R<List<SysStoreVo>> list(@RequestBody WeAppOrgQueryDTO weAppOrgQueryDTO) throws Exception{
+        return R.ok(sysStoreService.findStoreByDistance(weAppOrgQueryDTO));
     }
 
     @ApiOperation("获取门店详情")

+ 5 - 0
yiqi-common/src/main/java/com/yiqi/app/domain/AppBanner.java

@@ -53,6 +53,11 @@ public class AppBanner extends BaseEntity
     @ApiModelProperty("跳转标题")
     private String redirectTitle;
 
+    /**
+     * 排序 从大到小
+     */
+    private Integer sort;
+
     /** 跳转内容 */
     @Excel(name = "跳转内容")
     @ApiModelProperty("跳转内容")

+ 8 - 0
yiqi-common/src/main/java/com/yiqi/app/service/IAppBannerService.java

@@ -28,6 +28,14 @@ public interface IAppBannerService extends IService<AppBanner> {
      */
     public List<AppBanner> selectAppBannerList(AppBanner appBanner);
 
+    /**
+     * 查询轮播图及启动页广告配置列表
+     *
+     * @param bannerType 轮播图及启动页广告配置
+     * @return 轮播图及启动页广告配置集合
+     */
+    public List<AppBanner> selectAppBannerListByType(String bannerType);
+
     /**
      * 新增轮播图及启动页广告配置
      *

+ 3 - 3
yiqi-common/src/main/java/com/yiqi/common/enums/OrderGoodsStatusType.java

@@ -12,9 +12,9 @@ public enum OrderGoodsStatusType {
     , CONFIRM_PAY("1","支付待确认")
     , NO_SEND("2","待配送")
     , SENDING("3", "配送中")
-
-    , CONFIRM_RECEIVE("5", "已完成")
-    , REFUND("6", "已退款")
+    , CONFIRM_RECEIVE("5", "确认收货")
+    , HAS_COMMENT("6", "已评价")
+    , REFUND("-2", "已退款")
     , CANCEL_ORDER("-1", "已取消")
 ;
 

+ 2 - 2
yiqi-common/src/main/java/com/yiqi/common/enums/PayType.java

@@ -14,8 +14,8 @@ public enum PayType implements CodeEnum
     UNIONPAY("4", "银联支付"),
     RECHARGE_CARD("5", "储值卡"),
     //组合支付
-    COMBINE("9", "组合支付"),
-    NOPAY("-1", "未付款"),
+    COMBINE("8", "组合支付"),
+    WAITPAY("9", "等待付款"),
     ;
 
     private final String code;

+ 0 - 7
yiqi-common/src/main/java/com/yiqi/core/service/IGoodsCommentService.java

@@ -52,10 +52,6 @@ public interface IGoodsCommentService extends IService<GoodsComment> {
      */
     public int insertGoodsComment(GoodsComment goodsComment,  Long goodsId,  Long goodsSkuId);
 
-    //</editor-folder>
-
-    //<editor-folder desc="app接口">
-
     /**
      * 通过商品ID,查询评论
      * @param weAppGoodsCommentQueryDTO
@@ -63,7 +59,4 @@ public interface IGoodsCommentService extends IService<GoodsComment> {
      */
     public WeAppGoodsCommentQueryVO findPage(WeAppGoodsCommentQueryDTO weAppGoodsCommentQueryDTO);
 
-    //</editor-folder>
-    //<editor-folder desc="pc接口">
-
 }

+ 7 - 8
yiqi-common/src/main/java/com/yiqi/order/domain/OrderDelivery.java

@@ -92,7 +92,6 @@ public class OrderDelivery extends BaseEntity {
      */
     @Excel(name = "配送员")
     @ApiModelProperty("配送员")
-
     private Long deliveryManId;
 
     /**
@@ -183,31 +182,31 @@ public class OrderDelivery extends BaseEntity {
     /**
      * 配送员接单时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "配送员接单时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "配送员接单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty("配送员接单时间")
     private Date acceptTime;
 
     /**
      * 配送员取货时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "配送员取货时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "配送员取货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty("配送员取货时间")
     private Date fetchTime;
 
     /**
      * 配送员完成时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "配送员完成时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "配送员完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty("配送员完成时间")
     private Date finishTime;
 
     /**
      * 取消时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd")
     @ApiModelProperty("取消时间")
     private Date cancelTime;

+ 7 - 0
yiqi-common/src/main/java/com/yiqi/order/domain/OrderGoodsRefund.java

@@ -55,6 +55,13 @@ public class OrderGoodsRefund extends BaseEntity {
     @ApiModelProperty("门店ID")
     private Long orgId;
 
+    /**
+     * 商品类别
+     */
+    @Excel(name = "商品类别")
+    @ApiModelProperty("商品类别")
+    private String goodsType;
+
     /**
      * 来源类型
      */

+ 6 - 0
yiqi-common/src/main/java/com/yiqi/order/domain/dto/OrderClothQueryDTO.java

@@ -26,6 +26,12 @@ public class OrderClothQueryDTO extends PageVO {
     @ApiModelProperty("订单来源")
     private String orderSource;
 
+    @ApiModelProperty("支付方式")
+    private String payType;
+
+    @ApiModelProperty("支付状态")
+    private String payStatus;
+
     @ApiModelProperty("订单条码")
     private String orderNo;
 

+ 7 - 0
yiqi-common/src/main/java/com/yiqi/order/domain/vo/GoodsOrderRefundQueryVO.java

@@ -80,6 +80,13 @@ public class GoodsOrderRefundQueryVO {
     @ApiModelProperty("订单总价")
     private BigDecimal totalPrice;
 
+    /**
+     * 订单总价
+     */
+    @Excel(name = "订单总价")
+    @ApiModelProperty("订单总价")
+    private BigDecimal orderAmount;
+
     /**
      * 抵扣金额
      */

+ 30 - 8
yiqi-common/src/main/java/com/yiqi/order/domain/vo/OrderDeliveryVO.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.yiqi.common.annotation.Excel;
 import com.yiqi.order.domain.StoreAddressVO;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -22,9 +23,23 @@ public class OrderDeliveryVO implements Serializable {
     private Long id;
 
     private Long storeId;
+
     @Excel(name = "所属门店")
     private String storeName;
 
+    /**
+     * 配送方式 {@link com.yiqi.common.enums.ClothOrderDeliveryWay}
+     */
+    @Excel(name = "配送方式")
+    @ApiModelProperty("配送方式 ")
+    private String deliveryWay;
+
+    /**
+     * 自配送配送员
+     */
+    @ApiModelProperty("配送员")
+    private Long deliveryManId;
+
     /**
      * 配送单号
      */
@@ -128,32 +143,39 @@ public class OrderDeliveryVO implements Serializable {
     @Excel(name = "状态描述")
     private String deliveryStatusMsg;
 
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
     /**
      * 配送员接单时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "配送员接单时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "配送员接单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date acceptTime;
 
     /**
      * 配送员取货时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "配送员取货时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "配送员取货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date fetchTime;
 
     /**
      * 配送员完成时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "配送员完成时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "配送员完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date finishTime;
 
     /**
      * 取消时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Excel(name = "取消时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date cancelTime;
 
     /**

+ 3 - 0
yiqi-common/src/main/java/com/yiqi/order/domain/vo/weapp/AppGoodsOrderInfoVO.java

@@ -130,6 +130,9 @@ public class AppGoodsOrderInfoVO {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date createTime;
 
+    @ApiModelProperty("退款原因")
+    private String refundReason;
+
     @ApiModelProperty("商品明细")
     private List<OrderRetailGoodsSkuVO> orderGoodsSkuList;
 }

+ 3 - 1
yiqi-common/src/main/java/com/yiqi/order/service/IOrderGoodsService.java

@@ -20,7 +20,9 @@ import com.yiqi.order.domain.vo.weapp.AppGoodsOrderInfoQueryVO;
  */
 public interface IOrderGoodsService extends IService<OrderGoods> {
 
-    //<editor-folder desc="基础函数">
+
+    OrderGoods getByOrderNo(String  orderNo);
+
     /**
      * 查询零售商品订单
      *

+ 6 - 0
yiqi-common/src/main/java/com/yiqi/system/domain/vo/SysStoreVo.java

@@ -179,4 +179,10 @@ public class SysStoreVo {
     /** 工厂名称 */
     @ApiModelProperty("工厂名称")
     private String factoryName;
+
+    /**
+     * 距离
+     */
+    @ApiModelProperty("距离")
+    private Integer distance;
 }

+ 9 - 0
yiqi-common/src/main/java/com/yiqi/system/service/ISysStoreService.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yiqi.system.domain.SysStore;
+import com.yiqi.system.domain.dto.weapp.WeAppOrgQueryDTO;
 import com.yiqi.system.domain.vo.OrgVO;
 import com.yiqi.system.domain.vo.SysStoreVo;
 
@@ -44,6 +45,13 @@ public interface ISysStoreService extends IService<SysStore> {
      */
     public List<SysStoreVo> selectSysStoreList(SysStore sysStore);
 
+    /**
+     * 查询门店列表
+     * @param weAppOrgQueryDTO
+     * @return
+     */
+    List<SysStoreVo> findStoreByDistance(WeAppOrgQueryDTO weAppOrgQueryDTO);
+
     /**
      * 新增门店
      *
@@ -83,4 +91,5 @@ public interface ISysStoreService extends IService<SysStore> {
      * @return 结果
      */
     public int updateStoreStatus(SysStore sysStore);
+
 }

+ 10 - 1
yiqi-core/src/main/java/com/yiqi/app/service/impl/AppBannerServiceImpl.java

@@ -2,7 +2,9 @@ package com.yiqi.app.service.impl;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yiqi.common.enums.StatusType;
 import com.yiqi.common.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -17,7 +19,7 @@ import com.yiqi.app.service.IAppBannerService;
  * @date 2023-08-08
  */
 @Service
-public class AppBannerServiceImpl extends ServiceImpl<AppBannerMapper,AppBanner> implements IAppBannerService {
+public class AppBannerServiceImpl extends ServiceImpl<AppBannerMapper, AppBanner> implements IAppBannerService {
 
     /**
      * 查询轮播图及启动页广告配置
@@ -41,6 +43,13 @@ public class AppBannerServiceImpl extends ServiceImpl<AppBannerMapper,AppBanner>
         return baseMapper.selectAppBannerList(appBanner);
     }
 
+    @Override
+    public List<AppBanner> selectAppBannerListByType(String bannerType) {
+        return list(new QueryWrapper<AppBanner>().lambda().eq(AppBanner::getStatus, StatusType.OK.getCode()).eq(AppBanner::getBannerType, bannerType).eq(AppBanner::getStatus, StatusType.OK.getCode())
+                .orderByDesc(AppBanner::getSort));
+    }
+
+
     /**
      * 新增轮播图及启动页广告配置
      *

+ 1 - 1
yiqi-core/src/main/java/com/yiqi/app/service/impl/AppUserServiceImpl.java

@@ -80,7 +80,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
             isRegist = true;
             user = new AppUser();
             user.setPhoneNumber(phoneNoInfo.getPurePhoneNumber());
-            user.setRealName("user-" + RandomUtil.randomNumbers(8));
+            user.setNickName("用户-" + RandomUtil.randomNumbers(8));
             user.setStatus(UserStatus.OK.getCode());
             user.setSex("0");
             user.setLevel(1);

+ 50 - 26
yiqi-core/src/main/java/com/yiqi/core/service/impl/GoodsCommentServiceImpl.java

@@ -8,6 +8,8 @@ import java.util.stream.Collectors;
 
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.yiqi.common.enums.OrderGoodsStatusType;
 import com.yiqi.common.exception.ServiceException;
 import com.yiqi.app.domain.AppUser;
 import com.yiqi.app.service.IAppUserService;
@@ -23,7 +25,9 @@ import com.yiqi.core.domain.vo.GoodsSkuInfoByCommentVO;
 import com.yiqi.core.domain.vo.weapp.WeAppGoodsCommentQueryVO;
 import com.yiqi.core.domain.vo.weapp.WeAppGoodsCommentVO;
 import com.yiqi.core.service.*;
+import com.yiqi.order.domain.OrderGoods;
 import com.yiqi.order.domain.OrderGoodsSku;
+import com.yiqi.order.service.IOrderGoodsService;
 import com.yiqi.order.service.IOrderGoodsSkuService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +42,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @date 2023-12-19
  */
 @Service
-public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,GoodsComment> implements IGoodsCommentService {
+public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper, GoodsComment> implements IGoodsCommentService {
 
     @Autowired
     private IOrderGoodsSkuService orderGoodsSkuService;
@@ -55,7 +59,9 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
     @Autowired
     private IGoodsSkuSpecService goodsSkuSpecService;
 
-    //<editor-folder desc="基础韩素">
+    @Autowired
+    private IOrderGoodsService orderGoodsService;
+
     /**
      * 查询商品评论
      *
@@ -91,24 +97,32 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
      */
     @Override
     public int insertGoodsComment(GoodsComment goodsComment, Long goodsId, Long goodsSkuId) {
-        this.save(goodsComment);
+
         // app评论
-        if (SysBoolType.NO.getCode().equals(goodsComment.getIsVirtual())){
+        if (SysBoolType.NO.getCode().equals(goodsComment.getIsVirtual())) {
             List<OrderGoodsSku> list = orderGoodsSkuService.list(new QueryWrapper<OrderGoodsSku>().lambda()
                     .eq(OrderGoodsSku::getOrderId, goodsComment.getOrderId()));
-            if (CollUtil.isEmpty(list)){
-                throw new ServiceException("未查询到该订单的商品物料信息, orderId : {} " +  goodsComment.getOrderId());
+            if (CollUtil.isEmpty(list)) {
+                throw new ServiceException("未查询到该订单的商品物料信息, orderId : {} " + goodsComment.getOrderId());
             }
             Set<Long> keySetGoodsId = list.stream().collect(Collectors.groupingBy(OrderGoodsSku::getGoodsId)).keySet();
-            Map<Long, String> goodsInfoMap = goodsInfoService.list(new QueryWrapper<GoodsInfo>().lambda().in(GoodsInfo::getId, keySetGoodsId))
-                    .stream().collect(Collectors.toMap(GoodsInfo::getId, GoodsInfo::getGoodsName));
+            List<GoodsInfo> goodsInfoList = goodsInfoService.list(new QueryWrapper<GoodsInfo>().lambda().in(GoodsInfo::getId, keySetGoodsId));
+            Map<Long, String> goodsInfoMap = goodsInfoList.stream().collect(Collectors.toMap(GoodsInfo::getId, GoodsInfo::getGoodsName));
+            GoodsInfo goodsInfo = goodsInfoList.get(0);
+            if(goodsInfoList.size()==1){
+                goodsComment.setGoodsType(goodsInfo.getGoodsType());
+                goodsComment.setGoodsId(goodsInfo.getId());
+            }else{
+                goodsComment.setGoodsType(goodsInfo.getGoodsType());
+            }
+            this.save(goodsComment);
             List<GoodsCommentRelation> relationList = new ArrayList<>();
-            list.forEach(sku ->{
+            list.forEach(sku -> {
                 GoodsCommentRelation goodsCommentRelation = new GoodsCommentRelation();
                 goodsCommentRelation.setGoodsCommentId(goodsComment.getId());
                 goodsCommentRelation.setGoodsSkuId(sku.getSkuId());
                 goodsCommentRelation.setSkuName(sku.getSkuName());
-                goodsCommentRelation.setGoodsName(goodsInfoMap.get(sku.getGoodsId()) == null?goodsInfoMap.get(sku.getGoodsId()):"");
+                goodsCommentRelation.setGoodsName(goodsInfoMap.get(sku.getGoodsId()) == null ? "" : goodsInfoMap.get(sku.getGoodsId()));
                 goodsCommentRelation.setOrderId(sku.getOrderId());
                 goodsCommentRelation.setGoodsId(sku.getGoodsId());
                 goodsCommentRelation.setBuyNum(sku.getBuyNum());
@@ -116,13 +130,23 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
                 relationList.add(goodsCommentRelation);
             });
             goodsCommentRelationService.saveBatch(relationList);
+            if (goodsComment.getOrderId() != null) {
+                OrderGoods updateEntity = new OrderGoods();
+                updateEntity.setOrderStatus(OrderGoodsStatusType.HAS_COMMENT.getCode());
+// 使用 LambdaUpdateWrapper 构建更新条件
+                LambdaUpdateWrapper<OrderGoods> updateWrapper = new LambdaUpdateWrapper<OrderGoods>()
+                        .eq(OrderGoods::getId, goodsComment.getOrderId());
+// 执行更新操作
+                orderGoodsService.update(updateEntity, updateWrapper);
+            }
         }
         // 总部虚拟评论
-        if (SysBoolType.YES.getCode().equals(goodsComment.getIsVirtual())){
+        if (SysBoolType.YES.getCode().equals(goodsComment.getIsVirtual())) {
+            this.save(goodsComment);
             GoodsCommentRelation goodsCommentRelation = new GoodsCommentRelation();
             // 按选择的商品id 查商品信息
-            GoodsInfo goodsInfo = goodsInfoService.getOne(new QueryWrapper<GoodsInfo>().lambda().eq(GoodsInfo::getId, goodsId),  Boolean.FALSE);
-            if (goodsInfo == null){
+            GoodsInfo goodsInfo = goodsInfoService.getOne(new QueryWrapper<GoodsInfo>().lambda().eq(GoodsInfo::getId, goodsId), Boolean.FALSE);
+            if (goodsInfo == null) {
                 throw new ServiceException("商品信息不存在");
             }
             // 按选择的商品物料id 查商品物料信息
@@ -130,11 +154,11 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
                     .eq(GoodsSkuSpec::getGoodsSkuId, goodsSkuId)
                     .eq(GoodsSkuSpec::getDelFlag, DeleteStatus.OK.getCode()));
             // 设置物料名称
-            if (skuSpecList.size()>0){
+            if (skuSpecList.size() > 0) {
                 String name = "";
                 for (GoodsSkuSpec goodsSkuSpec : skuSpecList) {
-                    name = name.equals("") ? name+goodsSkuSpec.getSpecName()+":"+goodsSkuSpec.getSpecValue() :
-                            name+"|"+goodsSkuSpec.getSpecName()+":"+goodsSkuSpec.getSpecValue();
+                    name = name.equals("") ? name + goodsSkuSpec.getSpecName() + ":" + goodsSkuSpec.getSpecValue() :
+                            name + "|" + goodsSkuSpec.getSpecName() + ":" + goodsSkuSpec.getSpecValue();
                 }
                 goodsCommentRelation.setSkuName(name);
             }
@@ -149,19 +173,15 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
         }
         return 1;
     }
-    //</editor-folder>
-    //<editor-folder desc="app接口">
-
 
     @Override
     public WeAppGoodsCommentQueryVO findPage(WeAppGoodsCommentQueryDTO weAppGoodsCommentQueryDTO) {
         WeAppGoodsCommentQueryVO weAppGoodsCommentQueryVO = new WeAppGoodsCommentQueryVO();
-
         List<GoodsCommentRelation> relationList = goodsCommentRelationService.list(new QueryWrapper<GoodsCommentRelation>().lambda()
                 .eq(GoodsCommentRelation::getGoodsId, weAppGoodsCommentQueryDTO.getGoodsId())
                 .orderByDesc(GoodsCommentRelation::getCreateTime)
                 .last("limit " + weAppGoodsCommentQueryDTO.getStartRow() + "," + weAppGoodsCommentQueryDTO.getPageSize()));
-        if (CollUtil.isEmpty(relationList)){
+        if (CollUtil.isEmpty(relationList)) {
             weAppGoodsCommentQueryVO.setWeAppGoodsCommentVOS(new ArrayList<>());
             return weAppGoodsCommentQueryVO;
         }
@@ -176,11 +196,16 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
 
         // 按客户id分组
         Map<Long, List<GoodsComment>> commentMap = goodsComments.stream().collect(Collectors.groupingBy(GoodsComment::getUserId));
+        if(CollUtil.isEmpty(commentMap)){
+            weAppGoodsCommentQueryVO.setWeAppGoodsCommentVOS(new ArrayList<>());
+            return weAppGoodsCommentQueryVO;
+        }
         // 通过客户id,获取客户信息
-        Map<Long, String> userMap = appUserService.list(new QueryWrapper<AppUser>().lambda()
+        List<AppUser> appUserList = appUserService.list(new QueryWrapper<AppUser>().lambda()
                 .in(AppUser::getId, commentMap.keySet())
-                .eq(AppUser::getStatus, StatusType.OK.getCode())).stream().collect(Collectors.toMap(AppUser::getId, AppUser::getNickName));
+                .eq(AppUser::getStatus, StatusType.OK.getCode()));
 
+        Map<Long, String> userMap = appUserList.stream().collect(Collectors.toMap(AppUser::getId, AppUser::getNickName));
 
         List<WeAppGoodsCommentVO> appGoodsCommentVOS = new ArrayList<>();
         for (GoodsComment goodsComment : goodsComments) {
@@ -193,11 +218,10 @@ public class GoodsCommentServiceImpl extends ServiceImpl<GoodsCommentMapper,Good
         }
         weAppGoodsCommentQueryVO.setWeAppGoodsCommentVOS(appGoodsCommentVOS);
         GoodsInfo goodsInfo = goodsInfoService.getOne(new QueryWrapper<GoodsInfo>().lambda()
-                    .eq(GoodsInfo::getId, weAppGoodsCommentQueryDTO.getGoodsId()));
-        if (goodsInfo != null){
+                .eq(GoodsInfo::getId, weAppGoodsCommentQueryDTO.getGoodsId()));
+        if (goodsInfo != null) {
             weAppGoodsCommentQueryVO.setGoodComment(goodsInfo.getGoodComment());
         }
         return weAppGoodsCommentQueryVO;
     }
-    //</editor-folder>
 }

+ 1 - 1
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderClothServiceImpl.java

@@ -353,7 +353,7 @@ public class OrderClothServiceImpl extends ServiceImpl<OrderClothMapper, OrderCl
         buildClothSpeedIntoOrder(orderCloth);
         //配置组织信息
         buildOrgIntoOrder(orderCloth);
-        orderCloth.setPayType(PayType.NOPAY.getCode());
+        orderCloth.setPayType(PayType.WAITPAY.getCode());
         saveOrUpdate(orderCloth);
 
         List<OrderClothItem> orderClothItems = buildOrderClothItemData(orderClothDTO.getOrderClothItemDTOS(), orderCloth);

+ 2 - 1
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderDeliveryServiceImpl.java

@@ -33,7 +33,8 @@ public class OrderDeliveryServiceImpl extends ServiceImpl<OrderDeliveryMapper, O
 
     @Override
     public List<OrderDeliveryVO> selectOrderDeliveryList(OrderDeliveryRequestDTO requestDTO) {
-        return baseMapper.selectOrderDeliveryList(requestDTO);
+        List<OrderDeliveryVO> list = baseMapper.selectOrderDeliveryList(requestDTO);
+        return list;
     }
 
 

+ 18 - 7
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderGoodsServiceImpl.java

@@ -9,6 +9,7 @@ import cn.binarywang.wx.miniapp.bean.express.result.WxMaExpressOrderInfoResult;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.yiqi.app.domain.AppGoodsMarket;
 import com.yiqi.app.domain.vo.AppUserInfoVO;
@@ -111,6 +112,13 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
 
     //<editor-folder desc="基础韩素">
 
+    @Override
+    public OrderGoods getByOrderNo(String orderNo) {
+        LambdaQueryWrapper<OrderGoods> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(OrderGoods::getOrderNo, orderNo);
+        return this.getOne(queryWrapper);
+    }
+
     /**
      * 查询零售商品订单
      *
@@ -172,8 +180,8 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
     public List<GoodsOrderQueryVO> selectOrderGoodsList(GoodsOrderQueryDTO goodsOrderQueryDTO) {
         SysUser user = SecurityUtils.getLoginUser().getUser();
         goodsOrderQueryDTO.setSourceType(user.getUserType());
-        if (!SourceType.MANAGER.getCode().equals(user.getUserType())) {
-            goodsOrderQueryDTO.setOrgId(SourceType.STORE.getCode().equals(user.getUserType()) ? user.getStoreId() : user.getFactoryId());
+        if (SourceType.STORE.getCode().equals(user.getUserType())) {
+            goodsOrderQueryDTO.setOrgId(user.getStoreId());
         }
         return baseMapper.selectOrderGoodsList(goodsOrderQueryDTO);
     }
@@ -222,6 +230,9 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         orderGoods.setGoodsCount(
                 orderGoodsSkuInfoVOS.stream().mapToInt(OrderGoodsSkuInfoVO::getBuyNum).sum()
         );
+        if (orderGoods.getSourceType().equals(SourceType.MANAGER.getCode())) {
+            orderGoods.setOrgId(0L);
+        }
         this.save(orderGoods);
 
         // 无法批量插入
@@ -586,9 +597,6 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         if (OrderRefundStatus.REFUND_APPLYING.getCode().equals(orderGoods.getRefundStatus())) {
             throw new GlobalException("退款申请中,无法操作退款申请");
         }
-        if (!OrderSourceType.APP.getCode().equals(orderGoods.getOrderSource())) {
-            throw new GlobalException("非APP下单,无法操作退款申请");
-        }
         // 超过3个月不能退单
         if ((DateUtils.getNowDate().compareTo(DateUtils.addMonths(orderGoods.getCreateTime(), 3))) > 0) {
             throw new GlobalException("订单已经超过退单时间,不能操作退单");
@@ -607,11 +615,14 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         OrderGoodsRefund orderGoodsRefund = new OrderGoodsRefund();
         BeanUtils.copyProperties(orderGoods, orderGoodsRefund);
         orderGoodsRefund.setId(null);
+        orderGoodsRefund.setOrderAmount(orderGoods.getTotalPrice());
         orderGoodsRefund.setRefundNo(orderNoUtils.getGoodsOrderNo());
+        orderGoodsRefund.setGoodsType(orderGoods.getGoodsType());
         orderGoodsRefund.setRefundAmount(orderGoods.getRefundAmount());
         orderGoodsRefund.setRefundApplyTime(DateUtils.getNowDate());
         orderGoodsRefund.setRefundReason(orderGoodsRefundDTO.getRefundReason());
         orderGoodsRefund.setRefundStatus(OrderRefundStatus.REFUND_APPLYING.getCode());
+        orderGoodsRefund.buildCreateData();
         orderGoodsRefundService.save(orderGoodsRefund);
 
         // 退款
@@ -1045,8 +1056,8 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
     public List<GoodsOrderRefundQueryVO> getRefundOrderGoodsList(GoodsOrderRefundQueryDTO goodsOrderRefundQueryDTO) {
         SysUser user = SecurityUtils.getLoginUser().getUser();
         goodsOrderRefundQueryDTO.setSourceType(user.getUserType());
-        if (!SourceType.MANAGER.getCode().equals(user.getUserType())) {
-            goodsOrderRefundQueryDTO.setOrgId(SourceType.STORE.getCode().equals(user.getUserType()) ? user.getStoreId() : user.getFactoryId());
+        if (SourceType.STORE.getCode().equals(user.getUserType())) {
+            goodsOrderRefundQueryDTO.setOrgId(user.getStoreId());
         }
         return baseMapper.getRefundOrderGoodsList(goodsOrderRefundQueryDTO);
     }

+ 3 - 1
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderRechargeServiceImpl.java

@@ -895,6 +895,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
         orderRecharge.setCreateById(rechargePasswordCard.getCreateById());
         orderRecharge.setCreateBy(rechargePasswordCard.getCreateBy());
         orderRecharge.setCreateTime(DateUtils.getNowDate());
+        orderRecharge.setStoreId(rechargePasswordCard.getRechargeStoreId());
         orderRecharge.setOrderNo(orderNoUtils.getRechargeOrderNo());
         orderRecharge.setAppUserId(orderRechargeCreateDTO.getAppUserId());
         orderRecharge.setRechargeType(orderRechargeCreateDTO.getRechargeType());
@@ -907,12 +908,13 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
         orderRecharge.setRechargeCardNo(rechargePasswordCard.getCardNo());
         orderRecharge.setPayAmount(rechargePasswordCard.getRechargeAmount());
         orderRecharge.setCashPayAmount(rechargePasswordCard.getRechargeAmount());
-        orderRecharge.setWelfareAmount(rechargePasswordCard.getWelfareAmount());
+        orderRecharge.setWelfareAmount(rechargePasswordCard.getWelfareAmount() == null ? BigDecimal.ZERO : rechargePasswordCard.getWelfareAmount());
         orderRecharge.setWxPayAmount(BigDecimal.ZERO);
         orderRecharge.setAliPayAmount(BigDecimal.ZERO);
         orderRecharge.setRechargeAmount(rechargePasswordCard.getRechargeAmount() == null ? BigDecimal.ZERO : rechargePasswordCard.getRechargeAmount());
         orderRecharge.setGiveAmount(rechargePasswordCard.getGiveAmount() == null ? BigDecimal.ZERO : rechargePasswordCard.getGiveAmount());
         orderRecharge.setGivePointAmount(rechargePasswordCard.getGivePointAmount() == null ? 0 : rechargePasswordCard.getGivePointAmount());
+        orderRecharge.setRefundAmount(BigDecimal.ZERO);
         this.save(orderRecharge);
 
         return orderRecharge;

+ 1 - 2
yiqi-core/src/main/java/com/yiqi/recharge/service/impl/RechargePasswordCardServiceImpl.java

@@ -273,6 +273,7 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public String importData(List<RechargePasswordImportDTO> rechargePasswordImportDTOS, RechargeCardBatchRecord rechargeCardBatchRecord) {
         // 保存导入-未使用的充值卡
         this.buildRechargeCard(rechargePasswordImportDTOS, rechargeCardBatchRecord);
@@ -510,7 +511,6 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
      * @param rechargePasswordImportDTOS
      * @param rechargeCardBatchRecord
      */
-    @Transactional(rollbackFor = Exception.class)
     public void buildRechargeCard(List<RechargePasswordImportDTO> rechargePasswordImportDTOS, RechargeCardBatchRecord rechargeCardBatchRecord) {
         Map<String, SysStore> storeMap = sysStoreService.list(new QueryWrapper<SysStore>().lambda()
                         .in(SysStore::getCode, rechargePasswordImportDTOS.stream().filter(item -> StringUtils.isNotEmpty(item.getStoreCode()))
@@ -519,7 +519,6 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
         List<RechargePasswordCard> rechargePasswordCards = new ArrayList<>();
         for (RechargePasswordImportDTO rechargePasswordImportDTO : rechargePasswordImportDTOS) {
             RechargePasswordCard rechargePasswordCard = new RechargePasswordCard();
-
             rechargePasswordCard.setBatchNo(rechargeCardBatchRecord.getBatchNo());
             rechargePasswordCard.setCardNo(rechargePasswordImportDTO.getCardNo());
             rechargePasswordCard.setPassword(rechargePasswordImportDTO.getPassword());

+ 1 - 1
yiqi-core/src/main/resources/mapper/app/AppBannerMapper.xml

@@ -47,7 +47,7 @@
                 and status = #{status}
             </if>
         </where>
-        order by create_time desc
+        order by sort desc
     </select>
 
     <select id="selectAppBannerById" parameterType="Long"

+ 5 - 13
yiqi-core/src/main/resources/mapper/order/OrderGoodsMapper.xml

@@ -61,7 +61,8 @@
                a.finish_time as finishTime, a.appointment_time as appointmentTime, a.refund_status as refundStatus, a.refund_reason as refundReason,
                a.refund_time as refund, a.refund_amount as refundAmount, a.pay_type as payType, a.out_trade_order_no as outTradeOrderNo,
                a.del_flag as delFlag, a.create_by_id as createById, a.create_by as createBy, a.create_time as createTime,
-               a.update_by_id as updateById, a.update_by as updateBy, a.update_time as updateTime, a.remark
+               a.update_by_id as updateById, a.update_by as updateBy, a.update_time as updateTime, a.remark,
+                b.phone_number, b.real_name, b.nick_name
         from order_goods a
         left join app_user b on a.app_user_id = b.id
         <where>
@@ -69,9 +70,6 @@
             <if test="orderNo != null  and orderNo != ''">
                 and a.order_no = #{orderNo}
             </if>
-            <if test="sourceType != null  and sourceType != ''">
-                and a.source_type = #{sourceType}
-            </if>
             <if test="orgId != null ">
                 and a.org_id = #{orgId}
             </if>
@@ -145,26 +143,20 @@
         </foreach>
     </select>
     <select id="getRefundOrderGoodsList" resultType="com.yiqi.order.domain.vo.GoodsOrderRefundQueryVO">
-        select a.*
-        from order_goods a
+        select a.*, b.phone_number, b.real_name, b.nick_name
+        from order_goods_refund a
         left join app_user b on a.app_user_id = b.id
         <where>
-            and a.del_flag='0'  and a.refund_status in ('1','2')
+            and a.del_flag='0'
             <if test="orderNo != null  and orderNo != ''">
                 and a.order_no = #{orderNo}
             </if>
-            <if test="sourceType != null  and sourceType != ''">
-                and a.source_type = #{sourceType}
-            </if>
             <if test="orgId != null ">
                 and a.org_id = #{orgId}
             </if>
             <if test="goodsType != null  and goodsType != ''">
                 and a.goods_type = #{goodsType}
             </if>
-            <if test="goodsOrderType != null  and goodsOrderType != ''">
-                and a.goods_order_type = #{goodsOrderType}
-            </if>
             <if test="orderStatus != null  and orderStatus != ''">
                 and a.order_status = #{orderStatus}
             </if>

+ 10 - 1
yiqi-system/src/main/java/com/yiqi/system/mapper/SysDataGroupInfoMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import com.yiqi.system.domain.SysDataGroupInfo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 组合数据详情Mapper接口
@@ -60,5 +61,13 @@ public interface SysDataGroupInfoMapper extends BaseMapper<SysDataGroupInfo> {
      * @return 结果
      */
     public int deleteSysDataGroupInfoByIds(Integer[] ids);
-    //</editor-folder>
+
+    /**
+     * 查询组合数据详情列表
+     *
+     * @param gid 组合id
+     * @param status 状态
+     * @return 结果
+     */
+    List<SysDataGroupInfo> getDataList(@Param("gid") Integer gid, @Param("status") Integer status);
 }

+ 9 - 0
yiqi-system/src/main/java/com/yiqi/system/mapper/SysStoreMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yiqi.system.domain.SysStore;
+import com.yiqi.system.domain.dto.weapp.WeAppOrgQueryDTO;
 import com.yiqi.system.domain.vo.OrgVO;
 import com.yiqi.system.domain.vo.SysStoreVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -42,4 +43,12 @@ public interface SysStoreMapper extends BaseMapper<SysStore> {
      * @return 结果
      */
     public int deleteSysStoreByIds(Long[] ids);
+
+    /**
+     * 查询门店列表
+     *
+     * @param weAppOrgQueryDTO
+     * @return
+     */
+    List<SysStoreVo> findStoreByDistance(@Param("weAppOrgQueryDTO") WeAppOrgQueryDTO weAppOrgQueryDTO);
 }

+ 1 - 7
yiqi-system/src/main/java/com/yiqi/system/service/impl/SysDataGroupInfoServiceImpl.java

@@ -102,12 +102,6 @@ public class SysDataGroupInfoServiceImpl extends ServiceImpl<SysDataGroupInfoMap
 
     @Override
     public List<SysDataGroupInfo> getDataList(Integer gid, Integer status) {
-        QueryWrapper<SysDataGroupInfo> wrapper = new QueryWrapper<>();
-        wrapper.eq("gid", gid);
-        if (status != null) {
-            wrapper.eq("status", status);
-        }
-        wrapper.orderByDesc("sort");
-        return baseMapper.selectList(wrapper);
+        return baseMapper.getDataList(gid, status);
     }
 }

+ 6 - 0
yiqi-system/src/main/java/com/yiqi/system/service/impl/SysStoreServiceImpl.java

@@ -15,6 +15,7 @@ import com.yiqi.common.utils.SecurityUtils;
 import com.yiqi.core.service.IGoodsSkuStoreService;
 import com.yiqi.core.service.IGoodsStoreService;
 import com.yiqi.system.domain.ManageFactory;
+import com.yiqi.system.domain.dto.weapp.WeAppOrgQueryDTO;
 import com.yiqi.system.domain.vo.OrgVO;
 import com.yiqi.system.domain.vo.SysStoreVo;
 import com.yiqi.system.service.IManageFactoryService;
@@ -82,6 +83,11 @@ public class SysStoreServiceImpl extends ServiceImpl<SysStoreMapper, SysStore> i
         return baseMapper.selectSysStoreList(sysStore);
     }
 
+    @Override
+    public List<SysStoreVo> findStoreByDistance(WeAppOrgQueryDTO weAppOrgQueryDTO) {
+        return baseMapper.findStoreByDistance(weAppOrgQueryDTO);
+    }
+
     /**
      * 新增门店
      *

+ 8 - 0
yiqi-system/src/main/resources/mapper/system/SysDataGroupInfoMapper.xml

@@ -48,6 +48,14 @@
         where id = #{id}
     </select>
 
+    <select id="getDataList" resultType="com.yiqi.system.domain.SysDataGroupInfo">
+        select * from sys_data_group_info where gid = #{gid}
+                                            <if test="status != null ">
+                                            and status = #{status}
+                                            </if>
+        order by sort desc
+    </select>
+
     <insert id="insertSysDataGroupInfo" parameterType="SysDataGroupInfo" useGeneratedKeys="true"
             keyProperty="id">
         insert into sys_data_group_info

+ 12 - 0
yiqi-system/src/main/resources/mapper/system/SysStoreMapper.xml

@@ -107,4 +107,16 @@
         </if>
         order by org.source_type asc
     </select>
+
+    <select id="findStoreByDistance" resultType="com.yiqi.system.domain.vo.SysStoreVo"
+            parameterType="com.yiqi.system.domain.dto.weapp.WeAppOrgQueryDTO">
+        SELECT
+            *,
+            FLOOR((st_distance (point (longitude, latitude),point(#{weAppOrgQueryDTO.longitude},#{weAppOrgQueryDTO.latitude}) ) *111195)) AS distance
+        FROM
+            sys_store where latitude is not null and longitude is not null and status='0' and del_flag='0'
+        ORDER BY distance asc
+        limit #{weAppOrgQueryDTO.startRow},#{weAppOrgQueryDTO.pageSize}
+
+    </select>
 </mapper>