Commit c5a8ab02 authored by 李硕's avatar 李硕

按条件搜索中奖名单和导入物流信息

parent ceb9aa69
...@@ -32,6 +32,10 @@ const API = { ...@@ -32,6 +32,10 @@ const API = {
request("queryBenefitByEname", "POST", params), request("queryBenefitByEname", "POST", params),
// 复制创建新活动 // 复制创建新活动
createCopyActivity: (params) => request("copyNewActivity", "POST", params), createCopyActivity: (params) => request("copyNewActivity", "POST", params),
//搜索条件查询中奖信息
exportAwardsInfoBySearch: (params) => request("exportAwardsInfoBySearch", "POST", params),
findWinnerInfoListBySearch: (params) => request("findWinnerInfoListBySearch", "POST", params),
downloadFile: (params) => request("downloadFile", "POST", params),
}; };
export default API; export default API;
.rank-dialog-wrap { .rank-dialog-wrap {
max-height: 400px;
overflow: scroll
} }
.other-winner-list { .other-winner-list {
display: flex; display: flex;
......
...@@ -14,8 +14,41 @@ ...@@ -14,8 +14,41 @@
title="{{item.tab}}" title="{{item.tab}}"
key="{{item.key}}" key="{{item.key}}"
> --> > -->
<!-- 添加筛选条件导出中奖名单 start -->
<form class="edit-content-form" data-name="form" inline="true" labelTextAlign="right" size="large">
<form-item class="edit-content-formItem" label="奖品编号" labelTextAlign="right" asterisk="{{false}}">
<input data-type="prize" value="{{searchInfo.prizeId}}" onChange="onInputChange" hasLimitHint="true" name="奖品编号" />
</form-item>
<form-item class="edit-content-formItem" label="用户id" labelTextAlign="right" asterisk="{{false}}">
<input data-type="user" value="{{searchInfo.userNick}}" onChange="onInputChange" hasLimitHint="true" name="用户id" />
</form-item>
<form-item class="edit-content-formItem" label="发奖时间" labelTextAlign="right" asterisk="{{false}}">
<range-picker style="width: 300px" onChange="onChangeTime" hasClear="true" value="{{timeRange}}" data-time="{{timeRange}}" class="block" show-time="{{ format: 'HH:mm' }}" />
</form-item>
<form-item class="edit-content-formItem" label="发货状态" labelTextAlign="right">
<select onChange="onSelectShipStatus">
<option value="{{1}}">全部</option>
<option value="{{2}}">未发货</option>
<option value="{{3}}">已发货</option>
</select>
</form-item>
<form-item class="edit-content-formItem" label="奖品类型">
<select onChange="onSelectPrizeType">
<option value="{{1}}">优惠券</option>
<option value="{{3}}">实物</option>
</select>
</form-item>
</form>
<view style="textAlign:right">
<button onTap="onChangeSearch" style="height:32px;" type="primary" size="medium">搜索</button>
<button style="margin-left:20px;height:32px" type="primary" data-type="search" onTap="exportWinnerListBySearch" size="medium">导出</button>
<button style="margin-left:20px;height:32px" type="primary" onTap="onChangeUpLoad" size="medium">导入发货</button>
</view>
<!-- end -->
<view class="now-winner-list"> <view class="now-winner-list">
<button type="primary" onTap="exportWinnerList">导出中奖名单</button> <button type="primary" data-type="export" onTap="exportWinnerList">导出中奖名单</button>
</view> </view>
<table dataSource="{{list}}"> <table dataSource="{{list}}">
...@@ -23,9 +56,11 @@ ...@@ -23,9 +56,11 @@
</table> </table>
<view class="rank-pagination"> <view class="rank-pagination">
<text class="rank-pagination-text">共{{list.length}}条</text> <text class="rank-pagination-text">共{{list.length}}条</text>
<pagination shape="arrow-only" hideOnlyOnePage="true" defaultCurrent="1" current="{{pageInfo.pageNo}}" pageSize="{{pageInfo.pageSize}}" onChange="changePagination" pageShowCount="100" total="{{pageInfo.total}}" /> <!-- <pagination shape="arrow-only" hideOnlyOnePage="true" defaultCurrent="1" current="{{pageInfo.pageNo}}" pageSize="{{pageInfo.pageSize}}" onChange="changePagination" pageShowCount="100" total="{{pageInfo.total}}" /> -->
<pagination showJump="{{false}}" defaultCurrent="{{1}}" data-type="all" pageSize="{{pageSize}}" onChange="onChangePageNo" pageShowCount="{{10}}" total="{{total}}" a:if="{{total > 0}}" shape="arrow-only" />
</view> </view>
<!-- </tab-item> <!-- </tab-item>
</tab> --> </tab> -->
</view> </view>
</dialog-wrap> </dialog-wrap>
\ No newline at end of file <ship-dialog a:if="{{showShip}}" showShip="{{showShip}}" onClose="onCloseShip" activityId="{{winactivityId}}"></ship-dialog>
\ No newline at end of file
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
import { import {
findWinnerInfoList, findWinnerInfoList,
uploadDataCreateFile, uploadDataCreateFile,
//通过搜索条件筛选中奖名单
exportAwardsInfoBySearch,
findWinnerInfoListBySearch
} from "/api"; } from "/api";
import { appId } from "/config"; import { appId } from "/config";
import { setClipboard } from "/utils"; import { setClipboard } from "/utils";
...@@ -12,69 +15,106 @@ Component({ ...@@ -12,69 +15,106 @@ Component({
tabs: [{ tabs: [{
tab: '0608-0712', tab: '0608-0712',
key: 111 key: 111
},{ }, {
tab: '03308-0712', tab: '03308-0712',
key: 43 key: 43
},{ }, {
tab: '064548-0712', tab: '064548-0712',
key: 435 key: 435
},{ }, {
tab: '0608-0712', tab: '0608-0712',
key: 436545 key: 436545
},{ }, {
tab: '0608-0712', tab: '0608-0712',
key: 65 key: 65
},{ }, {
tab: '0608-0712', tab: '0608-0712',
key: 11561 key: 11561
},{ }, {
tab: '0608-0712', tab: '0608-0712',
key: 13311 key: 13311
},{ }, {
tab: '0608-0712', tab: '0608-0712',
key: 145611 key: 145611
},{ }, {
tab: '0608-0712', tab: '0608-0712',
key: 1178761 key: 1178761
}], }],
dataSource: [], dataSource: [],
columns: [ columns: [
{ title: '排名', prop: 'rank' }, { title: '排名', prop: 'rank' },
{ title: '奖品编号', prop: 'prizeId' },//prizeId为awards_info中的_id
{ title: '发奖时间', prop: 'createTime' },
{ title: '填地址时间', prop: 'receiveTime' },
{ title: '用户昵称', prop: 'userNick' }, { title: '用户昵称', prop: 'userNick' },
{ title: '奖品类型', prop: 'typeName' }, { title: '奖池类型', prop: 'awardsType' },
{ title: '奖品名称', prop: 'prizeName' }, { title: '奖品类型', prop: 'type' },
{ title: '奖品名', prop: 'name' },
{ title: '收货人', prop: 'receiveName' }, { title: '收货人', prop: 'receiveName' },
{ title: '联系方式', prop: 'phone' }, { title: '联系方式', prop: 'phone' },
{ title: '收货地址', prop: 'address', width: 240 } /*注:需要在接口里将 省+市+区+详细 拼写起来*/
{ title: '收货地址', prop: 'address' },//{ title: '收货地址', prop: 'address', width: 240 }
{ title: '物流状态', prop: 'shipStatus' },
{ title: '物流公司', prop: 'shipCompany' },
{ title: '物流单号', prop: 'shipNum' }
], ],
pageInfo: { // pageInfo: {
pageNo: 1, // pageNo: 1,
pageSize: 100, // pageSize: 100,
total: 0 // total: 0
}, // },
//《条件搜索》start显示中奖名单搜索条件
list: [],
prizeId: "",
userId: "",
startT: "",
endT: "",
shipStatus: "",
timeRange: [],
prizeType: "",
showShip: false,
winactivityId: "",
pageNo: 1,
pageSize: 1,
total: 0,
type: ""
//end
}, },
props: { props: {
onClose: () => {}, onClose: () => { },
list: [], list: [],
selectedItem: {}, selectedItem: {},
}, },
didMount() {}, didMount() { },
didUpdate() {}, didUpdate() { },
didUnmount() {}, didUnmount() { },
methods: { methods: {
//start《条件搜索》初始化数据更新
initData() {
this.setData({
list: [],
prizeId: "",
userId: "",
startT: "",
endT: "",
timeRange: [],
shipStatus: "",
prizeType: ""
})
},
//end
onCloseDialog() {
this.props.onClose && this.props.onClose();
},
async getWinnerList() { async getWinnerList() {
const { avtivityId } = this.props; const { avtivityId } = this.props;
const { data } = await findWinnerInfoList({ const { data } = await findWinnerInfoList({
avtivityId avtivityId
}) });
this.setData({ this.setData({
dataSource: data dataSource: data
}) });
},
onCloseDialog() {
this.props.onClose && this.props.onClose();
}, },
// 导出中奖名单 // 导出中奖名单
async exportWinnerList(evt) { async exportWinnerList(evt) {
...@@ -97,7 +137,7 @@ Component({ ...@@ -97,7 +137,7 @@ Component({
this.setData({ this.setData({
exportDialogVisible: true, exportDialogVisible: true,
exportUrl: data.url.replace(/amp;/g, "") exportUrl: data.url.replace(/amp;/g, "")
}) });
} else { } else {
my.showToast({ my.showToast({
type: "fail", type: "fail",
...@@ -109,5 +149,181 @@ Component({ ...@@ -109,5 +149,181 @@ Component({
console.log(error, "exportList-error"); console.log(error, "exportList-error");
} }
}, },
//《条件搜索》 导出中奖名单
timeExchange(time) {
console.log("time==", time);
let a = time ? new Date(time) : "";
let times = a ? a.getTime() : "";
return times;
},
async exportWinnerListBySearch(evt) {
const { activityId, title } = this.props.selectedItem;
let { prizeId, userId, startT, endT, shipStatus, pageNo, pageSize, prizeType } = this.data;
let timeStart = this.timeExchange(startT);
let timeEnd = this.timeExchange(endT);
if (prizeId || userId || (timeStart && timeEnd) || shipStatus || prizeType) {
try {
console.log("导出名单数据接口");
const { success, data, message } = await exportAwardsInfoBySearch({
activityId,
pageNo, pageSize,
title,
prizeId,
userId,
timeStart,
timeEnd,
shipStatus,
prizeType
});
if (success) {
if (!data) {
my.showToast({
type: 'fail',
content: '没有符合条件的订单!'
})
}
else {
console.log("导出中奖名单");
my.setClipboard({
text: data.url.replace(/amp;/g, ''),
success(res) {
my.showToast({
type: 'success',
content: '下载链接复制成功,请在浏览器中打开下载'
})
}
});
}
} else {
my.showToast({
type: 'fail',
content: message
})
}
} catch (error) {
my.hideLoading();
console.log('exportList-error', error);
}
}
else {
my.showToast({
type: "fail",
content: "请填写至少一个筛选信息"
})
}
},
//《条件搜索》导入发货信息
onChangeUpLoad() {
const { activityId, title } = this.props.selectedItem;
this.setData({
showShip: true,
winactivityId: activityId
})
},
//《条件搜索》关闭导入发货窗口
onCloseShip() {
this.setData({
showShip: false,
})
},
//《条件搜索》搜索
async onChangeSearch() {
const { activityId, title } = this.props.selectedItem;
let { prizeId, userId, startT, endT, pageNo, pageSize, shipStatus, prizeType } = this.data;
let timeStart = this.timeExchange(startT);
let timeEnd = this.timeExchange(endT);
console.log(prizeId, userId, timeStart, timeEnd, pageNo, pageSize, shipStatus, prizeType);
if (prizeId || userId || (timeStart && timeEnd) || shipStatus === 0 || shipStatus || prizeType > 0) {
let rewardList = await findWinnerInfoListBySearch({ activityId, pageNo, pageSize, title, prizeId, userId, timeStart, timeEnd, shipStatus, prizeType });
if (rewardList.data.list.length == 0) {
this.setData({
list: [],
total: 0
}); 0
my.showToast({
type: "fail",
content: "没有符合条件的订单!"
})
} else {
console.log("rewardList==", rewardList);
//时间戳的转换都去到服务端做
/*
rewardList.data.list.forEach((item) => {
item.createTime = moment(+item.createTime).format("YYYY-MM-DD HH:mm:ss");
item.receiveTime = !!item.receiveTime ? moment(+item.receiveTime).format("YYYY-MM-DD HH:mm:ss") : '/';
});
*/
this.setData({
list: rewardList.data.list,
total: rewardList.data.total
});
}
}
else {
my.showToast({
type: "fail",
content: "请填写至少一个筛选信息"
})
}
},
//《条件搜索》按照时间搜索
onChangeTime(e) {
console.log("时间搜索e", e);
const [startTime, endTime] = e.detail.value;
this.setData({
startT: startTime || "",
endT: endTime || "",
timeRange: [startTime, endTime],
pageNo: 1,
pageSize: 10,
total: 0,
});
console.log("this.data.timeRange==", this.data.timeRange, this.data.startT, this.data.endT);
},
//《条件搜索》输入框查找信息
onInputChange(e) {
let { type } = e.currentTarget.dataset;
let { value } = e.detail;
this.setData({
[type + "Id"]: value,
pageNo: 1,
pageSize: 10,
total: 0,
})
console.log("this.data.prizeId===", this.data.prizeId, "this.data.userId===", this.data.userId);
},
//《条件搜索》发货状态筛选
onSelectShipStatus(e) {
console.log('筛选发货状态e>>>', e);
this.setData({
shipStatus: e.detail.value,
pageNo: 1,
pageSize: 10,
total: 0,
})
},
//《条件搜索》奖品类型筛选
onSelectPrizeType(e) {
console.log('筛选奖品类型e>>>', e);
this.setData({
prizeType: e.detail.value,
pageNo: 1,
pageSize: 10,
total: 0,
});
console.log("type", this.data.prizeType);
},
//《条件搜索》更换页码时调用接口
onChangePageNo(e) {
this.setData({
pageNo: e.detail.value
})
this.onChangeSearch();
}
}, },
}); });
{ {
"component": true, "component": true,
"usingComponents": { "usingComponents": {
"dialog-wrap": "../../basic/dialiog-wrap/dialiog-wrap" "dialog-wrap": "../../basic/dialiog-wrap/dialiog-wrap",
"ship-dialog": "../../dialog/ship-dialog/ship-dialog"
} }
} }
\ No newline at end of file
.edit-content-shipDialog1 {
background: white;
width: 100%;
height: 200px;
/* margin-left: 80px; */
margin-top: 100px;
}
.edit-content-titleLoad {
font-size: 25px;
font: bold;
text-align: center;
margin-top: 20px;
}
.edit-content-shipDialog {
width: 340px;
margin-left: 76px;
margin-top: 40px;
}
.edit-content-buttons {
width: 200px;
margin-left: 300px;
}
.edit-content-buttonShip {
margin-left: 5px
}
\ No newline at end of file
<dialog-wrap title="批量发货" visible="{{showShip}}" onClose="closeShip">
<view class="edit-content-shipDialog1">
<form-item class="edit-content-shipDialog" label="上传附件:" style="display:flex">
<input placeholder="Input" style="80px" value="{{fileName}}" onChange="onChangeInput"/>
</form-item>
<view class="edit-content-buttons">
<button class="edit-content-buttonShip" type="primary" onTap="closeShip">
取消
</button>
<button class="edit-content-buttonShip" type="primary" onTap="onChangeLoadFile">
确认发货
</button>
</view>
</view>
</dialog-wrap>
\ No newline at end of file
import { downloadFile } from "../../../api";
// import { upLoadFileApi } from "../../utils/my-api";
Component({
data: {
fileName: ""
},
props: {
activityId: "",
onClose: () => { }
},
didMount() {
console.log(">>>>>>activityId",this.props.activityId);
},
didUpdate() {
},
didUnmount() { },
methods: {
//LS20200716关闭弹窗
closeShip() {
this.props.onClose();
this.setData({
fileName: ""
})
console.log("ship-dialog====showShip");
},
closeDialog() {
this.setData({})
},
//20200717确认发货
//20200717
async onChangeLoadFile() {
let { fileName } = this.data;
let { activityId } = this.props;
console.log("fileName==", fileName, "activityId===", activityId);
let result = await downloadFile({ activityId, fileName });
console.log("-----**", result);
if (result.success) {
if (result.data.total == 0) {
my.showToast({
type: "fail",
content: `无用户填写地址,导入信息错误`,
});
}
else {
my.showToast({
type: "success",
content: `成功导入${JSON.stringify(result.data.total)}条发货信息!`,
});
}
} else {
my.showToast({
type: "fail",
content: result.message
});
}
},
//输入框变化
onChangeInput(e) {
console.log("输入框变化", e);
let { fileName } = this.data;
this.setData({
fileName: e.detail.value
})
console.log("====", fileName);
}
}
})
{
"component": true,
"usingComponents": {
"dialog-wrap": "../../basic/dialiog-wrap/dialiog-wrap"
}
}
\ No newline at end of file
...@@ -3,6 +3,10 @@ const { endingNotify } = require("./controller/endingNodify.controller"); ...@@ -3,6 +3,10 @@ const { endingNotify } = require("./controller/endingNodify.controller");
const { const {
findWinnerInfoList, findWinnerInfoList,
exportAwardsList, exportAwardsList,
//搜索条件导出中奖名单
findWinnerInfoListBySearch,
exportAwardsInfoBySearch,
downloadFile
} = require("./controller/awards.controller"); } = require("./controller/awards.controller");
const { const {
getActivityListByOpenId, getActivityListByOpenId,
...@@ -18,6 +22,10 @@ const { ...@@ -18,6 +22,10 @@ const {
getBenefitByEname, getBenefitByEname,
} = require("./controller/activitygettbitem.controller"); } = require("./controller/activitygettbitem.controller");
//搜索条件导出中奖名单
exports.findWinnerInfoListBySearch = findWinnerInfoListBySearch;
exports.exportAwardsInfoBySearch = exportAwardsInfoBySearch;
exports.downloadFile = downloadFile;
// 定时开奖 // 定时开奖
exports.endingNotify = endingNotify; exports.endingNotify = endingNotify;
// 活动中奖名单 // 活动中奖名单
......
// 排行榜开奖记录 // 排行榜开奖记录
const BaseDao = require("../dao/base.dao"); const BaseDao = require("../dao/base.dao");
const { DRAW_STATUS } = require("../utils/constants"); const { DRAW_STATUS, SHIP_STATUS } = require("../utils/constants");
const { USER_PRIZE } = require("../config/db_config"); const { USER_PRIZE } = require("../config/db_config");
const DBName = USER_PRIZE; const DBName = USER_PRIZE;
class RankopenprizeService { class RankopenprizeService {
...@@ -28,11 +27,11 @@ class RankopenprizeService { ...@@ -28,11 +27,11 @@ class RankopenprizeService {
} }
// 根据活动id查找中奖名单 // 根据活动id查找中奖名单
async getAwardslistByActivityId(activityId, pageNo, pageSize) { async getAwardslistByActivityId(activityId) {
if (!activityId) { if (!activityId) {
return false; return false;
} }
let result = await this.rankopenprizeDao.find( return await this.rankopenprizeDao.find(
{ {
activityId: activityId, activityId: activityId,
}, },
...@@ -41,12 +40,91 @@ class RankopenprizeService { ...@@ -41,12 +40,91 @@ class RankopenprizeService {
score: -1, score: -1,
rankTime: -1, rankTime: -1,
}, },
}
);
}
//《条件搜索》查询中奖信息
async getUserPrizeByActivityId(activityId, pageNo, pageSize, prizeId, userNick, timeStart, timeEnd, shipStatus, type) {
let p = prizeId ? { _id: prizeId } : '';
let u = userNick ? { userNick: { $regex: ".*" + userNick + ".*" } } : '';
let c = (timeStart > 0 && timeEnd > 0) ? { createTime: { $gt: timeStart, $lt: timeEnd } } : '';
let s = shipStatus
? (shipStatus == 1
? { shipStatus: { $in: [SHIP_STATUS.NO_ADDRESS, SHIP_STATUS.NO_SHIP, SHIP_STATUS.HAS_SHIP] } }
: (shipStatus == 2
? { shipStatus: { $in: [SHIP_STATUS.NO_ADDRESS, SHIP_STATUS.NO_SHIP] } }
: { shipStatus: SHIP_STATUS.HAS_SHIP }
)
)
: '';
let t = type ? { type: +type } : '';
let arr = [p, u, c, s, t];
arr = arr.filter((i) => { return i });
console.log('arr--222---', arr);
return await this.rankopenprizeDao.find(
{
activityId,
$and: arr
},
{
limit: pageSize, limit: pageSize,
skip: (pageNo - 1) * pageSize, skip: (pageNo - 1) * pageSize,
} }
); );
}
return result
//《条件搜索》获取中奖名单长度
async getTotalObjectCount(activityId, prizeId, userNick, timeStart, timeEnd, shipStatus, type) {
let p = prizeId ? { _id: prizeId } : '';
let u = userNick ? { userNick: { $regex: ".*" + userNick + ".*" } } : '';
let c = (timeStart > 0 && timeEnd > 0) ? { createTime: { $gt: timeStart, $lt: timeEnd } } : '';
let s = shipStatus
? (shipStatus == 1
? { shipStatus: { $in: [SHIP_STATUS.NO_ADDRESS, SHIP_STATUS.NO_SHIP, SHIP_STATUS.HAS_SHIP] } }
: (shipStatus == 2
? { shipStatus: { $in: [SHIP_STATUS.NO_ADDRESS, SHIP_STATUS.NO_SHIP] } }
: { shipStatus: SHIP_STATUS.HAS_SHIP }
)
)
: '';
let t = type ? { type: +type } : ''
let arr = [p, u, c, s, t];
arr = arr.filter((i) => { return i });
console.log('arr--111---', arr, "s>>>", s);
return await this.rankopenprizeDao.count({
activityId,
$and: arr
});
}
//《条件搜索》导入发货状态
async setUserShipStatus(activityId, prizeId, shipCompany, shipNum) {
prizeId = prizeId ? prizeId : "/";
shipCompany = shipCompany ? shipCompany : '';
shipNum = shipNum !== null ? shipNum : ''
let status = 0;
if (shipCompany && shipNum) {
status = SHIP_STATUS.HAS_SHIP;
} else {
status = SHIP_STATUS.NO_SHIP;
}
if (status == SHIP_STATUS.HAS_SHIP) {
return await this.rankopenprizeDao.update({
activityId,
_id: prizeId,
shipStatus: SHIP_STATUS.NO_SHIP
}, {
$set: {
shipCompany,
shipNum,
shipStatus: SHIP_STATUS.HAS_SHIP
}
})
} else {
return 0;
}
} }
} }
......
...@@ -32,6 +32,12 @@ const LOGGER_TYPE = { ...@@ -32,6 +32,12 @@ const LOGGER_TYPE = {
ERROR: 1, ERROR: 1,
INFO: 2, INFO: 2,
}; };
//物流状态
const SHIP_STATUS = {
NO_ADDRESS: 1,
NO_SHIP: 2,
HAS_SHIP: 3
}
const PRIZE_TYPE = { const PRIZE_TYPE = {
EQUITY: 1, EQUITY: 1,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment