fanzherong_v 3 mēneši atpakaļ
vecāks
revīzija
2f7933f6a3

+ 25 - 0
snowy-admin-web/src/api/biz/bizAuthApi.js

@@ -0,0 +1,25 @@
+/**
+ *  Copyright [2022] [https://www.xiaonuo.vip]
+ *	Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *	1.请不要删除和修改根目录下的LICENSE文件。
+ *	2.请不要删除和修改Snowy源码头部的版权声明。
+ *	3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ *	4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ *	5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ *	6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/auth/c/` + url, ...arg)
+/**
+ * 人员接口api
+ *
+ * @author yubaoshan
+ * @date 2022-09-22 22:33:20
+ */
+export default {
+	// 获取短信
+	sendMessage(data) {
+		return request('smsSend', data, 'get')
+	},
+}

+ 5 - 0
snowy-admin-web/src/views/biz/consumptionrecord/index.vue

@@ -127,6 +127,11 @@
 			dataIndex: 'userName',
 			align: 'center',
 		},
+		{
+			title: '会员手机号',
+			dataIndex: 'phone',
+			align: 'center',
+		},
 		{
 			title: '消费操作',
 			dataIndex: 'consumptionOperate',

+ 22 - 17
snowy-admin-web/src/views/biz/couponrecord/index.vue

@@ -4,12 +4,12 @@
 			<a-row :gutter="24">
 				<a-col :span="6">
 					<a-form-item label="优惠券编码" name="couponNo">
-						<a-input v-model:value="searchFormState.couponNo" placeholder="请输入优惠券编码" />
+						<a-input v-model:value="searchFormState.couponNo" placeholder="优惠券编码查询" />
 					</a-form-item>
 				</a-col>
 				<a-col :span="6">
-					<a-form-item label="是否核销: 0.否 1.是" name="couponStatus">
-						<a-input v-model:value="searchFormState.couponStatus" placeholder="请输入是否核销: 0.否 1.是" />
+					<a-form-item label="是否核销" name="couponStatus">
+						<a-input v-model:value="searchFormState.couponStatus" placeholder="是否核销查询" />
 					</a-form-item>
 				</a-col>
 				<a-col :span="6">
@@ -22,11 +22,8 @@
 			ref="tableRef"
 			:columns="columns"
 			:data="loadData"
-			:alert="options.alert.show"
 			bordered
 			:row-key="(record) => record.id"
-			:tool-config="toolConfig"
-			:row-selection="options.rowSelection"
 		>
 			<template #operator class="table-operator">
 				<a-space>
@@ -71,46 +68,54 @@
 	const columns = [
 		{
 			title: '优惠券编码',
-			dataIndex: 'couponNo'
+			dataIndex: 'couponNo',
+			align: 'center'
 		},
 		{
 			title: '优惠券生成时间',
-			dataIndex: 'time'
+			dataIndex: 'time',
+			align: 'center'
 		},
 		{
-			title: '是否核销: 0.否 1.是',
-			dataIndex: 'couponStatus'
+			title: '是否核销',
+			dataIndex: 'couponStatus',
+			align: 'center'
 		},
 		{
 			title: '有效期开始时间',
-			dataIndex: 'startTime'
+			dataIndex: 'startTime',
+			align: 'center'
 		},
 		{
 			title: '有效期截止时间',
-			dataIndex: 'endTime'
+			dataIndex: 'endTime',
+			align: 'center'
 		},
 		{
 			title: '核销人',
-			dataIndex: 'destroyUser'
+			dataIndex: 'destroyUser',
+			align: 'center'
 		},
 		{
 			title: '核销时间',
-			dataIndex: 'destroyTime'
+			dataIndex: 'destroyTime',
+			align: 'center'
 		},
 		{
 			title: '核销门店',
-			dataIndex: 'orgId'
+			dataIndex: 'orgId',
+			align: 'center'
 		},
 	]
 	// 操作栏通过权限判断是否显示
-	if (hasPerm(['bizCouponRecordEdit', 'bizCouponRecordDelete'])) {
+	/*if (hasPerm(['bizCouponRecordEdit', 'bizCouponRecordDelete'])) {
 		columns.push({
 			title: '操作',
 			dataIndex: 'action',
 			align: 'center',
 			width: 150
 		})
-	}
+	}*/
 	const selectedRowKeys = ref([])
 	// 列表选择配置
 	const options = {

+ 26 - 5
snowy-admin-web/src/views/biz/member/consumption.vue

@@ -23,10 +23,9 @@
 				<a-input v-model:value="formData.phoneNumber" placeholder="请输入手机号" disabled allow-clear style="width:100%"/>
 			</a-form-item>
 			<a-form-item label="验证码:" name="phoneCode">
-				<a-input v-model:value="formData.phoneCode" placeholder="请输入验证码" allow-clear style="width:73%"/>
-				<a-button style="margin-left:20px;" type="primary" @click="sendMessage()">
-<!--					<template #icon></template>-->
-					发送验证码
+				<a-input v-model:value="formData.phoneCode" placeholder="请输入验证码" allow-clear style="width:65%"/>
+				<a-button style="margin-left:20px;" type="primary" @click="sendMessage()" :disabled="isDisabled">
+					{{ isDisabled == true? countdown+'秒后重新发送':'发送验证码' }}
 				</a-button>
 			</a-form-item>
 
@@ -57,6 +56,10 @@
 	const labelCol = ref({ span: 5 })
 	const wrapperCol = ref({ span: 18 })
 
+	const buttonText = ref('发送验证码')
+	const countdown = ref(300);
+	const isDisabled = ref(false);
+
 	// 打开抽屉
 	const onOpen = (record) => {
 		open.value = true
@@ -104,6 +107,7 @@
 			.catch(() => {})
 	}
 
+	let timer = null; // 定时器
 	const sendMessage = () => {
 		console.log("1111")
 		debugger
@@ -112,7 +116,24 @@
 			return
 		}
 		bizAuthApi.sendMessage({phone:formData.value.phoneNumber}).then((res)=>{
-
+			/*if(res.code == '200'){
+				message.success("发送成功")
+			}else{
+				message.error(res.msg)
+			}*/
+			// 禁用按钮
+			isDisabled.value = true;
+			// 启动倒计时
+			timer = setInterval(() => {
+				if (countdown.value > 0) {
+					countdown.value--;
+				} else {
+					// 倒计时结束,重置状态
+					clearInterval(timer);
+					isDisabled.value = false;
+					countdown.value = 300;
+				}
+			}, 1000);
 		})
 	}
 	// 抛出函数

+ 12 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/consumptionrecord/entity/ConsumptionRecord.java

@@ -87,4 +87,16 @@ public class ConsumptionRecord extends CommonEntity {
     /**原账户余额*/
     @Schema(description = "原账户余额")
     private BigDecimal accountBalance;
+
+    /**会员手机号*/
+    @TableField(exist = false)
+    private String phone;
+
+    /**现账户余额*/
+    @TableField(exist = false)
+    private BigDecimal newAccountBalance;
+
+    /**现代金券余额*/
+    @TableField(exist = false)
+    private BigDecimal newVoucherBalance;
 }

+ 4 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/consumptionrecord/mapper/mapping/ConsumptionRecordMapper.xml

@@ -15,7 +15,10 @@
             cr.consumption_operate,
             IFNULL(cr.consumption_money,0) consumption_money,
             IFNULL(cr.voucher_balance,0) voucher_balance,
-            IFNULL(cr.account_balance,0) account_balance
+            IFNULL(cr.account_balance,0) account_balance,
+            su.PHONE,
+            su.ACCOUNT_BALANCE newAccountBalance,
+            su.VOUCHER_BALANCE newVoucherBalance
         from biz_consumption_record cr
         left join SYS_USER su on cr.user_id = su.id
         left join SYS_ORG so on so.id = cr.consumption_org

+ 4 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/consumptionrecord/service/impl/ConsumptionRecordServiceImpl.java

@@ -40,6 +40,7 @@ import vip.xiaonuo.biz.modular.consumptionrecord.param.ConsumptionRecordEditPara
 import vip.xiaonuo.biz.modular.consumptionrecord.param.ConsumptionRecordIdParam;
 import vip.xiaonuo.biz.modular.consumptionrecord.param.ConsumptionRecordPageParam;
 import vip.xiaonuo.biz.modular.consumptionrecord.service.ConsumptionRecordService;
+import vip.xiaonuo.common.util.CommonCryptogramUtil;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -89,6 +90,9 @@ public class ConsumptionRecordServiceImpl extends ServiceImpl<ConsumptionRecordM
         queryWrapper.orderByDesc("cr.create_time");
         Page<ConsumptionRecord> pageList = this.getBaseMapper().getPageList(CommonPageRequest.defaultPage(), queryWrapper);
         for(ConsumptionRecord consumptionRecord : pageList.getRecords()){
+            if(ObjectUtil.isNotEmpty(consumptionRecord.getPhone())){
+                consumptionRecord.setPhone(CommonCryptogramUtil.doSm4CbcDecrypt(consumptionRecord.getPhone()));
+            }
             if(StringUtils.equals(consumptionRecord.getConsumptionOperate(),"3") || StringUtils.equals(consumptionRecord.getConsumptionOperate(),"4")){
                 //消费结算,设置下说明
                 if(StringUtils.equals(consumptionRecord.getConsumptionType(),"1")){

+ 27 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/couponrecord/controller/BizCouponRecordController.java

@@ -120,4 +120,31 @@ public class BizCouponRecordController {
     public CommonResult<BizCouponRecord> detail(@Valid BizCouponRecordIdParam bizCouponRecordIdParam) {
         return CommonResult.data(bizCouponRecordService.detail(bizCouponRecordIdParam));
     }
+
+    /**
+     * 根据编码获取优惠券记录列表
+     *
+     * @author wulei
+     * @date  2025/02/06 17:38
+     */
+    @Operation(summary = "根据编码获取优惠券记录列表")
+    @SaCheckPermission("/biz/couponrecord/queryByCode")
+    @GetMapping("/biz/couponrecord/queryByCode")
+    public CommonResult<List<BizCouponRecord>> queryByCode(@Valid BizCouponRecordPageParam bizCouponRecordPageParam) {
+        return CommonResult.data(bizCouponRecordService.queryByCode(bizCouponRecordPageParam));
+    }
+
+    /**
+     * 优惠券核销
+     * @param bizCouponRecordEditParam
+     * @return
+     */
+    @Operation(summary = "优惠券核销")
+    @CommonLog("优惠券核销")
+    @SaCheckPermission("/biz/couponrecord/destroy")
+    @PostMapping("/biz/couponrecord/destroy")
+    public CommonResult<String> destroy(@RequestBody @Valid BizCouponRecordEditParam bizCouponRecordEditParam) {
+        bizCouponRecordService.destroy(bizCouponRecordEditParam);
+        return CommonResult.ok();
+    }
 }

+ 1 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/couponrecord/entity/BizCouponRecord.java

@@ -55,7 +55,7 @@ public class BizCouponRecord extends CommonEntity {
 
     /** 是否核销: 0.否 1.是 */
     @Schema(description = "是否核销: 0.否 1.是")
-    private Boolean couponStatus;
+    private String couponStatus;
 
     /** 有效期开始时间 */
     @Schema(description = "有效期开始时间")

+ 10 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/couponrecord/service/BizCouponRecordService.java

@@ -77,4 +77,14 @@ public interface BizCouponRecordService extends IService<BizCouponRecord> {
      * @date  2025/02/06 17:38
      **/
     BizCouponRecord queryEntity(String id);
+
+    /**
+     * 根据优惠券编码查询优惠券信息
+     * @param bizCouponRecordPageParam
+     * @return
+     */
+    List<BizCouponRecord> queryByCode(BizCouponRecordPageParam bizCouponRecordPageParam);
+
+    /**优惠券核销*/
+    void destroy(BizCouponRecordEditParam bizCouponRecordEditParam);
 }

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/couponrecord/service/impl/BizCouponRecordServiceImpl.java

@@ -19,8 +19,10 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
@@ -32,6 +34,7 @@ import vip.xiaonuo.biz.modular.couponrecord.param.BizCouponRecordIdParam;
 import vip.xiaonuo.biz.modular.couponrecord.param.BizCouponRecordPageParam;
 import vip.xiaonuo.biz.modular.couponrecord.service.BizCouponRecordService;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -97,4 +100,36 @@ public class BizCouponRecordServiceImpl extends ServiceImpl<BizCouponRecordMappe
         }
         return bizCouponRecord;
     }
+
+    @Override
+    public List<BizCouponRecord> queryByCode(BizCouponRecordPageParam bizCouponRecordPageParam) {
+        List<BizCouponRecord> bizCouponRecord = this.list(new QueryWrapper<BizCouponRecord>().lambda().
+                like(BizCouponRecord::getCouponNo, bizCouponRecordPageParam.getCouponNo()));
+        return bizCouponRecord;
+    }
+
+    /***/
+    @Override
+    public void destroy(BizCouponRecordEditParam bizCouponRecordEditParam) {
+        //获取优惠券信息
+        BizCouponRecord bizCouponRecord = this.queryEntity(bizCouponRecordEditParam.getId());
+        //判断该优惠券是否过期
+        if(ObjectUtil.isNotEmpty(bizCouponRecordEditParam.getEndTime())){
+            if(new Date().getTime() > bizCouponRecord.getEndTime().getTime()){
+                throw new CommonException("优惠券已过期!");
+            }
+        }
+        if(StringUtils.equals(bizCouponRecord.getCouponStatus(),"1")){
+            throw new CommonException("优惠券已经核销过!");
+        }
+        //状态修改成已核销
+        bizCouponRecord.setCouponStatus("1");
+        //核销人
+        bizCouponRecord.setDestroyUser(StpLoginUserUtil.getLoginUser().getId());
+        //核销时间
+        bizCouponRecord.setDestroyTime(new Date());
+        //核销门店
+        bizCouponRecord.setOrgId(StpLoginUserUtil.getLoginUser().getOrgId());
+        this.save(bizCouponRecord);
+    }
 }