202505291740

This commit is contained in:
张潘 2025-05-29 17:40:34 +08:00
parent 332f65334b
commit 268dc896a4
11 changed files with 976 additions and 325 deletions

View File

@ -155,6 +155,44 @@ public class CouponsController extends BaseController
return toAjax(couponsService.deleteCouponsByIds(ids)); return toAjax(couponsService.deleteCouponsByIds(ids));
} }
/**
* 根据优惠券ID查询userIds对应的用户列表只返回namephoneuserId字段
*/
@PreAuthorize("@ss.hasPermi('system:Coupons:query')")
@GetMapping("/userListByCoupon/{id}")
public AjaxResult getUserListByCoupon(@PathVariable("id") Long id) {
Coupons coupon = couponsService.selectCouponsById(id);
if (coupon == null || coupon.getUserIds() == null) {
return error("优惠券不存在");
}
List<Long> userIdList;
try {
// 假设userIds存储为JSON数组字符串
userIdList = com.alibaba.fastjson2.JSON.parseArray(coupon.getUserIds(), Long.class);
} catch (Exception e) {
// 如果不是JSON格式尝试逗号分隔
userIdList = new java.util.ArrayList<>();
for (String s : coupon.getUserIds().split(",")) {
try {
userIdList.add(Long.parseLong(s.trim()));
} catch (Exception ignore) {}
}
}
if (userIdList.isEmpty()) {
return error("优惠券不存在");
}
// 查询用户列表
List<Users> usersList = usersService.selectUsersByIds(userIdList);
// 只返回namephoneuserId字段
List<java.util.Map<String, Object>> simpleList = new java.util.ArrayList<>();
for (Users user : usersList) {
java.util.Map<String, Object> map = new java.util.HashMap<>();
map.put("userId", user.getId());
map.put("name", user.getName());
map.put("phone", user.getPhone());
simpleList.add(map);
}
return success(simpleList);
}
} }

View File

@ -30,6 +30,8 @@ public class Coupons extends BaseEntity
@Excel(name = "面值") @Excel(name = "面值")
private BigDecimal price; private BigDecimal price;
/** 最低消费 */ /** 最低消费 */
@Excel(name = "最低消费") @Excel(name = "最低消费")
private BigDecimal minPrice; private BigDecimal minPrice;

View File

@ -58,4 +58,11 @@ public interface UsersMapper
* @return 结果 * @return 结果
*/ */
public int deleteUsersByIds(Long[] ids); public int deleteUsersByIds(Long[] ids);
/**
* 批量根据ID查询用户
* @param ids 用户ID列表
* @return 用户对象列表
*/
public List<Users> selectUsersByIds(List<Long> ids);
} }

View File

@ -58,4 +58,13 @@ public interface IUsersService
* @return 结果 * @return 结果
*/ */
public int deleteUsersById(Long id); public int deleteUsersById(Long id);
/**
* 批量根据ID查询用户
* @param ids 用户ID列表
* @return 用户对象列表
*/
public List<Users> selectUsersByIds(List<Long> ids);
} }

View File

@ -90,4 +90,10 @@ public class UsersServiceImpl implements IUsersService
{ {
return usersMapper.deleteUsersById(id); return usersMapper.deleteUsersById(id);
} }
@Override
public List<Users> selectUsersByIds(List<Long> ids) {
if (ids == null || ids.isEmpty()) return java.util.Collections.emptyList();
return usersMapper.selectUsersByIds(ids);
}
} }

View File

@ -216,4 +216,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
<select id="selectUsersByIds" parameterType="java.util.List" resultMap="UsersResult">
<include refid="selectUsersVo"/>
where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper> </mapper>

View File

