xuhaifeng 1 month ago
parent
commit
2f65ca0b52
54 changed files with 585 additions and 415 deletions
  1. 2 2
      admin-ui/.env.development
  2. 2 2
      admin-ui/src/api/order/goods.js
  3. 12 0
      admin-ui/src/api/settlement/statistics.js
  4. 8 12
      admin-ui/src/views/activity/couponInfo/index.vue
  5. 7 14
      admin-ui/src/views/activity/discountInfo/index.vue
  6. 13 16
      admin-ui/src/views/activity/rechargeInfo/index.vue
  7. 10 3
      admin-ui/src/views/coupon/type/index.vue
  8. 3 3
      admin-ui/src/views/coupon/typeApplyCloth/index.vue
  9. 2 2
      admin-ui/src/views/express/index.vue
  10. 5 4
      admin-ui/src/views/order/cloth/sendCloth.vue
  11. 92 119
      admin-ui/src/views/order/retailOrder/index.vue
  12. 14 2
      admin-ui/src/views/order/statistics/byfactory.vue
  13. 1 1
      admin-ui/src/views/order/statistics/bystore.vue
  14. 0 1
      admin-ui/src/views/settlement/rate/storeRate.vue
  15. 11 17
      admin-ui/src/views/system/agreement/index.vue
  16. 1 1
      admin-ui/src/views/system/groupData/components/groupFrom.vue
  17. 2 2
      admin-ui/src/views/system/groupData/index.vue
  18. 1 1
      yiqi-admin/src/main/java/com/yiqi/admin/controller/app/AppUserController.java
  19. 1 1
      yiqi-admin/src/main/java/com/yiqi/admin/controller/core/SysStoreIntracityExpressController.java
  20. 1 0
      yiqi-admin/src/main/java/com/yiqi/admin/controller/order/OrderClothController.java
  21. 14 0
      yiqi-admin/src/main/java/com/yiqi/admin/controller/settlement/SettlementFactoryStatisticsController.java
  22. 41 0
      yiqi-admin/src/main/java/com/yiqi/web/controller/system/SysDataGroupController.java
  23. 4 4
      yiqi-admin/src/main/resources/application-dev.yml
  24. 2 0
      yiqi-admin/src/main/resources/application-prod.yml
  25. 29 3
      yiqi-api/src/main/java/com/yiqi/api/controller/WeAppCouponItemController.java
  26. 3 0
      yiqi-api/src/main/java/com/yiqi/api/controller/activity/WeAppActivityCouponController.java
  27. 147 28
      yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderClothController.java
  28. 1 0
      yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderRechargeController.java
  29. 4 4
      yiqi-api/src/main/resources/application-dev.yml
  30. 1 0
      yiqi-common/src/main/java/com/yiqi/common/config/WxPayConfigs.java
  31. 2 2
      yiqi-common/src/main/java/com/yiqi/common/enums/OrderRefundStatus.java
  32. 0 1
      yiqi-common/src/main/java/com/yiqi/core/domain/dto/weapp/WeAppGoodsInfoQueryDTO.java
  33. 43 39
      yiqi-common/src/main/java/com/yiqi/order/domain/dto/OrderGoodsOutGoodsDTO.java
  34. 4 4
      yiqi-common/src/main/java/com/yiqi/order/domain/dto/OrderThirdDeliveryAddDTO.java
  35. 4 1
      yiqi-common/src/main/java/com/yiqi/order/domain/dto/RechargeCardPayDTO.java
  36. 1 6
      yiqi-common/src/main/java/com/yiqi/order/domain/dto/weapp/OrderClothAppQueryDTO.java
  37. 0 5
      yiqi-common/src/main/java/com/yiqi/order/service/IOrderRechargeService.java
  38. 4 0
      yiqi-common/src/main/java/com/yiqi/recharge/domain/dto/BillMstrOrderDTO.java
  39. 8 1
      yiqi-common/src/main/java/com/yiqi/recharge/domain/dto/weapp/WeAppCardRecordByCardDTO.java
  40. 3 1
      yiqi-common/src/main/java/com/yiqi/recharge/domain/vo/weapp/WeAppCardsUseRecordsVO.java
  41. 8 7
      yiqi-common/src/main/java/com/yiqi/system/service/ISysDataGroupService.java
  42. 9 11
      yiqi-core/src/main/java/com/yiqi/app/service/impl/AppUserBillMstrServiceImpl.java
  43. 1 1
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderClothServiceImpl.java
  44. 16 20
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderGoodsServiceImpl.java
  45. 0 54
      yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderRechargeServiceImpl.java
  46. 10 3
      yiqi-core/src/main/java/com/yiqi/payment/AliPayService.java
  47. 10 2
      yiqi-core/src/main/java/com/yiqi/payment/WechatPayService.java
  48. 9 6
      yiqi-core/src/main/java/com/yiqi/recharge/service/impl/RechargePasswordCardServiceImpl.java
  49. 1 1
      yiqi-core/src/main/resources/mapper/activity/ActivityInfoMapper.xml
  50. 1 1
      yiqi-core/src/main/resources/mapper/app/AppCouponItemMapper.xml
  51. 1 1
      yiqi-core/src/main/resources/mapper/recharge/RechargePasswordCardMapper.xml
  52. 6 5
      yiqi-framework/src/main/java/com/yiqi/framework/config/CaptchaConfig.java
  53. 4 1
      yiqi-system/src/main/java/com/yiqi/system/mapper/SysDataGroupMapper.java
  54. 6 0
      yiqi-system/src/main/resources/mapper/system/SysDataGroupMapper.xml

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

@@ -5,8 +5,8 @@ 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://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/'

+ 2 - 2
admin-ui/src/api/order/goods.js

@@ -110,7 +110,7 @@ export function refundApprovalReject(query) {
 //获取所有可支持的快递公司
 export function getdeliveryAll() {
   return request({
-    url: '/mapi/third/delivery/all',
+    url: '/mapi/system/group/data/selectByKey?key=express_company',
     method: 'get'
   })
 }
@@ -122,4 +122,4 @@ export function getDeliveryPath(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 12 - 0
admin-ui/src/api/settlement/statistics.js

@@ -132,6 +132,18 @@ export function factoryDashborad() {
   })
 }
 
+/**
+ * 当日订单统计同步
+ * @param query
+ * @returns {*}
+ */
+export function factoryStaticsSync() {
+  return request({
+    url: '/mapi/settlement/factory/statistics/sync',
+    method: 'get'
+  })
+}
+
 //工厂端首页dashboard
 export function platformDashborad() {
   return request({

+ 8 - 12
admin-ui/src/views/activity/couponInfo/index.vue

@@ -82,18 +82,14 @@
                 </template>
             </el-table-column>
                 <el-table-column label="创建时间" align="center" prop="createTime" width="150" />
-                <el-table-column label="操作" align="center" min-width="120" fixed="right">
-                <template slot-scope="scope">
-                        <el-dropdown trigger="click" @command="handleCommand($event, scope.row)">
-                            <el-button type="primary" size="mini"> 操作<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
-                            <el-dropdown-menu slot="dropdown">
-                                <el-dropdown-item command="edit" icon="el-icon-edit">编辑活动</el-dropdown-item>
-                                <el-dropdown-item command="setCoupons" icon="el-icon-s-ticket">设置优惠券</el-dropdown-item>
-                                <el-dropdown-item command="delete" icon="el-icon-delete" class="dropdown-danger">删除活动</el-dropdown-item>
-                            </el-dropdown-menu>
-                        </el-dropdown>
-                </template>
-            </el-table-column>
+
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" >
+            <template slot-scope="scope">
+              <el-button type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button>
+              <el-button type="text" icon="el-icon-s-shop"  @click="handleSetRechargeItems(scope.row)" >设置优惠券</el-button>
+              <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" >删除</el-button>
+            </template>
+          </el-table-column>
         </Page>
         </el-card>
 

+ 7 - 14
admin-ui/src/views/activity/discountInfo/index.vue

@@ -72,20 +72,13 @@
                     </template>
                 </el-table-column>
                 <el-table-column label="创建时间" align="center" prop="createTime" width="150" />
-                <el-table-column label="操作" align="center" width="120" fixed="right">
-                    <template slot-scope="scope">
-                        <el-dropdown trigger="click" @command="handleCommand($event, scope.row)">
-                            <el-button type="primary" size="mini">
-                                操作<i class="el-icon-arrow-down el-icon--right"></i>
-                            </el-button>
-                            <el-dropdown-menu slot="dropdown">
-                                <el-dropdown-item command="edit" icon="el-icon-edit">编辑活动</el-dropdown-item>
-                                <el-dropdown-item v-if="scope.row.clothScope == 1" command="setClothes" icon="el-icon-s-shop">指定衣服</el-dropdown-item>
-                                <el-dropdown-item command="delete" icon="el-icon-delete" class="dropdown-danger">删除活动</el-dropdown-item>
-                            </el-dropdown-menu>
-                        </el-dropdown>
-                    </template>
-                </el-table-column>
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" >
+                <template slot-scope="scope">
+                  <el-button type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button>
+                  <el-button type="text" icon="el-icon-s-shop" v-if="scope.row.clothScope == 1" @click="handleSetRechargeItems(scope.row)" >指定衣服</el-button>
+                  <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" >删除</el-button>
+                </template>
+              </el-table-column>
             </Page>
         </el-card>
 

+ 13 - 16
admin-ui/src/views/activity/rechargeInfo/index.vue

@@ -25,7 +25,7 @@
         <!-- 列表区域 -->
         <el-card shadow="never">
             <Page uri="/mapi/activity/recharge/list" :request-params="queryParams" ref="pagination">
-                <el-table-column label="活动信息" min-width="250" align="left">
+                <el-table-column label="活动信息" width="350" align="left">
                     <template slot-scope="scope">
                         <div class="activity-card">
                             <div class="activity-main">
@@ -40,7 +40,7 @@
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column label="活动时间" align="center" min-width="150">
+                <el-table-column label="活动时间" align="center" width="250">
                     <template slot-scope="scope">
                         {{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }} 至 {{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}
                     </template>
@@ -50,26 +50,23 @@
                         <el-tag size="medium" type="success">{{ scope.row.storeNum }}家门店</el-tag>
                     </template>
                 </el-table-column>
-                <el-table-column label="活动状态" align="center" width="100">
+                <el-table-column label="活动状态" align="center" width="120">
                     <template slot-scope="scope">
                         <div class="status-column">
                             <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column label="创建时间" align="center" prop="createTime" width="150" />
-                <el-table-column label="操作" align="center" width="120" fixed="right">
-                    <template slot-scope="scope">
-                        <el-dropdown trigger="click" @command="handleCommand($event, scope.row)">
-                            <el-button type="primary" size="mini"> 操作<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
-                            <el-dropdown-menu slot="dropdown">
-                                <el-dropdown-item command="edit" icon="el-icon-edit">编辑活动</el-dropdown-item>
-                                <el-dropdown-item command="setRules" icon="el-icon-s-shop">设置规则</el-dropdown-item>
-                                <el-dropdown-item command="delete" icon="el-icon-delete" class="dropdown-danger">删除活动</el-dropdown-item>
-                            </el-dropdown-menu>
-                        </el-dropdown>
-                    </template>
-                </el-table-column>
+                <el-table-column label="创建时间" align="center" prop="createTime" width="200" />
+
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" >
+                <template slot-scope="scope">
+                  <el-button type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button>
+                  <el-button type="text" icon="el-icon-s-shop"  @click="handleSetRechargeItems(scope.row)" >设置规则</el-button>
+                  <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" >删除</el-button>
+                </template>
+              </el-table-column>
+
             </Page>
         </el-card>
 

+ 10 - 3
admin-ui/src/views/coupon/type/index.vue

@@ -359,6 +359,11 @@ export default {
                 this.thirdPartyList = response.rows
             })
         },
+      formatAmount(amount) {
+        if (!amount) return '0'
+        const value = amount.toString().replace('-', '')
+        return value
+      },
         /** 查询优惠券类型列表 */
         getList() {
             this.loading = true
@@ -375,7 +380,9 @@ export default {
         },
         // 取消按钮
         cancel() {
-            this.handleClose()
+          this.reset()
+          this.open = false
+            // this.handleClose()
         },
         // 表单重置
         reset() {
@@ -407,7 +414,7 @@ export default {
                 sendWay: null,
                 couponStock: 0
             }
-            
+
             // 重置所有表单
             if (this.$refs.form) {
                 this.$refs.form.resetFields()
@@ -415,7 +422,7 @@ export default {
             if (this.$refs.formRules) {
                 this.$refs.formRules.resetFields()
             }
-            
+
             // 重置标签页
             this.activeTab = 'basic'
         },

+ 3 - 3
admin-ui/src/views/coupon/typeApplyCloth/index.vue

@@ -116,11 +116,11 @@ export default {
     },
     created() {
         this.couponTypeId = this.$route.params && this.$route.params.couponTypeId
+        if(this.couponTypeId){
+          this.queryParams.couponTypeId = this.couponTypeId
+        }
         this.getClothTypeList()
         this.getList()
-        listClothItem({ pageSize: 999999, pageNum: 1 }).then((res) => {
-            this.clothList = res.rows
-        })
     },
     methods: {
         /** 查询优惠券可使用衣物列表 */

+ 2 - 2
admin-ui/src/views/express/index.vue

@@ -22,7 +22,7 @@
 
         <el-row :gutter="10" class="mb8">
             <el-col :span="1.5">
-                <el-button type="primary" plain icon="el-icon-plus" @click="handleCash">充值</el-button>
+<!--                <el-button type="primary" plain icon="el-icon-plus" @click="handleCash">充值</el-button>-->
             </el-col>
             <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
         </el-row>
@@ -55,7 +55,7 @@
             </el-table>
         </el-tabs>
 
-        <el-dialog :visible.sync="cashOpen" width="50%" title="充值配送余额">
+        <el-dialog :visible.sync="cashOpen" width="50%" title="充值配送余额" append-to-body>
             <div>
                 <el-form ref="form" :model="form" :rules="rules" label-width="80px" size="small">
                     <el-form-item label="快递公司" prop="service_trans_id">

+ 5 - 4
admin-ui/src/views/order/cloth/sendCloth.vue

@@ -6,9 +6,10 @@
                 <el-form-item label="订单状态" prop="orderStatus">
                     <el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" clearable style="width: 160px">
                         <el-option key="6" label="清洗中" value="6" />
-                        <el-option key="7" label="已上挂" value="7" />
-                        <el-option key="8" label="待送衣" value="8" />
-                        <el-option key="9" label="送衣中" value="9" />
+                        <el-option key="7" label="已出厂" value="7" />
+                        <el-option key="8" label="已到店" value="8" />
+                        <el-option key="9" label="待送衣" value="9" />
+                        <el-option key="10" label="送衣中" value="10" />
                     </el-select>
                 </el-form-item>
                 <el-form-item label="订单来源" prop="flowStatus">
@@ -215,7 +216,7 @@
                 </div>
         </el-dialog>
 
-       
+
         <pay-status-popup ref="payStatusPopup" hidePointer @paySuccess="handlePaySuccess" @confirm="handlePayConfirm" @error="handlePayError"> </pay-status-popup>
     </div>
 </template>

+ 92 - 119
admin-ui/src/views/order/retailOrder/index.vue

@@ -67,6 +67,11 @@
                     <dict-tag :options="dict.type.order_goods_status" :value="scope.row.orderStatus" />
                 </template>
             </el-table-column>
+          <el-table-column label="退单状态" align="center" prop="orderStatus" width="120">
+            <template slot-scope="scope">
+              <dict-tag :options="dict.type.goods_order_refund_status" :value="scope.row.refundStatus" />
+            </template>
+          </el-table-column>
             <el-table-column label="下单时间" align="center" prop="createTime" width="180" />
             <el-table-column label="支付时间" align="center" prop="payTime" width="180">
                 <template slot-scope="scope">
@@ -79,9 +84,9 @@
                     <el-button type="text" icon="el-icon-chat-dot-square" @click="orderDetail(scope.row)">订单详情</el-button>
                     <el-button type="text" icon="el-icon-check" @click="rePay(scope.row)" v-if="scope.row.orderStatus == '0' && userInfoVO.userType == '02'">重新支付 </el-button>
                     <el-button type="text" icon="el-icon-close" @click="cancelOrder(scope.row)" v-if="scope.row.orderStatus == '0'">取消订单 </el-button>
-                    <el-button type="text" icon="el-icon-check" @click="outOrderGoods(scope.row)" v-if="scope.row.orderStatus == '2' && userInfoVO.userType == '00'">出货 </el-button>
-                    <el-button type="text" icon="el-icon-truck" @click="deliveryInfo(scope.row)" v-if="scope.row.deliveryNo"> 物流信息 </el-button>
-                    <el-button type="text" icon="el-icon-chat-dot-square" @click="refundOrder(scope.row)" v-if="userInfoVO.userType == '00' && scope.row.refundStatus != '1' && scope.row.refundStatus != '2' && scope.row.orderStatus != '0' && scope.row.orderStatus != '100'"> 撤单 </el-button>
+                    <el-button type="text" icon="el-icon-check" @click="outOrderGoods(scope.row)" v-if="scope.row.orderStatus == '2' && userInfoVO.userType == '00' &&  scope.row.refundStatus == '0'">出货 </el-button>
+<!--                    <el-button type="text" icon="el-icon-truck" @click="deliveryInfo(scope.row)" v-if="scope.row.deliveryNo"> 物流信息 </el-button>-->
+                    <el-button type="text" icon="el-icon-chat-dot-square" @click="refundOrder(scope.row)" v-if="userInfoVO.userType == '00' && scope.row.refundStatus == '0' && !scope.row.deliveryNo"> 撤单 </el-button>
                     <el-button type="text" icon="el-icon-printer" v-if="userInfoVO.userType != '00'" @click="btn_lodop(scope.row)">打印 </el-button>
                 </template>
             </el-table-column>
@@ -239,68 +244,63 @@
                     <el-col :span="24">
                         <el-form-item label="快递公司" prop="deliveryCompany">
                             <el-radio-group v-model="deliveryVo.deliveryCompany" @input="changeDeliveryId">
-                                <el-radio-button v-for="dict in deliveryData" :label="dict.deliveryName" :key="dict.deliveryName"></el-radio-button>
+                                <el-radio-button v-for="dict in deliveryData" :label="dict.name" :key="dict.name"></el-radio-button>
                             </el-radio-group>
                         </el-form-item>
 
-                        <el-form-item label="服务类型" prop="serviceType">
-                            <div class="servicecard" v-for="del in serviceData" :key="del.serviceType" @click="checkserviceId(del)" :class="{ active: deliveryVo.serviceType == del.serviceType }">
-                                <div class="check"><i class="el-icon-check"></i></div>
-                                {{ del.serviceName }}
-                            </div>
-                        </el-form-item>
-
-                        <el-form-item label="预期揽件时间" prop="expectTime">
-                            <el-date-picker
-                                type="datetime"
-                                placeholder="选择预期揽件时间"
-                                v-model="deliveryVo.expectTime"
-                                style="width: 100%"
-                                value-format="yyyy-MM-dd HH:mm"
-                                format="yyyy-MM-dd HH:mm"
-                                :picker-options="{
-                                    disabledDate: (time) => {
-                                        return time.getTime() < Date.now() - 3600 * 1000 * 24
-                                    },
-                                    selectableRange: startTimeRange
-                                }"
-                                :default-time="deliTime"
-                                class="date_picker"
-                                :editable="false"
-                            ></el-date-picker>
-                        </el-form-item>
+<!--                        <el-form-item label="预期揽件时间" prop="expectTime">-->
+<!--                            <el-date-picker-->
+<!--                                type="datetime"-->
+<!--                                placeholder="选择预期揽件时间"-->
+<!--                                v-model="deliveryVo.expectTime"-->
+<!--                                style="width: 100%"-->
+<!--                                value-format="yyyy-MM-dd HH:mm"-->
+<!--                                format="yyyy-MM-dd HH:mm"-->
+<!--                                :picker-options="{-->
+<!--                                    disabledDate: (time) => {-->
+<!--                                        return time.getTime() < Date.now() - 3600 * 1000 * 24-->
+<!--                                    },-->
+<!--                                    selectableRange: startTimeRange-->
+<!--                                }"-->
+<!--                                :default-time="deliTime"-->
+<!--                                class="date_picker"-->
+<!--                                :editable="false"-->
+<!--                            ></el-date-picker>-->
+<!--                        </el-form-item>-->
 
                         <!-- <el-form-item label="包裹数量" prop="count">
   <el-input v-model="deliveryVo.count" type="number" placeholder="请输入包裹数量" clearable></el-input>
 </el-form-item> -->
 
-                        <el-form-item label="货物高度" prop="spaceHeight">
-                            <el-input v-model="deliveryVo.spaceHeight" placeholder="请输入货物高度" clearable>
-                                <template slot="append">厘米(cm)</template>
-                            </el-input>
-                        </el-form-item>
-
-                        <el-form-item label="货物长度" prop="spaceLength">
-                            <el-input v-model="deliveryVo.spaceLength" placeholder="请输入货物长度" clearable>
-                                <template slot="append">厘米(cm)</template>
-                            </el-input>
-                        </el-form-item>
-
-                        <el-form-item label="货物宽度" prop="spaceWidth">
-                            <el-input v-model="deliveryVo.spaceWidth" placeholder="请输入货物宽度" clearable>
-                                <template slot="append">厘米(cm)</template>
-                            </el-input>
-                        </el-form-item>
-
-                        <el-form-item label="货物总重量" prop="weight">
-                            <el-input v-model="deliveryVo.weight" placeholder="请输入货物总重量" clearable>
-                                <template slot="append">千克 (kg)</template>
-                            </el-input>
-                        </el-form-item>
-
-                        <el-form-item label="备注信息" prop="customRemark">
-                            <el-input v-model="deliveryVo.customRemark" rows="5" type="textarea" placeholder="请输入备注信息,比如易碎物品……" maxlength="500" show-word-limit clearable></el-input>
-                        </el-form-item>
+<!--                        <el-form-item label="货物高度" prop="spaceHeight">-->
+<!--                            <el-input v-model="deliveryVo.spaceHeight" placeholder="请输入货物高度" clearable>-->
+<!--                                <template slot="append">厘米(cm)</template>-->
+<!--                            </el-input>-->
+<!--                        </el-form-item>-->
+
+<!--                        <el-form-item label="货物长度" prop="spaceLength">-->
+<!--                            <el-input v-model="deliveryVo.spaceLength" placeholder="请输入货物长度" clearable>-->
+<!--                                <template slot="append">厘米(cm)</template>-->
+<!--                            </el-input>-->
+<!--                        </el-form-item>-->
+
+<!--                        <el-form-item label="货物宽度" prop="spaceWidth">-->
+<!--                            <el-input v-model="deliveryVo.spaceWidth" placeholder="请输入货物宽度" clearable>-->
+<!--                                <template slot="append">厘米(cm)</template>-->
+<!--                            </el-input>-->
+<!--                        </el-form-item>-->
+
+<!--                        <el-form-item label="货物总重量" prop="weight">-->
+<!--                            <el-input v-model="deliveryVo.weight" placeholder="请输入货物总重量" clearable>-->
+<!--                                <template slot="append">千克 (kg)</template>-->
+<!--                            </el-input>-->
+<!--                        </el-form-item>-->
+                      <el-form-item label="快递单号" prop="deliveryNo">
+                        <el-input v-model="deliveryVo.deliveryNo" type="input" placeholder="请输入快递单号" maxlength="100" clearable></el-input>
+                      </el-form-item>
+<!--                        <el-form-item label="备注信息" prop="customRemark">-->
+<!--                            <el-input v-model="deliveryVo.customRemark" rows="5" type="textarea" placeholder="请输入备注信息,比如易碎物品……" maxlength="500" show-word-limit clearable></el-input>-->
+<!--                        </el-form-item>-->
                     </el-col>
                 </el-form>
             </el-row>
@@ -347,7 +347,7 @@ import { printGoods } from '@/api/order/clothItem'
 
 export default {
     name: 'goodsRetailOrder',
-    dicts: ['order_goods_status', 'delivery_company', 'recharge_pay_type'],
+    dicts: ['order_goods_status', 'goods_order_refund_status','delivery_company', 'recharge_pay_type'],
     data() {
         var validateNumberInput = (rule, value, callback) => {
             if (!value || isNaN(value)) {
@@ -416,51 +416,48 @@ export default {
             goodsOrderInfo: null,
             payMoney: null,
             deliveryVo: {
-                bizId: '',
+                // bizId: '',
                 // count: 1,
                 customRemark: '',
                 deliveryCompany: '',
                 deliveryId: '',
-                expectTime: '',
-                orderId: null,
-                serviceName: '',
-                serviceType: null,
-                spaceHeight: null,
-                spaceLength: null,
-                spaceWidth: null,
-                weight: null
+                deliveryNo: ''
+                // expectTime: '',
+                // orderId: null,
+                // serviceName: '',
+                // serviceType: null,
+                // spaceHeight: null,
+                // spaceLength: null,
+                // spaceWidth: null,
+                // weight: null
             },
             deliveryRules: {
                 deliveryName: [{ required: true, message: '请选择物流公司', trigger: 'change' }],
-                serviceType: [{ required: true, message: '请选择服务类型', trigger: 'change' }],
-                expectTime: [{ required: true, message: '选择预期揽件时间', trigger: 'blur' }],
-                // count: [
-                //   { required: true, message: '请输入包裹数量', trigger: 'blur' },
+                // serviceType: [{ required: true, message: '请选择服务类型', trigger: 'change' }],
+                // expectTime: [{ required: true, message: '选择预期揽件时间', trigger: 'blur' }],
+                // spaceHeight: [
+                //     { required: true, message: '请输入货物高度', trigger: 'blur' },
+                //     { validator: validateNumberInput, trigger: 'blur' }
+                // ],
+                // spaceLength: [
+                //     { required: true, message: '请输入货物长度', trigger: 'blur' },
+                //     { validator: validateNumberInput, trigger: 'blur' }
+                // ],
+                // spaceWidth: [
+                //     { required: true, message: '请输入货物宽度', trigger: 'blur' },
+                //     { validator: validateNumberInput, trigger: 'blur' }
                 // ],
-                spaceHeight: [
-                    { required: true, message: '请输入货物高度', trigger: 'blur' },
-                    { validator: validateNumberInput, trigger: 'blur' }
-                ],
-                spaceLength: [
-                    { required: true, message: '请输入货物长度', trigger: 'blur' },
-                    { validator: validateNumberInput, trigger: 'blur' }
-                ],
-                spaceWidth: [
-                    { required: true, message: '请输入货物宽度', trigger: 'blur' },
-                    { validator: validateNumberInput, trigger: 'blur' }
-                ],
-                weight: [
-                    { required: true, message: '请输入货物总重量', trigger: 'blur' },
-                    { validator: validateNumberInput, trigger: 'blur' }
-                ],
-                customRemark: [{ required: true, message: '请输入备注信息,比如易碎物品……', trigger: 'blur' }]
+                // weight: [
+                //     { required: true, message: '请输入货物总重量', trigger: 'blur' },
+                //     { validator: validateNumberInput, trigger: 'blur' }
+                // ],
+                // customRemark: [{ required: true, message: '请输入备注信息,比如易碎物品……', trigger: 'blur' }]
             },
             refundVO: {
                 orderId: null,
                 refundReason: null
             },
             deliveryData: [], //快递公司数据
-            serviceData: [], //快递公司服务类型数据
             startTimeRange: null,
             deliTime: null,
 
@@ -481,7 +478,7 @@ export default {
         this.handleUser()
         this.goodsType = this.getUrlParam('goodsType')
         this.getList()
-        // this.getdeliveryAll()
+        this.getdeliveryAll()
     },
     mounted() {
         this.number = 1
@@ -688,26 +685,9 @@ export default {
         outOrderGoods(row) {
             this.deliveryreset()
             this.openDeliveryPage = true
-
-            this.deliveryVo.deliveryCompany = this.deliveryData[0].deliveryName
-
-            this.serviceData = this.deliveryData[0].serviceType
-
-            // 获取当前时间
-            const now = new Date()
-
-            // 增加一个小时
-            now.setHours(now.getHours() + 1)
-
-            // 提取时分秒并格式化
-            const hours = ('0' + now.getHours()).slice(-2)
-            const minutes = ('0' + now.getMinutes()).slice(-2)
-            const seconds = ('0' + now.getSeconds()).slice(-2)
-
-            // 结果字符串
-            this.deliTime = `${hours}:${minutes}:${seconds}`
-
-            this.deliveryVo.orderId = row.id
+            this.deliveryVo.deliveryCompany = this.deliveryData[0].name
+          this.deliveryVo.deliveryId = this.deliveryData[0].code
+          this.deliveryVo.orderId = row.id
         },
         //获取快递公司
         getdeliveryAll() {
@@ -719,17 +699,10 @@ export default {
         changeDeliveryId(value) {
             this.deliveryData.forEach((item, index) => {
                 if (value == item.deliveryName) {
-                    this.deliveryVo.deliveryId = item.deliveryId
-                    this.deliveryVo.bizId = item.bizId
-
-                    this.serviceData = item.serviceType
+                    this.deliveryVo.deliveryId = item.code
                 }
             })
         },
-        checkserviceId(del) {
-            this.deliveryVo.serviceType = del.serviceType
-            this.deliveryVo.serviceName = del.serviceName
-        },
         // 撤单
         refundOrder(row) {
             this.refundVO = {}
@@ -969,7 +942,7 @@ export default {
 
 .product-list-container {
     margin: 20px 0;
-    
+
     .product-list-title {
         margin-bottom: 15px;
         font-size: 16px;

+ 14 - 2
admin-ui/src/views/order/statistics/byfactory.vue

@@ -27,6 +27,7 @@
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button type="warning" @click="handleSync" size="mini"  v-if="userInfoVO.userType == '00'">同步当日统计</el-button>
       </el-form-item>
     </el-form>
 
@@ -122,7 +123,12 @@
 </template>
 
 <script>
-import { listStatisticsByDate, getTotalStatistics, listplatformStatisticsByFactory } from '@/api/settlement/statistics'
+import {
+  listStatisticsByDate,
+  getTotalStatistics,
+  listplatformStatisticsByFactory,
+  orderStaticsSync, factoryStaticsSync
+} from '@/api/settlement/statistics'
 import { listStore } from "@/api/system/store";
 import CountTo from 'vue-count-to'
 import { listFactory } from '@/api/system/factory'
@@ -140,6 +146,7 @@ export default {
       showSearch: true,
       // 总条数
       total: 0,
+      userInfoVO: {  },
       // 统计列表
       statisticsList: [],
       // 总统计数据
@@ -194,7 +201,7 @@ export default {
     this.dateRange = [this.formatDate(start), this.formatDate(end)];
     this.queryParams.startDate = this.dateRange[0];
     this.queryParams.endDate = this.dateRange[1];
-
+    this.userInfoVO = this.getUserInfo()
     this.getList();
     this.getStoreOptions();
   },
@@ -216,6 +223,11 @@ export default {
         this.queryParams.endDate = null;
       }
     },
+    handleSync(){
+      factoryStaticsSync().then(response => {
+        this.getList();
+      });
+    },
     /** 查询统计列表 */
     getList() {
       this.loading = true;

+ 1 - 1
admin-ui/src/views/order/statistics/bystore.vue

@@ -12,7 +12,7 @@
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
-        <el-button type="warning" @click="handleSync"  v-if="userInfoVO.userType == '00'">同步当日统计</el-button>
+        <el-button type="warning" @click="handleSync" size="mini"  v-if="userInfoVO.userType == '00'">同步当日统计</el-button>
       </el-form-item>
     </el-form>
 

+ 0 - 1
admin-ui/src/views/settlement/rate/storeRate.vue

@@ -14,7 +14,6 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button type="primary" plain icon="el-icon-plus" @click="handleAdd" v-hasPermi="['goods:category:add']">新增</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>

+ 11 - 17
admin-ui/src/views/system/agreement/index.vue

@@ -47,17 +47,12 @@ export default {
       headerList: [
         { label: '用户协议', value: '0' },
         { label: '隐私协议', value: '1' },
-        { label: '服务约定', value: '2' },
+        { label: '充值须知', value: '7' },
+        { label: '商城服务', value: '2' },
         { label: '积分协议', value: '3' },
         { label: '注销协议', value: '9' },
+        { label: '关于我们', value: '6' },
       ],
-      ueConfig: {
-        autoHeightEnabled: false,
-        initialFrameHeight: 500,
-        initialFrameWidth: '100%',
-        UEDITOR_HOME_URL: '/UEditor/',
-        serverUrl: '',
-      },
       id: 0,
       formValidate: {
         content: '',
@@ -84,16 +79,15 @@ export default {
   },
   methods: {
     save() {
-      this.formValidate.content = this.content;
       updateDocument(this.formValidate).then((response) => {
         this.$message.success(response.msg);
       })
     },
     getEditorContent(content) {
-      this.content = content;
+      this.formValidate.content = content;
     },
     changeTab() {
-      this.formValidate.content = ' ';
+      this.formValidate.content = '';
       getDocumentByCode({ code: this.currentTab }).then(res => {
         this.formValidate.id = res.data.id || 0;
         this.formValidate.content = res.data.content;
@@ -104,29 +98,29 @@ export default {
       try {
         // 先将状态设置为关闭中,防止重复操作
         this.isClosing = true
-        
+
         // 重置所有状态
         this.loading = false
         this.processing = false
         this.activeTab = 'basic'
-        
+
         // 延迟执行销毁和关闭操作,确保组件状态已更新
         this.$nextTick(() => {
           // 销毁编辑器实例(如果存在)
           if (this.$refs.form?.$refs.editor?.editor) {
             this.$refs.form.$refs.editor.editor.destroy()
           }
-          
+
           // 清空表单数据
           this.reset()
-          
+
           // 关闭弹窗
           this.open = false
-          
+
           if (typeof done === 'function') {
             done()
           }
-          
+
           // 重置关闭状态
           this.isClosing = false
         })

+ 1 - 1
admin-ui/src/views/system/groupData/components/groupFrom.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-dialog :visible.sync="modals" width="720px" :title="titleFrom" :close-on-click-modal="false">
+    <el-dialog :visible.sync="modals" width="720px" :title="titleFrom" :close-on-click-modal="false" append-to-body>
       <el-form ref="formValidate" :model="formValidate" label-width="100px" :rules="ruleValidate" @submit.native.prevent>
         <el-row :gutter="24">
           <el-col :span="24">

+ 2 - 2
admin-ui/src/views/system/groupData/index.vue

@@ -40,7 +40,7 @@
         <el-table-column label="数据组名称" align="center" prop="name" />
         <el-table-column label="数据提示" align="center" prop="info" />
         <el-table-column label="关键字" align="center" prop="configName" />
-        
+
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150">
           <template slot-scope="scope">
             <el-button size="mini" type="text" icon="el-icon-edit" @click="handleList(scope.row)" v-hasPermi="['system:group:edit']">数据列表</el-button>
@@ -52,7 +52,7 @@
       </Page>
 
       <!-- 添加或修改组合数据对话框 -->
-      <el-drawer :title="title" :visible.sync="open" size="30%" append-to-body :before-close="checkClose">
+      <el-drawer :title="title" :visible.sync="open" size="30%"  :before-close="checkClose" append-to-body>
         <el-row :gutter="15" style="margin-bottom: 80px">
           <el-form ref="form" :model="form" :rules="rules" label-width="100px">
             <el-col :span="24">

+ 1 - 1
yiqi-admin/src/main/java/com/yiqi/admin/controller/app/AppUserController.java

@@ -193,7 +193,7 @@ public class AppUserController extends BaseController {
             memberInfoVO.setRechargeBalance(rechargePasswordCard.getRechargeBalance());
             memberInfoVO.setGiveBalance(rechargePasswordCard.getGiveBalance());
             memberInfoVO.setPointBalance(0);
-            memberInfoVO.setWelfareBalance(BigDecimal.ZERO);
+            memberInfoVO.setWelfareBalance(rechargePasswordCard.getWelfareBalance());
         } else {
             memberInfoVO.setRechargeBalance(BigDecimal.ZERO);
             memberInfoVO.setGiveBalance(BigDecimal.ZERO);

+ 1 - 1
yiqi-admin/src/main/java/com/yiqi/admin/controller/core/SysStoreIntracityExpressController.java

@@ -182,7 +182,7 @@ public class SysStoreIntracityExpressController extends BaseController {
         if (orderCloth.getOrderStatus().equals(ClothOrderStatusType.APPOINTMENT.getCode())) {
             throw new ServiceException("同城配送暂不支持上门取件");
         } else if (orderCloth.getOrderStatus().equals(ClothOrderStatusType.WAITING_TO_SEND.getCode())) {
-            //同城配送订单只能由商家地址发货,所以如果是上门收衣的话,先把门店地址改为客户地址,查询完后再改回来
+            //同城配送订单只能由商家地址发货
             OrderDelivery orderDelivery
                     = orderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().lambda()
                     .eq(OrderDelivery::getOrderSn, orderNo)

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

@@ -456,6 +456,7 @@ public class OrderClothController extends BaseController {
             queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
                     .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WASHING.getCode()).or()
                     .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_WASH.getCode()).or()
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_HANG.getCode()).or()
                     .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_SEND.getCode()).or()
                     .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.SENDING.getCode()).or());
         }

+ 14 - 0
yiqi-admin/src/main/java/com/yiqi/admin/controller/settlement/SettlementFactoryStatisticsController.java

@@ -139,4 +139,18 @@ public class SettlementFactoryStatisticsController extends BaseController {
         ExcelUtil<SettlementFactoryStatisticsDto> util = new ExcelUtil<>(SettlementFactoryStatisticsDto.class);
         util.exportExcel(response, list, "工厂每日报表统计");
     }
+
+    /**
+     * 同步每日数据
+     */
+    @GetMapping("/sync")
+    public AjaxResult orderSync() {
+        Date queryDate = DateUtils.getNowDate();
+        Long storeId = getStoreId();
+        if (storeId != null) {
+        } else {
+            settlementFactoryStatisticsService.generateDayStatistics(queryDate);
+        }
+        return AjaxResult.success();
+    }
 }

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

@@ -197,6 +197,46 @@ public class SysDataGroupController extends BaseController {
         return success(objectList);
     }
 
+    /**
+     * 查询组合数据列表
+     */
+    @GetMapping("/data/selectByKey")
+    @ApiOperation(value = "查询组合数据结果(下拉筛选)")
+    public AjaxResult dataListByKey(String key) {
+        SysDataGroup sysDataGroup = sysDataGroupService.selectSysDataGroupByKey(key);
+        List<SysDataGroupInfo> list = sysDataGroupInfoService.getDataList(sysDataGroup.getId(), 1);
+        List<DataGroupFiled> dataGroupFileds = JSONUtil.toList(JSONUtil.parseArray(sysDataGroup.getFields()), DataGroupFiled.class);
+        Map<String, DataGroupRules> rulesMap = new HashMap<>();
+        for (DataGroupFiled dataGroupFiled : dataGroupFileds) {
+            DataGroupRules dataGroupHeader = DataGroupRules.create(dataGroupFiled.getType(), dataGroupFiled.getTitle(), dataGroupFiled.getName(), dataGroupFiled.getParam(), null);
+            rulesMap.put(dataGroupHeader.getField(), dataGroupHeader);
+        }
+        List<Map<String, Object>> objectList = new ArrayList<>();
+        for (SysDataGroupInfo sysDataGroupInfo : list) {
+            JSONObject jsonObject = JSONUtil.parseObj(sysDataGroupInfo.getValue());
+            Map<String, Object> map = new HashMap<>();
+            for (DataGroupFiled dataGroupFiled : dataGroupFileds) {
+                if (jsonObject.get(dataGroupFiled.getTitle()) != null) {
+                    if (dataGroupFiled.getType().equals("input") || dataGroupFiled.getType().equals("textarea")) {
+                        map.put(dataGroupFiled.getTitle(), jsonObject.get(dataGroupFiled.getTitle()));
+                    } else if (dataGroupFiled.getType().equals("radio") || dataGroupFiled.getType().equals("select")) {
+                        map.put(dataGroupFiled.getTitle(), DataGroupRules.getSigleOptionValue(jsonObject.get(dataGroupFiled.getTitle()).toString(), dataGroupFiled.getParam()));
+                    } else if (dataGroupFiled.getType().equals("checkbox")) {
+                        map.put(dataGroupFiled.getTitle(), DataGroupRules.getMuliteOptionValue(jsonObject.get(dataGroupFiled.getTitle()).toString(), dataGroupFiled.getParam()));
+                    } else if (dataGroupFiled.getType().equals("upload")) {
+                        map.put(dataGroupFiled.getTitle(), jsonObject.get(dataGroupFiled.getTitle()));
+                    }
+                }
+            }
+            map.put("sort", sysDataGroupInfo.getSort());
+            map.put("id", sysDataGroupInfo.getId());
+            map.put("status", sysDataGroupInfo.getStatus());
+            map.put("createTime", sysDataGroupInfo.getCreateTime());
+            objectList.add(map);
+        }
+        return success(objectList);
+    }
+
     /**
      * 查询组合数据列表
      */
@@ -345,4 +385,5 @@ public class SysDataGroupController extends BaseController {
         return toAjax(sysDataGroupService.deleteSysDataGroupByIds(ids));
     }
 
+
 }

+ 4 - 4
yiqi-admin/src/main/resources/application-dev.yml

@@ -61,13 +61,13 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: 118.89.198.102
+    host: 139.224.65.227
     # 端口,默认为6379
-    port: 46379
+    port: 6379
     # 数据库索引
-    database: 11
+    database: 2
     # 密码
-    password: yingdiandian2015
+    password: douya%2024
     # 连接超时时间
     timeout: 10s
     lettuce:

+ 2 - 0
yiqi-admin/src/main/resources/application-prod.yml

@@ -1,3 +1,5 @@
+ruoyi:
+  env: prod
 spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource

+ 29 - 3
yiqi-api/src/main/java/com/yiqi/api/controller/WeAppCouponItemController.java

@@ -4,12 +4,13 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.yiqi.app.domain.AppCouponItem;
-import com.yiqi.app.domain.AppCouponTypeApplyCloth;
+import com.yiqi.activity.domain.vo.weapp.WeAppActivityCouponQueryVO;
+import com.yiqi.app.domain.*;
 import com.yiqi.app.domain.dto.AppCouponItemQueryByAppUserIdDTO;
 import com.yiqi.app.domain.dto.weapp.WeAppCouponItemQueryDTO;
 import com.yiqi.app.domain.vo.AppCouponItemVO;
 import com.yiqi.app.domain.vo.AppCouponTypeApplyClothVO;
+import com.yiqi.app.domain.vo.AppCouponTypeVO;
 import com.yiqi.app.domain.vo.weapp.AppCouponItemListVO;
 import com.yiqi.app.service.IAppCouponItemService;
 import com.yiqi.app.service.IAppCouponTypeApplyClothService;
@@ -19,6 +20,8 @@ import com.yiqi.common.core.controller.BaseController;
 import com.yiqi.common.core.domain.AuthHolder;
 import com.yiqi.common.core.domain.R;
 import com.yiqi.common.enums.DeleteStatus;
+import com.yiqi.common.enums.SourceType;
+import com.yiqi.common.enums.StatusType;
 import com.yiqi.common.enums.SysBoolType;
 import com.yiqi.common.exception.ServiceException;
 import com.yiqi.common.utils.DateUtils;
@@ -38,8 +41,11 @@ import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
+import static com.yiqi.common.utils.DateUtils.YYYY_MM_DD;
+
 @Api(tags = "优惠券")
 @RestController
 @RequestMapping(value = UrlConstants.wxappApi + "/coupon")
@@ -53,12 +59,13 @@ public class WeAppCouponItemController extends BaseController {
     private IClothItemService clothItemService;
     @Autowired
     private ISysOrgService sysOrgService;
+    @Autowired
+    private IAppCouponTypeService appCouponTypeService;
 
     @ApiOperation("获取我的优惠券列表")
     @PostMapping(value = "findPage")
     public R<List<AppCouponItemListVO>> findPage(@RequestBody @Valid WeAppCouponItemQueryDTO weAppCouponItemQueryDTO) throws Exception {
         LambdaQueryWrapper<AppCouponItem> queryWrapper = new QueryWrapper<AppCouponItem>().lambda().eq(AppCouponItem::getAppUserId, AuthHolder.userId());
-
         if (!StringUtils.isEmpty(weAppCouponItemQueryDTO.getCouponStatus())) {
             switch (weAppCouponItemQueryDTO.getCouponStatus()) {
                 case "0"://未使用
@@ -160,4 +167,23 @@ public class WeAppCouponItemController extends BaseController {
         }
         return R.ok(clothItemService.list(new QueryWrapper<ClothItem>().lambda().in(ClothItem::getId, clothIds)));
     }
+
+
+    /**
+     * 领券中心
+     */
+    @PostMapping("/receive/list")
+    @ApiOperation(value = "领券中心")
+    public R<List<AppCouponType>> receiveCouponList() {
+        startPage();
+        List<AppCouponType> list = appCouponTypeService.list(new QueryWrapper<AppCouponType>().lambda()
+                .eq(AppCouponType::getStatus, StatusType.OK.getCode())
+                .eq(AppCouponType::getSendWay, 1)
+                .eq(AppCouponType::getDelFlag, DeleteStatus.OK.getCode())
+                .ge(AppCouponType::getEndDate, DateUtils.getNowDate(YYYY_MM_DD)));
+        if (CollUtil.isEmpty(list)){
+            return R.ok();
+        }
+        return R.ok();
+    }
 }

+ 3 - 0
yiqi-api/src/main/java/com/yiqi/api/controller/activity/WeAppActivityCouponController.java

@@ -49,6 +49,9 @@ public class WeAppActivityCouponController extends BaseController {
     private IOrderActivityService orderActivityService;
     @Autowired
     private IAppUserService appUserService;
+
+
+
     /**
      * 查询注册送券活动列表
      */

+ 147 - 28
yiqi-api/src/main/java/com/yiqi/api/controller/order/WeAppOrderClothController.java

@@ -100,21 +100,38 @@ public class WeAppOrderClothController {
                                 .eq(OrderCloth::getTakeClothWay, TakeOrSendClothWay.DELIVERY.getCode())
                                 .or()
                                 .eq(OrderCloth::getSendClothWay, TakeOrSendClothWay.DELIVERY.getCode())
-//                        .or()
-//                        .eq(OrderCloth::getOrderStatus,ClothOrderStatusType.HAS_WASH.getCode())
-                )
-                .and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                );
+        if (StringUtils.isNotEmpty(weAppOrderClothAppointmentQueryDTO.getOrderStatus())) {
+            //带上门
+            if ("1".equals(weAppOrderClothAppointmentQueryDTO.getOrderStatus())) {
+                queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
                         .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.APPOINTMENT.getCode())
                         .or()
                         .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_DOOR.getCode())
-                        .or()
+                );
+            }
+            //已上门
+            if ("2".equals(weAppOrderClothAppointmentQueryDTO.getOrderStatus())) {
+                queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
                         .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_TO_DOOR.getCode())
                         .or()
+                        .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_TAKING.getCode())
+                );
+            }
+            //已上门
+            if ("8".equals(weAppOrderClothAppointmentQueryDTO.getOrderStatus())) {
+                queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                        .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_HANG.getCode())
+                );
+            }
+            //已上门
+            if ("9".equals(weAppOrderClothAppointmentQueryDTO.getOrderStatus())) {
+                queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
                         .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_SEND.getCode())
                         .or()
-                        .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.SENDING.getCode()));
-        if (StringUtils.isNotEmpty(weAppOrderClothAppointmentQueryDTO.getOrderStatus())) {
-            queryWrapper.eq(OrderCloth::getOrderStatus, weAppOrderClothAppointmentQueryDTO.getOrderStatus());
+                        .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.SENDING.getCode())
+                );
+            }
         }
         queryWrapper.orderByDesc(BaseEntity::getCreateTime);
         List<OrderCloth> orderCloths = orderClothService.page(page
@@ -206,12 +223,17 @@ public class WeAppOrderClothController {
         return R.ok();
     }
 
+    /**
+     *
+     * @param orderClothAppQueryDTO
+     * @return  orderStatus 代付款 2、服务中-3、带取衣 6、待送达 8、 已完成 12
+     * @throws Exception
+     */
     @ApiOperation("查询洗衣订单列表")
     @PostMapping(value = "findPage")
     public R<List<OrderClothVO>> findPage(@RequestBody @Valid OrderClothAppQueryDTO orderClothAppQueryDTO) throws Exception {
         LambdaQueryWrapper<OrderCloth> queryWrapper = new QueryWrapper<OrderCloth>().lambda()
                 .eq(OrderCloth::getAppUserId, AuthHolder.userId())
-                .ne(OrderCloth::getRefundStatus, OrderRefundStatus.REFUND_SUCCESS.getCode())
                 .eq(OrderCloth::getDelFlag, DeleteStatus.OK.getCode());
         if (orderClothAppQueryDTO.getStartDate() != null) {
             queryWrapper.ge(BaseEntity::getCreateTime, orderClothAppQueryDTO.getStartDate());
@@ -219,43 +241,139 @@ public class WeAppOrderClothController {
         if (orderClothAppQueryDTO.getEndDate() != null) {
             queryWrapper.lt(BaseEntity::getCreateTime, DateUtils.addDays(orderClothAppQueryDTO.getEndDate(), 1));
         }
-        if ("0".equals(orderClothAppQueryDTO.getOrderStatus())
-                || "1".equals(orderClothAppQueryDTO.getOrderStatus())) {
-            queryWrapper.eq(OrderCloth::getOrderStatus, ClothOrderStatusType.APPOINTMENT.getCode());
-        }
+        //2=待付款,3=服务中,4=待配送,5=配送中,6=待取衣(到店自取),7=待评价,8=已完成,100=已取消
         if ("2".equals(orderClothAppQueryDTO.getOrderStatus())) {
             queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.APPOINTMENT.getCode())
+                    .or()
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_DOOR.getCode())
+                    .or()
                     .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_TO_DOOR.getCode())
                     .or()
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_TAKING.getCode()));
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_TAKING.getCode())
+                    .or()
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_PAY.getCode())
+            );
         }
         if ("3".equals(orderClothAppQueryDTO.getOrderStatus())) {
             queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_PAY.getCode())
-                    .or()
                     .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAIT_FACTORY.getCode())
                     .or()
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WASHING.getCode()));
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WASHING.getCode())
+                    .or()
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_WASH.getCode())
+            );
+
         }
-        if ("4".equals(orderClothAppQueryDTO.getOrderStatus())) {
+        if ("6".equals(orderClothAppQueryDTO.getOrderStatus())) {
             queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_WASH.getCode())
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_HANG.getCode()));
+        }
+        if ("8".equals(orderClothAppQueryDTO.getOrderStatus())) {
+            queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_SEND.getCode())
                     .or()
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_DOOR.getCode()));
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.SENDING.getCode()));
         }
-        if ("5".equals(orderClothAppQueryDTO.getOrderStatus())) {
-            queryWrapper.eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_SEND.getCode());
+        if ("12".equals(orderClothAppQueryDTO.getOrderStatus())) {
+            queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_COMMENT.getCode())
+                    .or()
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.FINISH.getCode()));
         }
-        if ("6".equals(orderClothAppQueryDTO.getOrderStatus())) {
-            queryWrapper.eq(OrderCloth::getOrderStatus, ClothOrderStatusType.HAS_WASH.getCode());
+
+        queryWrapper.orderByDesc(BaseEntity::getCreateTime);
+        List<OrderCloth> orderCloths = orderClothService.page(new Page<>(orderClothAppQueryDTO.getPageNum()
+                , orderClothAppQueryDTO.getPageSize(), false), queryWrapper).getRecords();
+        List<OrderClothVO> orderClothVOS = new ArrayList<>();
+        if (orderCloths.size() == 0) {
+            return R.ok(orderClothVOS);
         }
-        if ("7".equals(orderClothAppQueryDTO.getOrderStatus())) {
-            queryWrapper.eq(OrderCloth::getOrderStatus, ClothOrderStatusType.SENDING.getCode());
+
+        Map<Long, AppUser> takeClothUserMap = new HashMap<>();
+        if (orderCloths.stream().filter(orderCloth -> orderCloth.getTakeClothAppUserId() != null)
+                .map(OrderCloth::getAppUserId).collect(Collectors.toSet()).size() > 0) {
+            takeClothUserMap = appUserService.list(new QueryWrapper<AppUser>().lambda()
+                            .in(AppUser::getId, orderCloths.stream().filter(orderCloth -> orderCloth.getTakeClothAppUserId() != null)
+                                    .map(OrderCloth::getAppUserId).collect(Collectors.toSet())))
+                    .stream().collect(Collectors.toMap(AppUser::getId, AppUser -> AppUser));
         }
+
+        Map<Long, AppUser> sendClothUserMap = new HashMap<>();
+        if (orderCloths.stream().filter(orderCloth -> orderCloth.getSendClothAppUserId() != null)
+                .map(OrderCloth::getAppUserId).collect(Collectors.toSet()).size() > 0) {
+            sendClothUserMap = appUserService.list(new QueryWrapper<AppUser>().lambda()
+                            .in(AppUser::getId, orderCloths.stream().filter(orderCloth -> orderCloth.getSendClothAppUserId() != null)
+                                    .map(OrderCloth::getAppUserId).collect(Collectors.toSet())))
+                    .stream().collect(Collectors.toMap(AppUser::getId, AppUser -> AppUser));
+        }
+        Map<Long, SysOrg> storeOrgMap = new HashMap<>();
+        Map<Long, SysOrg> factoryOrgMap = new HashMap<>();
+        if (orderCloths.stream().filter(orderCloth -> SourceType.STORE.getCode()
+                .equals(orderCloth.getSourceType())).collect(Collectors.toList()).size() > 0) {
+            storeOrgMap = sysOrgService.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSourceType
+                            , SourceType.STORE.getCode()).in(SysOrg::getId, orderCloths.stream()
+                            .map(OrderCloth::getOrgId).collect(Collectors.toSet()))).stream()
+                    .collect(Collectors.toMap(SysOrg::getId, SysOrg -> SysOrg));
+        }
+        if (orderCloths.stream().filter(orderCloth -> SourceType.FACTORY.getCode()
+                .equals(orderCloth.getSourceType())).collect(Collectors.toList()).size() > 0) {
+            factoryOrgMap = sysOrgService.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSourceType
+                            , SourceType.FACTORY.getCode()).in(SysOrg::getId, orderCloths.stream()
+                            .map(OrderCloth::getOrgId).collect(Collectors.toSet()))).stream()
+                    .collect(Collectors.toMap(SysOrg::getId, SysOrg -> SysOrg));
+        }
+        for (OrderCloth record : orderCloths) {
+            OrderClothVO orderClothVO = new OrderClothVO();
+            BeanUtils.copyProperties(record, orderClothVO);
+            if (record.getTakeClothAppUserId() != null && takeClothUserMap.containsKey(record.getTakeClothAppUserId())) {
+                AppUserVO appUserVO = new AppUserVO();
+                BeanUtils.copyProperties(takeClothUserMap.get(record.getTakeClothAppUserId()), appUserVO);
+                orderClothVO.setTakeClothUserVO(appUserVO);
+            }
+            if (record.getSendClothAppUserId() != null && sendClothUserMap.containsKey(record.getSendClothAppUserId())) {
+                AppUserVO appUserVO = new AppUserVO();
+                BeanUtils.copyProperties(sendClothUserMap.get(record.getSendClothAppUserId()), appUserVO);
+                orderClothVO.setSendClothUserVO(appUserVO);
+            }
+            if (SourceType.STORE.getCode().equals(orderClothVO.getSourceType())) {
+                orderClothVO.setSysOrg(storeOrgMap.get(orderClothVO.getOrgId()));
+            } else if (SourceType.FACTORY.getCode().equals(orderClothVO.getSourceType())) {
+                orderClothVO.setSysOrg(factoryOrgMap.get(orderClothVO.getOrgId()));
+            }
+            orderClothVOS.add(orderClothVO);
+        }
+        return R.ok(orderClothVOS);
+    }
+
+/**
+ * 查询洗好送回订单列表
+ * orderStatus : 8 : 已到店带取衣  9:待送衣   10:送衣中
+ */
+    @ApiOperation("查询洗好送回订单列表")
+    @PostMapping(value = "findSendPage")
+    public R<List<OrderClothVO>> findSendPage(@RequestBody @Valid OrderClothAppQueryDTO orderClothAppQueryDTO) throws Exception {
+        LambdaQueryWrapper<OrderCloth> queryWrapper = new QueryWrapper<OrderCloth>().lambda()
+                .eq(OrderCloth::getAppUserId, AuthHolder.userId())
+                .eq(OrderCloth::getDelFlag, DeleteStatus.OK.getCode());
+        if (orderClothAppQueryDTO.getStartDate() != null) {
+            queryWrapper.ge(BaseEntity::getCreateTime, orderClothAppQueryDTO.getStartDate());
+        }
+        if (orderClothAppQueryDTO.getEndDate() != null) {
+            queryWrapper.lt(BaseEntity::getCreateTime, DateUtils.addDays(orderClothAppQueryDTO.getEndDate(), 1));
+        }
+        //0=待上门,1=已上门、带门店定价,2=待付款,3=服务中,4=待配送,5=配送中,6=待取衣(到店自取),7=待评价,8=已完成,100=已取消
         if ("8".equals(orderClothAppQueryDTO.getOrderStatus())) {
             queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_COMMENT.getCode()).or()
-                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.FINISH.getCode()));
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_FOR_HANG.getCode()));
+        }
+        if ("9".equals(orderClothAppQueryDTO.getOrderStatus())) {
+            queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.WAITING_TO_SEND.getCode()));
+        }
+        if ("10".equals(orderClothAppQueryDTO.getOrderStatus())) {
+            queryWrapper.and(orderClothLambdaQueryWrapper -> orderClothLambdaQueryWrapper
+                    .eq(OrderCloth::getOrderStatus, ClothOrderStatusType.SENDING.getCode()));
         }
 
         queryWrapper.orderByDesc(BaseEntity::getCreateTime);
@@ -322,6 +440,7 @@ public class WeAppOrderClothController {
         return R.ok(orderClothVOS);
     }
 
+
     @ApiOperation("查询洗衣订单明细")
     @GetMapping(value = "getInfoById")
     public R<OrderClothVO> getInfoById(@RequestParam @ApiParam("订单ID") Long orderId) throws Exception {

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

@@ -122,6 +122,7 @@ public class WeAppOrderRechargeController {
     @PostMapping(value = "/getUseRecordsByCardId")
     @ApiOperation(value = "按充值卡获取消费记录明细")
     public R<WeAppCardsUseRecordsVO> getUseRecordsByCardId(@RequestBody WeAppCardRecordByCardDTO weAppCardRecordByCardDTO) {
+        weAppCardRecordByCardDTO.setAppUserId(AuthHolder.userId());
         return R.ok(rechargePasswordCardService.getUseRecordsByCardId(weAppCardRecordByCardDTO));
     }
 

+ 4 - 4
yiqi-api/src/main/resources/application-dev.yml

@@ -61,13 +61,13 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: 118.89.198.102
+    host: 139.224.65.227
     # 端口,默认为6379
-    port: 46379
+    port: 6379
     # 数据库索引
-    database: 11
+    database: 2
     # 密码
-    password: yingdiandian2015
+    password: douya%2024
     # 连接超时时间
     timeout: 10s
     lettuce:

+ 1 - 0
yiqi-common/src/main/java/com/yiqi/common/config/WxPayConfigs.java

@@ -28,6 +28,7 @@ import java.security.PrivateKey;
  * Created by liuyangkly on 15/6/27.
  */
 public class WxPayConfigs {
+
     public static final String DOMAIN_API = "https://api.mch.weixin.qq.com";
 
     //app下单

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

@@ -9,8 +9,8 @@ public enum OrderRefundStatus {
     REFUNDING("2", "退款中"),
     REFUND_SUCCESS("3", "退款成功"),
     ERROR("-1", "退款异常"),
-    REFUND_REFUSE("8", "退款驳回"),
-    REFUND_CANCEL("9", "退款取消"),
+    REFUND_REFUSE("-2", "退款驳回"),
+    REFUND_CANCEL("-3", "退款取消"),
     ;
 
     private final String code;

+ 0 - 1
yiqi-common/src/main/java/com/yiqi/core/domain/dto/weapp/WeAppGoodsInfoQueryDTO.java

@@ -11,7 +11,6 @@ public class WeAppGoodsInfoQueryDTO extends PageVO {
     /**
      * 商品类型
      */
-    @NotEmpty(message = "商品类型不能为空")
     @ApiModelProperty("商品类型,(0=普通商品,2=生活服务,3=汽车美容)")
     private String goodsType;
 

+ 43 - 39
yiqi-common/src/main/java/com/yiqi/order/domain/dto/OrderGoodsOutGoodsDTO.java

@@ -30,43 +30,47 @@ public class OrderGoodsOutGoodsDTO {
     @NotEmpty(message = "快递公司名称不能为空")
     private String deliveryCompany;
 
-    @ApiModelProperty("快递客户编码或者现付编码")
-    @NotEmpty(message = "快递客户编码不能为空")
-    private String bizId;
-
-    @ApiModelProperty("服务类型")
-    @NotNull(message = "服务类型不能为空")
-    private Integer serviceType;
-
-    @ApiModelProperty("服务类型名称")
-    @NotEmpty(message = "服务类型名称不能为空")
-    private String serviceName;
-
-    @ApiModelProperty("预期的上门揽件时间,必须当前时间+1小时以上")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
-    @NotNull(message = "揽件时间不能为空")
-    private Date expectTime;
-
-    @ApiModelProperty("包裹数量, 默认为1")
-    private Integer count = 1;
-
-    @ApiModelProperty("货物总重量,比如1.2,单位是千克(kg)")
-    @NotNull(message = "货物总重量不能为空")
-    private Integer weight;
-
-    @ApiModelProperty("货物长度,比如20.0,单位是厘米(cm)")
-    @NotNull(message = "货物长度不能为空")
-    private Integer spaceLength;
-
-    @ApiModelProperty("货物宽度,比如15.0,单位是厘米(cm)")
-    @NotNull(message = "货物宽度不能为空")
-    private Integer spaceWidth;
-
-    @ApiModelProperty("货物高度,比如10.0,单位是厘米(cm)")
-    @NotNull(message = "货物高度不能为空")
-    private Integer spaceHeight;
-
-    @ApiModelProperty("快递备注信息,比如\"易碎物品\",不超过1024字节")
-    @NotEmpty(message = "快递备注不能为空")
-    private String customRemark;
+    @ApiModelProperty("快递编号")
+    @NotEmpty(message = "快递编号")
+    private String deliveryNo;
+
+//    @ApiModelProperty("快递客户编码或者现付编码")
+//    @NotEmpty(message = "快递客户编码不能为空")
+//    private String bizId;
+//
+//    @ApiModelProperty("服务类型")
+//    @NotNull(message = "服务类型不能为空")
+//    private Integer serviceType;
+//
+//    @ApiModelProperty("服务类型名称")
+//    @NotEmpty(message = "服务类型名称不能为空")
+//    private String serviceName;
+//
+//    @ApiModelProperty("预期的上门揽件时间,必须当前时间+1小时以上")
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+//    @NotNull(message = "揽件时间不能为空")
+//    private Date expectTime;
+//
+//    @ApiModelProperty("包裹数量, 默认为1")
+//    private Integer count = 1;
+//
+//    @ApiModelProperty("货物总重量,比如1.2,单位是千克(kg)")
+//    @NotNull(message = "货物总重量不能为空")
+//    private Integer weight;
+//
+//    @ApiModelProperty("货物长度,比如20.0,单位是厘米(cm)")
+//    @NotNull(message = "货物长度不能为空")
+//    private Integer spaceLength;
+//
+//    @ApiModelProperty("货物宽度,比如15.0,单位是厘米(cm)")
+//    @NotNull(message = "货物宽度不能为空")
+//    private Integer spaceWidth;
+//
+//    @ApiModelProperty("货物高度,比如10.0,单位是厘米(cm)")
+//    @NotNull(message = "货物高度不能为空")
+//    private Integer spaceHeight;
+//
+//    @ApiModelProperty("快递备注信息,比如\"易碎物品\",不超过1024字节")
+//    @NotEmpty(message = "快递备注不能为空")
+//    private String customRemark;
 }

+ 4 - 4
yiqi-common/src/main/java/com/yiqi/order/domain/dto/OrderThirdDeliveryAddDTO.java

@@ -91,8 +91,8 @@ public class OrderThirdDeliveryAddDTO {
         orderThirdDeliveryAddDTO.setGoodsList(goodsList);
 
         ExpressDeliveryVO.ServiceType serviceType = new ExpressDeliveryVO.ServiceType();
-        serviceType.setServiceName(orderGoodsOutGoodsDTO.getServiceName());
-        serviceType.setServiceType(orderGoodsOutGoodsDTO.getServiceType());
+//        serviceType.setServiceName(orderGoodsOutGoodsDTO.getServiceName());
+//        serviceType.setServiceType(orderGoodsOutGoodsDTO.getServiceType());
         orderThirdDeliveryAddDTO.setServiceType(serviceType);
         return orderThirdDeliveryAddDTO;
     }
@@ -115,8 +115,8 @@ public class OrderThirdDeliveryAddDTO {
         }
         orderThirdDeliveryAddDTO.setGoodsList(goodsList);
         ExpressDeliveryVO.ServiceType serviceType = new ExpressDeliveryVO.ServiceType();
-        serviceType.setServiceName(orderGoodsOutGoodsDTO.getServiceName());
-        serviceType.setServiceType(orderGoodsOutGoodsDTO.getServiceType());
+//        serviceType.setServiceName(orderGoodsOutGoodsDTO.getServiceName());
+//        serviceType.setServiceType(orderGoodsOutGoodsDTO.getServiceType());
         orderThirdDeliveryAddDTO.setServiceType(serviceType);
         return orderThirdDeliveryAddDTO;
     }

+ 4 - 1
yiqi-common/src/main/java/com/yiqi/order/domain/dto/RechargeCardPayDTO.java

@@ -29,6 +29,8 @@ public class RechargeCardPayDTO {
     @NotNull(message = "订单编号必传")
     private String orderNo;
 
+    private Long orderId;
+
     @ApiModelProperty("订单金额")
     @NotNull(message = "订单金额必传")
     private BigDecimal payAmount;
@@ -45,8 +47,9 @@ public class RechargeCardPayDTO {
     @NotEmpty(message = "购买商品类型 1:洗衣 2:普通商品 3:生活服务 4:汽车美容")
     private String buyGoodsType;
 
-    public RechargeCardPayDTO(Long appUserId, String sourceType, Long orgId, String orderNo, BigDecimal payAmount, String buyGoodsType) {
+    public RechargeCardPayDTO(Long appUserId, Long orderId, String sourceType, Long orgId, String orderNo, BigDecimal payAmount, String buyGoodsType) {
         this.sourceType = sourceType;
+        this.orderId = orderId;
         this.orgId = orgId;
         this.appUserId = appUserId;
         this.orderNo = orderNo;

+ 1 - 6
yiqi-common/src/main/java/com/yiqi/order/domain/dto/weapp/OrderClothAppQueryDTO.java

@@ -19,12 +19,7 @@ public class OrderClothAppQueryDTO extends PageVO {
     @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
     private Date endDate;
 
-    /**
-     * 订单状态(0=预约待取,1=已取货、待门店定价,2=已定价、待支付,3=支付确认中,4=已支付、待工厂取货,5=工厂已取货、洗衣中,6=洗衣完成、待送店
-     * ,7=已到店、待送衣或待自取,8=送衣中,9=待评价,10=已完成,100=已取消)
-     * 订单分类查询(0=待上门,1=已上门、带门店定价,2=待付款,3=服务中,4=待配送,5=配送中,6=待取衣(到店自取),8=待评价,9=已完成,100=已取消)
-     */
-    @ApiModelProperty("订单分类查询(0=待上门,1=已上门、带门店定价,2=待付款,3=服务中,4=待配送,5=配送中,6=待取衣(到店自取),7=待评价,8=已完成,100=已取消)")
+    @ApiModelProperty("订单分类查询")
     private String orderStatus;
 
 }

+ 0 - 5
yiqi-common/src/main/java/com/yiqi/order/service/IOrderRechargeService.java

@@ -83,11 +83,6 @@ public interface IOrderRechargeService extends IService<OrderRecharge> {
      * @return
      */
     public OrderRecharge buildOrderRechargeByCardPassword(RechargePasswordCard rechargePasswordCard, OrderRechargeCreateDTO orderRechargeCreateDTO);
-    /**
-     *  分段支付完成, 创建密码卡, 更新订单信息
-     * @param orderRecharge  订单
-     */
-    public void creatPassWordCard(OrderRecharge orderRecharge, OrderRechargeInstalment orderRechargeInstalment, OrderPayResultVO orderPayResultVO);
 
     /**
      *  支付完成后, 创建密码卡, 更新订单信息

+ 4 - 0
yiqi-common/src/main/java/com/yiqi/recharge/domain/dto/BillMstrOrderDTO.java

@@ -32,6 +32,10 @@ public class BillMstrOrderDTO {
      */
     private String payType;
 
+    /**
+     * 订单ID
+     */
+    private Long orderId;
 
     /**
      * 账单标题

+ 8 - 1
yiqi-common/src/main/java/com/yiqi/recharge/domain/dto/weapp/WeAppCardRecordByCardDTO.java

@@ -11,7 +11,14 @@ public class WeAppCardRecordByCardDTO extends PageVO {
 
     /** 充值卡id */
     @ApiModelProperty("充值卡id")
-
     private Long rechargePasswordCardId;
 
+    /** 充值卡id */
+    @ApiModelProperty("充值卡No")
+    private String rechargePasswordCardNo;
+
+    /** 充值卡id */
+    @ApiModelProperty("用户id")
+    private Long appUserId;
+
 }

+ 3 - 1
yiqi-common/src/main/java/com/yiqi/recharge/domain/vo/weapp/WeAppCardsUseRecordsVO.java

@@ -16,9 +16,11 @@ import java.util.List;
 public class WeAppCardsUseRecordsVO {
 
     @ApiModelProperty("充值门店")
-
     private Long rechargeStoreId;
 
+    @ApiModelProperty("充值卡号")
+    private String cardNo;
+
     @ApiModelProperty("充值门店名称")
     private String rechargeStoreName;
 

+ 8 - 7
yiqi-common/src/main/java/com/yiqi/system/service/ISysDataGroupService.java

@@ -13,7 +13,6 @@ import com.yiqi.system.domain.SysDataGroup;
  */
 public interface ISysDataGroupService extends IService<SysDataGroup> {
 
-    //<editor-folder desc="基础函数">
     /**
      * 查询组合数据
      *
@@ -22,6 +21,14 @@ public interface ISysDataGroupService extends IService<SysDataGroup> {
      */
     public SysDataGroup selectSysDataGroupById(Integer id);
 
+    /**
+     * 查询组合数据
+     *
+     * @param id 组合数据主键
+     * @return 组合数据
+     */
+    public SysDataGroup selectSysDataGroupByKey(String key);
+
     /**
      * 查询组合数据列表
      *
@@ -62,10 +69,4 @@ public interface ISysDataGroupService extends IService<SysDataGroup> {
      */
     public int deleteSysDataGroupById(Integer id);
 
-    /**
-     * 根据分组关键词查询分组信息
-     * @param groupKey
-     * @return
-     */
-    SysDataGroup selectSysDataGroupByKey(String groupKey);
 }

+ 9 - 11
yiqi-core/src/main/java/com/yiqi/app/service/impl/AppUserBillMstrServiceImpl.java

@@ -52,7 +52,7 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         appUserBillMstr.buildCreateData();
         appUserBillMstr.setAppUserId(billMstrOrderDTO.getAppUserId());
         appUserBillMstr.setBillType(OrderBillType.pay.getCode());
-        appUserBillMstr.setPayTotalAmount(billMstrOrderDTO.getPayTotalAmount());
+        appUserBillMstr.setPayTotalAmount(billMstrOrderDTO.getPayTotalAmount().abs());
         appUserBillMstr.setPayType(billMstrOrderDTO.getPayType());
         appUserBillMstr.setRechargePayAmount(billMstrOrderDTO.getRechargePayAmount());
         appUserBillMstr.setGivePayAmount(billMstrOrderDTO.getGivePayAmount());
@@ -60,6 +60,7 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         appUserBillMstr.setIsRefund(SysBoolType.NO.getCode());
         appUserBillMstr.setOrderNo(billMstrOrderDTO.getOrderNo());
         appUserBillMstr.setOrderType(billMstrOrderDTO.getOrderType());
+        appUserBillMstr.setOrderId(billMstrOrderDTO.getOrderId());
         appUserBillMstr.setSourceType(billMstrOrderDTO.getSourceType());
         appUserBillMstr.setOrgId(billMstrOrderDTO.getOrgId());
         appUserBillMstr.setCardStoreId(billMstrOrderDTO.getUseBindStoreId());
@@ -67,11 +68,11 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         appUserBillMstr.setRechargeCardNo(billMstrOrderDTO.getRechargeCardNo());
         switch (EnumUtils.getEnumByType(billMstrOrderDTO.getOrderType(), OrderType.class)) {
             case cloth: {
-                appUserBillMstr.setTitle("洗衣单");
+                appUserBillMstr.setTitle("洗衣单");
                 break;
             }
             case goods: {
-                appUserBillMstr.setTitle("普通商品单");
+                appUserBillMstr.setTitle("普通商品单");
                 break;
             }
             case life: {
@@ -101,7 +102,7 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         appUserBillMstr.buildCreateData();
         appUserBillMstr.setAppUserId(billMstrOrderDTO.getAppUserId());
         appUserBillMstr.setBillType(OrderBillType.recharge.getCode());
-        appUserBillMstr.setPayTotalAmount(billMstrOrderDTO.getPayTotalAmount().negate());
+        appUserBillMstr.setPayTotalAmount(billMstrOrderDTO.getPayTotalAmount());
         appUserBillMstr.setRechargePayAmount(billMstrOrderDTO.getRechargePayAmount().negate());
         appUserBillMstr.setGivePayAmount(billMstrOrderDTO.getGivePayAmount().negate());
         appUserBillMstr.setPayType(billMstrOrderDTO.getPayType());
@@ -116,19 +117,19 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         appUserBillMstr.setContent(billMstrOrderDTO.getRemark());
         switch (EnumUtils.getEnumByType(billMstrOrderDTO.getOrderType(), OrderType.class)) {
             case cloth: {
-                appUserBillMstr.setTitle("洗衣订单退款");
+                appUserBillMstr.setTitle("洗衣退单");
                 break;
             }
             case goods: {
-                appUserBillMstr.setTitle("普通商品订单退款");
+                appUserBillMstr.setTitle("普通商品退单");
                 break;
             }
             case life: {
-                appUserBillMstr.setTitle("生活服务下单退款");
+                appUserBillMstr.setTitle("生活服务退单");
                 break;
             }
             case car: {
-                appUserBillMstr.setTitle("汽车美容下单退款");
+                appUserBillMstr.setTitle("汽车美容退单");
                 break;
             }
             case recharge: {
@@ -199,9 +200,6 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         return appUserBillMstr;
     }
 
-
-    //<editor-folder desc="基础函数">
-
     /**
      * 查询用户账单
      *

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

@@ -638,7 +638,7 @@ public class OrderClothServiceImpl extends ServiceImpl<OrderClothMapper, OrderCl
         //会员余额支付
         if (orderClothPayDTO.getPayType().equals(PayType.BALANCE.getCode())) {
             orderCloth.setPayType(PayType.BALANCE.getCode());
-            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderCloth.getAppUserId(), orderCloth.getSourceType(), orderCloth.getOrgId(), orderCloth.getOrderNo(), orderCloth.getPayAmount(), OrderType.cloth.getCode());
+            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderCloth.getAppUserId(), orderCloth.getId(), orderCloth.getSourceType(), orderCloth.getOrgId(), orderCloth.getOrderNo(), orderCloth.getPayAmount(), OrderType.cloth.getCode());
             rechargePasswordCardService.orderPayByBalance(rechargeCardPayDTO);
             paySuccess(orderCloth);
             return OrderPayResultVO.paySuccess(orderCloth.getOrderNo());

+ 16 - 20
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderGoodsServiceImpl.java

@@ -44,6 +44,7 @@ import com.yiqi.order.domain.dto.weapp.AppOrderGoodsRefundDTO;
 import com.yiqi.order.domain.vo.*;
 import com.yiqi.order.domain.vo.weapp.AppGoodsOrderInfoQueryVO;
 import com.yiqi.order.service.*;
+import com.yiqi.recharge.domain.dto.BillMstrOrderDTO;
 import com.yiqi.recharge.domain.dto.ConsumeOrderDTO;
 import com.yiqi.recharge.service.IRechargePasswordCardService;
 import org.springframework.beans.BeanUtils;
@@ -305,7 +306,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         }
         //会员余额支付
         if (orderGoods.getPayType().equals(PayType.BALANCE.getCode())) {
-            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), OrderType.goods.getCode());
+            RechargeCardPayDTO rechargeCardPayDTO = new RechargeCardPayDTO(orderGoods.getAppUserId(), orderGoods.getId(), orderGoods.getSourceType(), orderGoods.getOrgId(), orderGoods.getOrderNo(), orderGoods.getPayAmount(), OrderType.goods.getCode());
             rechargePasswordCardService.orderPayByBalance(rechargeCardPayDTO);
             this.handlePaySuccessUpdateOrderStatus(orderGoods.getOrderNo(), null);
             orderPayResultVO = OrderPayResultVO.paySuccess(orderGoods.getOrderNo());
@@ -493,20 +494,19 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         orderGoods.setOrderStatus(OrderGoodsStatusType.SENDING.getCode());
         orderGoods.setDeliveryCompany(orderGoodsOutGoodsDTO.getDeliveryCompany());
         orderGoods.setDeliveryId(orderGoodsOutGoodsDTO.getDeliveryId());
+        orderGoods.setDeliveryNo(orderGoodsOutGoodsDTO.getDeliveryNo());
         orderGoods.setSendTime(DateUtils.getNowDate());
         orderGoods.buildUpdateData();
-
-        AppUserInfoVO appUserInfo = appUserService.getAppUserInfoById(orderGoods.getAppUserId());
-        List<OrderGoodsItem> goodsItems = orderGoodsItemService.list(new QueryWrapper<OrderGoodsItem>().lambda()
-                .eq(OrderGoodsItem::getOrderNo, orderGoods.getOrderNo()));
-        List<Long> goodIdList = new ArrayList<>(goodsItems.stream().collect(Collectors.groupingBy(OrderGoodsItem::getGoodsId)).keySet());
-        List<GoodsInfo> goodsInfoList = goodsInfoService.list(new QueryWrapper<GoodsInfo>().lambda().in(GoodsInfo::getId, goodIdList));
-        // 生成快递订单
-        WxMaExpressOrderInfoResult result = thirdDeliveryService.addDeliveryOrder(OrderThirdDeliveryAddDTO.buildDeliveryOrderByGoodsOrder(orderGoods, orderGoodsOutGoodsDTO, goodsInfoList, appUserInfo));
-        if (result != null) {
-            orderGoods.setDeliveryNo(result.getWaybillId());
-        }
-
+//        AppUserInfoVO appUserInfo = appUserService.getAppUserInfoById(orderGoods.getAppUserId());
+//        List<OrderGoodsItem> goodsItems = orderGoodsItemService.list(new QueryWrapper<OrderGoodsItem>().lambda()
+//                .eq(OrderGoodsItem::getOrderNo, orderGoods.getOrderNo()));
+//        List<Long> goodIdList = new ArrayList<>(goodsItems.stream().collect(Collectors.groupingBy(OrderGoodsItem::getGoodsId)).keySet());
+//        List<GoodsInfo> goodsInfoList = goodsInfoService.list(new QueryWrapper<GoodsInfo>().lambda().in(GoodsInfo::getId, goodIdList));
+//        // 生成快递订单
+//        WxMaExpressOrderInfoResult result = thirdDeliveryService.addDeliveryOrder(OrderThirdDeliveryAddDTO.buildDeliveryOrderByGoodsOrder(orderGoods, orderGoodsOutGoodsDTO, goodsInfoList, appUserInfo));
+//        if (result != null) {
+//            orderGoods.setDeliveryNo(result.getWaybillId());
+//        }
         baseMapper.updateById(orderGoods);
         return 1;
     }
@@ -666,9 +666,7 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         if (orderGoods == null) {
             throw new GlobalException("订单不存在");
         }
-        if (orderGoods.getRefundStatus() != OrderRefundStatus.REFUNDING.getCode()
-                && orderGoods.getRefundStatus() != OrderRefundStatus.REFUND_APPLYING.getCode()
-                && orderGoods.getRefundStatus() != OrderRefundStatus.ERROR.getCode()) {//退款状态不正确,直接跳过
+        if (orderGoods.getRefundStatus().equals(OrderRefundStatus.REFUND_SUCCESS.getCode())) {//退款状态不正确,直接跳过
             return R.ok();
         }
 
@@ -687,8 +685,6 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         if (CollUtil.isNotEmpty(list)) {
             this.buildUpdateGoodsSales(list, Boolean.FALSE);
         }
-        //此处添加退款记录
-        appUserBillMstrService.save(appUserBillMstrService.buildBillMstr(ConsumeOrderDTO.buildOrderGoodsRefundData(orderGoods)));
         return null;
     }
 
@@ -847,8 +843,8 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
         if (!AuthHolder.userId().equals(orderGoods.getAppUserId())) {
             throw new ServiceException("当前登录人没有权限操作");
         }
-        // 更新订单状态
-        orderGoods.setRefundStatus(OrderRefundStatus.REFUND_CANCEL.getCode());
+        // 更新订单状态,不在退款
+        orderGoods.setRefundStatus(OrderRefundStatus.OK.getCode());
         orderGoods.buildUpdateData();
         return baseMapper.updateById(orderGoods);
     }

+ 0 - 54
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderRechargeServiceImpl.java

@@ -918,60 +918,6 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
         return orderRecharge;
     }
 
-    /**
-     * 校验是否全部支付完成
-     *
-     * @param orderRecharge 主表信息
-     * @return
-     */
-    public Boolean checkIsAllPay(OrderRecharge orderRecharge) {
-        // 已支付 总和
-        BigDecimal totalPayAmount = orderRechargeInstalmentService.getTotalPayAmount(orderRecharge.getOrderNo());
-        return orderRecharge.getPayAmount().compareTo(totalPayAmount) == 0;
-    }
-
-    /**
-     * 支付完成后, 创建密码卡, 更新订单信息
-     *
-     * @param orderRecharge 订单编号
-     */
-    @Override
-    public void creatPassWordCard(OrderRecharge orderRecharge, OrderRechargeInstalment orderRechargeInstalment, OrderPayResultVO orderPayResultVO) {
-        Date date = DateUtils.getNowDate();
-        orderRechargeInstalment.setOrderStatus(OrderRechargeStatus.YES_PAY.getCode());
-        orderRechargeInstalment.setPayTime(date);
-        orderRechargeInstalmentService.updateById(orderRechargeInstalment);
-
-        orderPayResultVO.setOrderNo(orderRechargeInstalment.getOrderNo());
-        // 校验是否全部支付完成
-        // 更新订单信息
-        if (orderRechargeInstalment.getPayType().equals(PayType.CASH.getCode())) {
-            orderRecharge.setCashPayAmount(CurrencyUtil.add(orderRecharge.getCashPayAmount(), orderRechargeInstalment.getPayAmount()));
-        } else if (orderRechargeInstalment.getPayType().equals(PayType.WECHAT.getCode())) {
-            orderRecharge.setWxPayAmount(CurrencyUtil.add(orderRecharge.getWxPayAmount(), orderRechargeInstalment.getPayAmount()));
-        } else if (orderRechargeInstalment.getPayType().equals(PayType.ALIPAY.getCode())) {
-            orderRecharge.setAliPayAmount(CurrencyUtil.add(orderRecharge.getAliPayAmount(), orderRechargeInstalment.getPayAmount()));
-        }
-        if (!checkIsAllPay(orderRecharge)) {
-            log.info("本次支付完成,但未全部支付完,订单号:" + orderRechargeInstalment.getMstrOrderNo());
-            this.updateById(orderRecharge);
-            orderPayResultVO.setIsAllPayEnd(Boolean.FALSE);
-            return;
-        }
-        orderRecharge.setOrderStatus(OrderRechargeStatus.YES_PAY.getCode());
-        orderRecharge.setPayStatus(PayStatus.HAS_PAY.getCode());
-        orderRecharge.setPayTime(date);
-        this.updateById(orderRecharge);
-        // 同步生成密码卡
-        this.buildRechargePasswordCardData(orderRecharge);
-        // 保存消费日志
-        appUserBillMstrService.consumeRecord(ConsumeOrderDTO.buildOrderRechargeData(orderRecharge));
-
-        orderPayResultVO.setIsAllPayEnd(Boolean.TRUE);
-        log.info("本充值订单已全部支付完,订单号:" + orderRechargeInstalment.getMstrOrderNo());
-    }
-
-
     /**
      * 支付完成后, 创建密码卡, 更新订单信息
      *

+ 10 - 3
yiqi-core/src/main/java/com/yiqi/payment/AliPayService.java

@@ -17,6 +17,7 @@ import com.ijpay.alipay.AliPayApiConfigKit;
 import com.ijpay.core.kit.WxPayKit;
 import com.ijpay.wxpay.WxPayApi;
 import com.yiqi.common.config.AlipayConfigs;
+import com.yiqi.common.config.RuoYiConfig;
 import com.yiqi.common.exception.ServiceException;
 import com.yiqi.common.utils.DateUtils;
 import com.yiqi.common.utils.spring.SpringUtils;
@@ -63,10 +64,10 @@ public class AliPayService {
     public static final String appCertPath = "/www/server/yiqi_wash_v2/paycert/appCertPublicKey_2019102468561642.crt";
 
 
-    public static final String aliPayCertPath = "/www/server/yiqi_wash_v2/paycert/alipayCertPublicKey_RSA2.crt";
+    public static  String aliPayCertPath = "/www/server/yiqi_wash_v2/paycert/alipayCertPublicKey_RSA2.crt";
 
 
-    public static final String aliPayRootCertPath = "/www/server/yiqi_wash_v2/paycert/alipayRootCert.crt";
+    public static  String aliPayRootCertPath = "/www/server/yiqi_wash_v2/paycert/alipayRootCert.crt";
 
     /**
      * 支付宝异步回调地址
@@ -75,11 +76,17 @@ public class AliPayService {
 
     @Autowired
     ISysConfigRecordService sysConfigRecordService;
+    @Autowired
+    private RuoYiConfig ruoYiConfig;
 
     @PostConstruct
     public void init() {
-        initConfig();
         aliNotifyUrl = sysConfigRecordService.getCacheConfigRecordByKey("pay_ali_notify");
+        if(ruoYiConfig.getEnv().equals("dev")){
+            aliPayRootCertPath = "";
+            aliPayCertPath = "";
+        }
+        initConfig();
     }
 
     /**

+ 10 - 2
yiqi-core/src/main/java/com/yiqi/payment/WechatPayService.java

@@ -1,6 +1,7 @@
 package com.yiqi.payment;
 
 import cn.hutool.json.JSONUtil;
+import cn.hutool.setting.profile.Profile;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.domain.AlipayTradePayModel;
 import com.alipay.api.response.AlipayTradePayResponse;
@@ -15,6 +16,7 @@ import com.ijpay.wxpay.model.MicroPayModel;
 import com.ijpay.wxpay.model.OrderQueryModel;
 import com.ijpay.wxpay.model.RefundQueryModel;
 import com.ijpay.wxpay.model.UnifiedOrderModel;
+import com.yiqi.common.config.RuoYiConfig;
 import com.yiqi.common.exception.ServiceException;
 import com.yiqi.common.utils.ip.IpUtils;
 import com.yiqi.order.domain.dto.*;
@@ -55,18 +57,24 @@ public class WechatPayService {
     /**
      * 证书
      */
-    public static final String pay_cert = "/www/server/yiqi_wash_v2/paycert/apiclient_key.pem";
+    public static String pay_cert = "/www/server/yiqi_wash_v2/paycert/apiclient_key.pem";
 
 
     private static String notify_url = "";
 
     @Autowired
     ISysConfigRecordService sysConfigRecordService;
+    @Autowired
+    private RuoYiConfig ruoYiConfig;
 
     @PostConstruct
     public void init() {
-        initConfig();
         notify_url = sysConfigRecordService.getCacheConfigRecordByKey("pay_weixin_notify");
+        if(ruoYiConfig.getEnv().equals("dev")){
+            pay_cert = "";
+            notify_url = "";
+        }
+        initConfig();
     }
 
     private void initConfig() {

+ 9 - 6
yiqi-core/src/main/java/com/yiqi/recharge/service/impl/RechargePasswordCardServiceImpl.java

@@ -564,7 +564,8 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
         }
         WeAppCardsUseRecordsVO recordInfo = baseMapper.getUseRecordsByCardId(weAppCardRecordByCardDTO);
         recordInfo.setUserBillMstrList(appUserBillMstrService.list(new QueryWrapper<AppUserBillMstr>().lambda()
-                .eq(AppUserBillMstr::getRechargeCardNo, weAppCardRecordByCardDTO.getRechargePasswordCardId())
+                .eq(AppUserBillMstr::getRechargeCardNo, recordInfo.getCardNo())
+                        .eq(AppUserBillMstr::getAppUserId, weAppCardRecordByCardDTO.getAppUserId())
                 .orderByDesc(AppUserBillMstr::getCreateTime)
                 .last("limit " + weAppCardRecordByCardDTO.getStartRow() + "," + weAppCardRecordByCardDTO.getPageSize())));
         return recordInfo;
@@ -597,7 +598,7 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
             //判断余额是否充足,查找每张卡的扣款金额
             if (rechargePasswordCard.getRechargeBalance().compareTo(BigDecimal.ZERO) > 0) {
                 if (rechargePasswordCard.getRechargeBalance().compareTo(remainPayAmount) >= 0) {
-                    updateRechargePasswordCard.setRechargeBalance(rechargeCardPayDTO.getPayAmount());
+                    updateRechargePasswordCard.setRechargeBalance(remainPayAmount);
                 } else {
                     updateRechargePasswordCard.setRechargeBalance(rechargePasswordCard.getRechargeBalance());
                 }
@@ -640,6 +641,7 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
             billMstrOrderDTO.setAppUserId(rechargeCardPayDTO.getAppUserId());
             billMstrOrderDTO.setOrgId(rechargeCardPayDTO.getOrgId());
             billMstrOrderDTO.setSourceType(rechargeCardPayDTO.getSourceType());
+            billMstrOrderDTO.setOrderId(rechargeCardPayDTO.getOrderId());
             billMstrOrderDTO.setUseBindStoreId(rechargePasswordCard.getUseBindStoreId());
             billMstrOrderDTO.setOrderNo(rechargeCardPayDTO.getOrderNo());
             billMstrOrderDTO.setOrderType(rechargeCardPayDTO.getBuyGoodsType());
@@ -698,9 +700,9 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
                 balanceRefundAmount = remainRefundAmount;
             }
             remainRefundAmount = CurrencyUtil.sub(remainRefundAmount, balanceRefundAmount);
-            rechargePasswordCard.setRechargeAmount(CurrencyUtil.sub(rechargePasswordCard.getRechargeAmount(), balanceRefundAmount));
-            rechargePasswordCard.setGiveBalance(CurrencyUtil.sub(rechargePasswordCard.getGiveBalance(), giveRefundAmount));
-            rechargePasswordCard.setWelfareBalance(CurrencyUtil.sub(rechargePasswordCard.getWelfareBalance(), welfareRefundAmount));
+            rechargePasswordCard.setRechargeBalance(CurrencyUtil.add(rechargePasswordCard.getRechargeBalance(), balanceRefundAmount));
+            rechargePasswordCard.setGiveBalance(CurrencyUtil.add(rechargePasswordCard.getGiveBalance(), giveRefundAmount));
+            rechargePasswordCard.setWelfareBalance(CurrencyUtil.add(rechargePasswordCard.getWelfareBalance(), welfareRefundAmount));
             rechargePasswordCard.setRechargeStatus(RechargeStatusType.HAS_USE.getCode());
             baseMapper.updateById(rechargePasswordCard);
             //新增一个充值记录
@@ -713,10 +715,11 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
             BillMstrOrderDTO billMstrOrderDTO = new BillMstrOrderDTO();
             BeanUtils.copyProperties(consumeBillMstr, billMstrOrderDTO);
             billMstrOrderDTO.setOrgId(consumeBillMstr.getOrgId());
+            billMstrOrderDTO.setOrderId(consumeBillMstr.getOrderId());
             billMstrOrderDTO.setSourceType(consumeBillMstr.getSourceType());
             billMstrOrderDTO.setUseBindStoreId(rechargePasswordCard.getUseBindStoreId());
             billMstrOrderDTO.setRechargeCardNo(rechargePasswordCard.getCardNo());
-            billMstrOrderDTO.setRemark("充值卡:" + rechargePasswordCard.getCardNo() + ",退款" + consumeBillMstr.getPayTotalAmount().negate() + "元");
+            billMstrOrderDTO.setRemark("充值卡:" + rechargePasswordCard.getCardNo() + ",订单退款,退还" + consumeBillMstr.getPayTotalAmount() + "元");
             billMstrOrderService.saveRefundBillMstrOrder(billMstrOrderDTO);
             log.info("订单{},会员卡 {} 退款成功,扣款日志:【{}】", consumeBillMstr.getOrderNo(), billMstrOrderDTO.getRechargeCardNo(), JSONUtil.toJsonStr(billMstrOrderDTO));
         }

+ 1 - 1
yiqi-core/src/main/resources/mapper/activity/ActivityInfoMapper.xml

@@ -80,7 +80,7 @@
             resultType="com.yiqi.activity.domain.vo.weapp.WeAppActivityDiscountQueryVO">
         select ai.id as id, ai.title, ai.description, ai.img_url as imgUrl, ai.content, ai.start_date as startDate,
         ai.end_date as endDate, ai.activity_type as activityType, ai.status,
-        adi.discount, adi.user_scope as userScope, adi.pay_scope as payScope
+        adi.discount, adi.user_scope as userScope, ai.pay_scope as payScope
         from activity_info ai
                     left join activity_discount_info adi on ai.id = adi.activity_id
                     left join activity_apply_org aao on ai.id = aao.activity_id

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

@@ -330,7 +330,7 @@
         where (id, source_type) in (select org_id, source_type
                                     from app_coupon_type_apply_org
 
-                                    where coupon_type_id = (select coupon_type_id from app_coupon_item where id = #{couponItemId}))
+                                    where coupon_type_id = #{couponItemId} )
           and status = '0'
     </select>
     <select id="getMemberCouponInfoByRecharge" resultType="com.yiqi.app.domain.AppCouponItem">

+ 1 - 1
yiqi-core/src/main/resources/mapper/recharge/RechargePasswordCardMapper.xml

@@ -154,7 +154,7 @@
             limit #{startRow},#{pageSize}
     </select>
     <select id="getUseRecordsByCardId" resultType="com.yiqi.recharge.domain.vo.weapp.WeAppCardsUseRecordsVO">
-        select a.recharge_store_id as rechargeStoreId, c.name as rechargeStoreName,
+        select a.card_no as cardNo, a.recharge_store_id as rechargeStoreId, c.name as rechargeStoreName,
                a.give_active_time as giveActiveTime, a.recharge_time as rechargeTime,
                a.expire_time as expireTime, a.recharge_amount as rechargeAmount, a.recharge_balance as rechargeBalance,
                a.give_amount as giveAmount,a.give_balance as giveBalance

+ 6 - 5
yiqi-framework/src/main/java/com/yiqi/framework/config/CaptchaConfig.java

@@ -35,9 +35,10 @@ public class CaptchaConfig {
         // 验证码文本字符长度 默认为5
         properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
         // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
-        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
+//        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
         // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
-        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
+        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.WaterRipple");
+        properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
         Config config = new Config(properties);
         defaultKaptcha.setConfig(config);
         return defaultKaptcha;
@@ -48,7 +49,7 @@ public class CaptchaConfig {
         DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
         Properties properties = new Properties();
         // 是否有边框 默认为true 我们可以自己设置yes,no
-        properties.setProperty(KAPTCHA_BORDER, "yes");
+        properties.setProperty(KAPTCHA_BORDER, "no");
         // 边框颜色 默认为Color.BLACK
         properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90");
         // 验证码文本字符颜色 默认为Color.BLACK
@@ -70,11 +71,11 @@ public class CaptchaConfig {
         // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
         properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
         // 验证码噪点颜色 默认为Color.BLACK
-        properties.setProperty(KAPTCHA_NOISE_COLOR, "white");
+//        properties.setProperty(KAPTCHA_NOISE_COLOR, "white");
         // 干扰实现类
         properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
         // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
-        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
+        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.WaterRipple");
         Config config = new Config(properties);
         defaultKaptcha.setConfig(config);
         return defaultKaptcha;

+ 4 - 1
yiqi-system/src/main/java/com/yiqi/system/mapper/SysDataGroupMapper.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.SysDataGroup;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 组合数据Mapper接口
@@ -60,5 +61,7 @@ public interface SysDataGroupMapper extends BaseMapper<SysDataGroup> {
      * @return 结果
      */
     public int deleteSysDataGroupByIds(Integer[] ids);
-    //</editor-folder>
+
+
+    SysDataGroup selectSysDataGroupByKey(@Param("key") String key);
 }

+ 6 - 0
yiqi-system/src/main/resources/mapper/system/SysDataGroupMapper.xml

@@ -41,6 +41,12 @@
         where id = #{id}
     </select>
 
+    <select id="selectSysDataGroupByKey" resultType="com.yiqi.system.domain.SysDataGroup"
+            parameterType="java.lang.String">
+        <include refid="selectSysDataGroupVo"/>
+        where config_name = #{key}
+    </select>
+
     <insert id="insertSysDataGroup" parameterType="SysDataGroup" useGeneratedKeys="true"
             keyProperty="id">
         insert into sys_data_group