@ -17,6 +17,31 @@ export function getCoupons(id) {
}) })
} }
export function getGoodsDataList() {
return request({
url: '/system/QuoteType/goodsDataList',
method: 'get'
})
}
// 查询用户列表列表
export function getUserDataList(query) {
return request({
url: '/system/users/list',
method: 'get',
params: query
})
}
// // 获取接单记录列表
// export function getUserDataList(type) {
// return request({
// url: '/system/transfer/getUsersDataList/'+type,
// method: 'get'
// })
// }
// 查询优惠券详细 // 查询优惠券详细
export function getTypeList() { export function getTypeList() {
return request({ return request({
@ -25,6 +50,14 @@ export function getTypeList() {
}) })
} }
export function getUserListByCoupon(id) {
return request({
url: '/system/Coupons/userListByCoupon/'+id,
method: 'get'
})
}
// 任务状态修改 // 任务状态修改
export function changetypeStatus(id, status) { export function changetypeStatus(id, status) {

File diff suppressed because it is too large Load Diff

View File

@ -77,7 +77,7 @@
v-hasPermi="['system:IntegralOrder:edit']" v-hasPermi="['system:IntegralOrder:edit']"
>修改</el-button> >修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <!-- <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain plain
@ -97,7 +97,7 @@
@click="handleExport" @click="handleExport"
v-hasPermi="['system:IntegralOrder:export']" v-hasPermi="['system:IntegralOrder:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -154,13 +154,13 @@
/> />
<!-- 添加或修改积分订单对话框 --> <!-- 添加或修改积分订单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="订单号" prop="orderId"> <el-form-item label="订单号" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单号" /> <el-input v-model="form.orderId" placeholder="请输入订单号" />
</el-form-item> </el-form-item>
<el-form-item label="用户" prop="uid"> <el-form-item label="用户" prop="uid">
<el-select v-model="form.uid" placeholder="请选择用户" clearable filterable> <el-select v-model="form.uid" placeholder="请选择用户" clearable filterable style="width: 100%">
<el-option v-for="item in users" :key="item.userId" :label="item.userName" :value="item.userId" /> <el-option v-for="item in users" :key="item.userId" :label="item.userName" :value="item.userId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -174,40 +174,69 @@
<el-input v-model="form.userAddress" placeholder="请输入地址" /> <el-input v-model="form.userAddress" placeholder="请输入地址" />
</el-form-item> </el-form-item>
<el-form-item label="商品" prop="productId"> <el-form-item label="商品" prop="productId">
<el-select v-model="form.productId" placeholder="请选择商品" clearable filterable> <el-select v-model="form.productId" placeholder="请选择商品" clearable filterable style="width: 100%">
<el-option v-for="item in serviceGoods" :key="item.id" :label="item.title" :value="item.id" /> <el-option v-for="item in serviceGoods" :key="item.id" :label="item.title" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="规格" prop="sku">
<el-input v-model="form.sku" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="数量" prop="num"> <el-form-item label="数量" prop="num">
<el-input v-model="form.num" placeholder="请输入数量" /> <el-input-number
v-model="form.num"
:min="1"
:max="9999"
controls-position="right"
style="width: 100%"
placeholder="请输入数量"
/>
</el-form-item> </el-form-item>
<el-form-item label="单价" prop="price"> <el-form-item label="单价" prop="price">
<el-input v-model="form.price" placeholder="请输入单价" /> <el-input-number
v-model="form.price"
:min="0"
:precision="2"
:step="0.01"
controls-position="right"
style="width: 100%"
placeholder="请输入单价"
/>
</el-form-item> </el-form-item>
<el-form-item label="总积分" prop="totalPrice"> <el-form-item label="支付积分" prop="totalPrice">
<el-input v-model="form.totalPrice" placeholder="请输入总积分" /> <el-input-number
</el-form-item> v-model="form.totalPrice"
<el-form-item label="快递" prop="deliveryId"> :min="0"
<el-input v-model="form.deliveryId" placeholder="请输入快递" /> :max="999999"
</el-form-item> controls-position="right"
<el-form-item label="单号" prop="deliveryNum"> style="width: 100%"
<el-input v-model="form.deliveryNum" placeholder="请输入单号" /> placeholder="请输入支付积分"
</el-form-item> />
<el-form-item label="备注" prop="mark">
<el-input v-model="form.mark" placeholder="请输入备注" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="请选择状态" clearable> <el-radio-group v-model="form.status">
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" /> <el-radio :label="1">待发货</el-radio>
</el-select> <el-radio :label="2">发货</el-radio>
<el-radio :label="3">完成</el-radio>
</el-radio-group>
</el-form-item>
<!-- 当选择发货状态时显示的字段 -->
<template v-if="form.status === 2">
<el-form-item label="快递" prop="deliveryId">
<el-input v-model="form.deliveryId" placeholder="请输入快递公司" />
</el-form-item>
<el-form-item label="单号" prop="deliveryNum">
<el-input v-model="form.deliveryNum" placeholder="请输入快递单号" />
</el-form-item>
</template>
<el-form-item label="备注">
<el-input
v-model="form.mark"
type="textarea"
:rows="3"
placeholder="请输入备注"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -260,7 +289,7 @@ export default {
{ required: true, message: "订单号不能为空", trigger: "blur" } { required: true, message: "订单号不能为空", trigger: "blur" }
], ],
uid: [ uid: [
{ required: true, message: "用户不能为空", trigger: "blur" } { required: true, message: "用户不能为空", trigger: "change" }
], ],
userName: [ userName: [
{ required: true, message: "姓名不能为空", trigger: "blur" } { required: true, message: "姓名不能为空", trigger: "blur" }
@ -272,10 +301,7 @@ export default {
{ required: true, message: "地址不能为空", trigger: "blur" } { required: true, message: "地址不能为空", trigger: "blur" }
], ],
productId: [ productId: [
{ required: true, message: "商品不能为空", trigger: "blur" } { required: true, message: "商品不能为空", trigger: "change" }
],
sku: [
{ required: true, message: "规格不能为空", trigger: "blur" }
], ],
num: [ num: [
{ required: true, message: "数量不能为空", trigger: "blur" } { required: true, message: "数量不能为空", trigger: "blur" }
@ -284,10 +310,34 @@ export default {
{ required: true, message: "单价不能为空", trigger: "blur" } { required: true, message: "单价不能为空", trigger: "blur" }
], ],
totalPrice: [ totalPrice: [
{ required: true, message: "积分不能为空", trigger: "blur" } { required: true, message: "支付积分不能为空", trigger: "blur" }
], ],
status: [ status: [
{ required: true, message: "1待发货 2待收货 3已完成不能为空", trigger: "change" } { required: true, message: "状态不能为空", trigger: "change" }
],
deliveryId: [
{
validator: (rule, value, callback) => {
if (this.form.status === 2 && (!value || value.trim() === '')) {
callback(new Error('快递公司不能为空'));
} else {
callback();
}
},
trigger: "blur"
}
],
deliveryNum: [
{
validator: (rule, value, callback) => {
if (this.form.status === 2 && (!value || value.trim() === '')) {
callback(new Error('快递单号不能为空'));
} else {
callback();
}
},
trigger: "blur"
}
], ],
}, },
users: [], users: [],
@ -329,7 +379,6 @@ export default {
userPhone: null, userPhone: null,
userAddress: null, userAddress: null,
productId: null, productId: null,
sku: null,
num: null, num: null,
price: null, price: null,
totalPrice: null, totalPrice: null,

View File

@ -49,7 +49,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
@ -93,7 +93,7 @@
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row> -->
<el-table v-loading="loading" :data="WorkerApplyList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="WorkerApplyList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />

View File

@ -50,7 +50,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
@ -94,7 +94,7 @@
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row> -->
<el-table v-loading="loading" :data="transferList" @selection-change="handleSelectionChange" border> <el-table v-loading="loading" :data="transferList" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />