parent
5f3cf75082
commit
ad405e2c73
|
@ -1,6 +1,7 @@
|
||||||
package com.ruoyi.business.controller;
|
package com.ruoyi.business.controller;
|
||||||
|
|
||||||
import com.ruoyi.business.domain.*;
|
import com.ruoyi.business.domain.*;
|
||||||
|
import com.ruoyi.business.domain.resp.RespBusStoreHistoryInfo;
|
||||||
import com.ruoyi.business.req.ReqBusStoreConfigInfo;
|
import com.ruoyi.business.req.ReqBusStoreConfigInfo;
|
||||||
import com.ruoyi.business.req.ReqBusStoreInfo;
|
import com.ruoyi.business.req.ReqBusStoreInfo;
|
||||||
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
||||||
|
@ -14,6 +15,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.system.mapper.SysDictDataMapper;
|
import com.ruoyi.system.mapper.SysDictDataMapper;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
@ -125,45 +127,7 @@ public class BusStoreInfoController extends BaseController {
|
||||||
busStoreInfo.setEndTime(busStoreInfo.getParams().get("endTime").toString()+" 23:59:59");
|
busStoreInfo.setEndTime(busStoreInfo.getParams().get("endTime").toString()+" 23:59:59");
|
||||||
}
|
}
|
||||||
List<RespBusStoreInfo> listNew = busStoreInfoService.storeStatistics(busStoreInfo);
|
List<RespBusStoreInfo> listNew = busStoreInfoService.storeStatistics(busStoreInfo);
|
||||||
TableDataInfo rspData = getDataTable(listNew);
|
return getDataTable(listNew);
|
||||||
// List<BusStoreInfo> list = busStoreInfoService.selectBusStoreInfoList(busStoreInfo);
|
|
||||||
// TableDataInfo rspData = getDataTable(list);
|
|
||||||
// List<RespBusStoreInfo> tableList = list.stream()
|
|
||||||
// .map(busStoreInfo1 -> {
|
|
||||||
// RespBusStoreInfo info = new RespBusStoreInfo(busStoreInfo1);
|
|
||||||
// BusStoreDayInfo busStoreDayInfo = new BusStoreDayInfo();
|
|
||||||
// busStoreDayInfo.setStoreId(info.getId());
|
|
||||||
// List<BusStoreDayInfo> ll = busStoreDayInfoService.selectBusStoreDayInfoList(busStoreDayInfo);
|
|
||||||
// int a = ll.get(0).getLastPositiveReviewsNum();//todo 好评-五星
|
|
||||||
// int b = ll.get(0).getLastReturnVisitNum();
|
|
||||||
// info.setLastOrderNum(ll.get(0).getLastOrderNum());
|
|
||||||
// info.setLastReturnVisitNum(b);
|
|
||||||
// info.setLastPositiveReviewsNum(a);
|
|
||||||
// info.setLastFiveStarReviewsNum(ll.get(0).getLastFiveStarReviewsNum());
|
|
||||||
//// String date = LocalDateTime.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
||||||
//// List<BusReturnVisitInfo> llll = iBusReturnVisitInfoService.selectBusReturnVisitInfoListByDate(busStoreInfo1.getStoreCode(),date);
|
|
||||||
//// info.setLastReturnVisitNum(llll.size());
|
|
||||||
// info.setScore(ll.get(0).getScore());
|
|
||||||
// if (a != 0 && b != 0) {
|
|
||||||
// info.setLastReturnVisitRate(getRate(a,b));
|
|
||||||
// } else {
|
|
||||||
// info.setLastReturnVisitRate("0");
|
|
||||||
// }
|
|
||||||
// String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
||||||
// List<BusReturnVisitInfo> lll = iBusReturnVisitInfoService.selectBusReturnVisitInfoListByDate(busStoreInfo1.getStoreCode(),today);
|
|
||||||
// info.setTodayReturnVisitNum(lll.size());
|
|
||||||
// BusStoreConfigInfo busStoreConfigInfo = new BusStoreConfigInfo();
|
|
||||||
// busStoreConfigInfo.setStoreCode(busStoreInfo1.getStoreCode());
|
|
||||||
// List<BusStoreConfigInfo> list1 = iBusStoreConfigInfoService.selectBusStoreConfigInfoList(busStoreConfigInfo);
|
|
||||||
// if(list1.size() == 1){
|
|
||||||
// info.setReturnVisitUserRange(list1.get(0).getMinOrderNum()+"~"+list1.get(0).getMaxOrderNum());
|
|
||||||
// }
|
|
||||||
// return info;
|
|
||||||
// })
|
|
||||||
// .collect(Collectors.toList());
|
|
||||||
//// tableList.forEach(System.out::println);
|
|
||||||
// rspData.setRows(tableList);
|
|
||||||
return rspData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询店铺信息列表")
|
@ApiOperation("查询店铺信息列表")
|
||||||
|
@ -176,44 +140,13 @@ public class BusStoreInfoController extends BaseController {
|
||||||
if (!"admin".equals(user.getUsername())) {
|
if (!"admin".equals(user.getUsername())) {
|
||||||
busStoreInfo.setBindUser(user.getUsername());
|
busStoreInfo.setBindUser(user.getUsername());
|
||||||
}
|
}
|
||||||
List<BusStoreInfo> list = busStoreInfoService.selectBusStoreInfoList(busStoreInfo);
|
if(StringUtils.isEmpty(busStoreInfo.getStoreBelong())){
|
||||||
TableDataInfo rspData = getDataTable(list);
|
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
List<RespBusStoreInfo> tableList = list.stream()
|
LocalDateTime localDateTime = LocalDateTime.now().minusDays(1);
|
||||||
.map(busStoreInfo1 -> {
|
busStoreInfo.setStoreBelong(localDateTime.format(dateTimeFormatter));
|
||||||
RespBusStoreInfo info = new RespBusStoreInfo(busStoreInfo1);
|
}
|
||||||
BusStoreDayInfo busStoreDayInfo = new BusStoreDayInfo();
|
List<RespBusStoreHistoryInfo> list = busStoreInfoService.storeHistoryStatistics(busStoreInfo);
|
||||||
busStoreDayInfo.setStoreId(info.getId());
|
return getDataTable(list);
|
||||||
List<BusStoreDayInfo> ll = busStoreDayInfoService.selectBusStoreDayInfoList(busStoreDayInfo);
|
|
||||||
int a = ll.get(0).getLastPositiveReviewsNum();//todo 好评-五星
|
|
||||||
int b = ll.get(0).getLastReturnVisitNum();
|
|
||||||
info.setLastOrderNum(ll.get(0).getLastOrderNum());
|
|
||||||
info.setLastReturnVisitNum(b);
|
|
||||||
info.setLastPositiveReviewsNum(a);
|
|
||||||
info.setLastFiveStarReviewsNum(ll.get(0).getLastFiveStarReviewsNum());
|
|
||||||
// String date = LocalDateTime.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
||||||
// List<BusReturnVisitInfo> llll = iBusReturnVisitInfoService.selectBusReturnVisitInfoListByDate(busStoreInfo1.getStoreCode(),date);
|
|
||||||
// info.setLastReturnVisitNum(llll.size());
|
|
||||||
info.setScore(ll.get(0).getScore());
|
|
||||||
if (a != 0 && b != 0) {
|
|
||||||
info.setLastReturnVisitRate(getRate(a,b));
|
|
||||||
} else {
|
|
||||||
info.setLastReturnVisitRate("0");
|
|
||||||
}
|
|
||||||
String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
||||||
List<BusReturnVisitInfo> lll = iBusReturnVisitInfoService.selectBusReturnVisitInfoListByDate(busStoreInfo1.getStoreCode(),today);
|
|
||||||
info.setTodayReturnVisitNum(lll.size());
|
|
||||||
BusStoreConfigInfo busStoreConfigInfo = new BusStoreConfigInfo();
|
|
||||||
busStoreConfigInfo.setStoreCode(busStoreInfo1.getStoreCode());
|
|
||||||
List<BusStoreConfigInfo> list1 = iBusStoreConfigInfoService.selectBusStoreConfigInfoList(busStoreConfigInfo);
|
|
||||||
if(list1.size() == 1){
|
|
||||||
info.setReturnVisitUserRange(list1.get(0).getMinOrderNum()+"~"+list1.get(0).getMaxOrderNum());
|
|
||||||
}
|
|
||||||
return info;
|
|
||||||
})
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
// tableList.forEach(System.out::println);
|
|
||||||
rspData.setRows(tableList);
|
|
||||||
return rspData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("查询店铺信息列表")
|
@ApiOperation("查询店铺信息列表")
|
||||||
|
|
|
@ -52,4 +52,7 @@ public class ReqBusStoreInfo extends BaseEntity {
|
||||||
/** 回访渠道 */
|
/** 回访渠道 */
|
||||||
@ApiModelProperty(name = "回访渠道")
|
@ApiModelProperty(name = "回访渠道")
|
||||||
private String marketingChannels;
|
private String marketingChannels;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "统计时间")
|
||||||
|
private String storeBelong;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package com.ruoyi.business.domain.resp;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.annotation.JSONField;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.ruoyi.business.domain.BusStoreInfo;
|
||||||
|
import com.ruoyi.common.annotation.Excel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RespBusStoreHistoryInfo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* $column.columnComment
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 平台类型
|
||||||
|
*/
|
||||||
|
@Excel(name = "平台类型")
|
||||||
|
@JSONField(ordinal = 1)
|
||||||
|
private String platformType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺编码
|
||||||
|
*/
|
||||||
|
@Excel(name = "编号")
|
||||||
|
@JSONField(ordinal = 2)
|
||||||
|
private String storeCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺名称
|
||||||
|
*/
|
||||||
|
@Excel(name = "名称")
|
||||||
|
@JSONField(ordinal = 3)
|
||||||
|
private String storeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺归属
|
||||||
|
*/
|
||||||
|
// @ApiModelProperty(name = "归属")
|
||||||
|
private String storeBelong;
|
||||||
|
|
||||||
|
@Excel(name = "昨日单量")
|
||||||
|
@JSONField(ordinal = 4)
|
||||||
|
private int lastOrderNum;
|
||||||
|
|
||||||
|
/** 昨日好评量 */
|
||||||
|
@Excel(name = "昨日好评量")
|
||||||
|
@JSONField(ordinal = 5)
|
||||||
|
private int lastPositiveReviewsNum;
|
||||||
|
|
||||||
|
/** 昨日五星量 */
|
||||||
|
@Excel(name = "昨日五星量")
|
||||||
|
@JSONField(ordinal = 6)
|
||||||
|
private int lastFiveStarReviewsNum;
|
||||||
|
|
||||||
|
/** 昨日回访量 */
|
||||||
|
@Excel(name = "昨日回访量")
|
||||||
|
@JSONField(ordinal = 7)
|
||||||
|
private int lastReturnVisitNum;
|
||||||
|
|
||||||
|
/** 昨日回访比50% */
|
||||||
|
@Excel(name = "昨日回访比")
|
||||||
|
@JSONField(ordinal = 8)
|
||||||
|
private String lastReturnVisitRate;
|
||||||
|
|
||||||
|
/** 金额 */
|
||||||
|
@Excel(name = "金额")
|
||||||
|
@JSONField(ordinal = 9)
|
||||||
|
private int price;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定时间(创建)
|
||||||
|
*/
|
||||||
|
@Excel(name = "金额")
|
||||||
|
@JSONField(ordinal = 10)
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private Date bindTime;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** 评分 */
|
||||||
|
@Excel(name = "评分")
|
||||||
|
@JSONField(ordinal = 11)
|
||||||
|
private String score;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package com.ruoyi.business.mapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.ruoyi.business.domain.BusStoreInfo;
|
import com.ruoyi.business.domain.BusStoreInfo;
|
||||||
|
import com.ruoyi.business.domain.resp.RespBusStoreHistoryInfo;
|
||||||
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
@ -72,4 +73,9 @@ public interface BusStoreInfoMapper
|
||||||
List<RespBusStoreInfo> storeStatistics(BusStoreInfo busStoreInfo);
|
List<RespBusStoreInfo> storeStatistics(BusStoreInfo busStoreInfo);
|
||||||
|
|
||||||
List<RespBusStoreInfo> storeStatisticsExport(BusStoreInfo busStoreInfo);
|
List<RespBusStoreInfo> storeStatisticsExport(BusStoreInfo busStoreInfo);
|
||||||
|
|
||||||
|
List<RespBusStoreHistoryInfo> storeHistoryStatistics(BusStoreInfo busStoreInfo);
|
||||||
|
|
||||||
|
List<RespBusStoreHistoryInfo> storeHistoryStatisticsExport(BusStoreInfo busStoreInfo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import java.util.List;
|
||||||
|
|
||||||
import com.ruoyi.business.domain.BusStoreConfigInfo;
|
import com.ruoyi.business.domain.BusStoreConfigInfo;
|
||||||
import com.ruoyi.business.domain.BusStoreInfo;
|
import com.ruoyi.business.domain.BusStoreInfo;
|
||||||
|
import com.ruoyi.business.domain.resp.RespBusStoreHistoryInfo;
|
||||||
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -87,5 +88,7 @@ public interface IBusStoreInfoService
|
||||||
|
|
||||||
List<RespBusStoreInfo> storeStatisticsExport(BusStoreInfo busStoreInfo);
|
List<RespBusStoreInfo> storeStatisticsExport(BusStoreInfo busStoreInfo);
|
||||||
|
|
||||||
|
List<RespBusStoreHistoryInfo> storeHistoryStatistics(BusStoreInfo busStoreInfo);
|
||||||
|
|
||||||
int changeStoreStatus(BusStoreInfo busStoreInfo);
|
int changeStoreStatus(BusStoreInfo busStoreInfo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.List;
|
||||||
import com.ruoyi.business.domain.BusMarketOperationInfo;
|
import com.ruoyi.business.domain.BusMarketOperationInfo;
|
||||||
import com.ruoyi.business.domain.BusSaleInfo;
|
import com.ruoyi.business.domain.BusSaleInfo;
|
||||||
import com.ruoyi.business.domain.BusStoreConfigInfo;
|
import com.ruoyi.business.domain.BusStoreConfigInfo;
|
||||||
|
import com.ruoyi.business.domain.resp.RespBusStoreHistoryInfo;
|
||||||
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
import com.ruoyi.business.domain.resp.RespBusStoreInfo;
|
||||||
import com.ruoyi.business.mapper.BusMarketOperationInfoMapper;
|
import com.ruoyi.business.mapper.BusMarketOperationInfoMapper;
|
||||||
import com.ruoyi.business.mapper.BusSaleInfoMapper;
|
import com.ruoyi.business.mapper.BusSaleInfoMapper;
|
||||||
|
@ -172,6 +173,12 @@ public class BusStoreInfoServiceImpl implements IBusStoreInfoService
|
||||||
public List<RespBusStoreInfo> storeStatisticsExport(BusStoreInfo busStoreInfo) {
|
public List<RespBusStoreInfo> storeStatisticsExport(BusStoreInfo busStoreInfo) {
|
||||||
return busStoreInfoMapper.storeStatisticsExport(busStoreInfo);
|
return busStoreInfoMapper.storeStatisticsExport(busStoreInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RespBusStoreHistoryInfo> storeHistoryStatistics(BusStoreInfo busStoreInfo) {
|
||||||
|
return busStoreInfoMapper.storeHistoryStatistics(busStoreInfo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除店铺信息
|
* 批量删除店铺信息
|
||||||
*
|
*
|
||||||
|
|
|
@ -159,6 +159,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="bindId != null "> and s.bind_id = #{bindId}</if>
|
<if test="bindId != null "> and s.bind_id = #{bindId}</if>
|
||||||
ORDER BY s.bind_time desc
|
ORDER BY s.bind_time desc
|
||||||
</select>
|
</select>
|
||||||
|
<select id="storeHistoryStatistics" resultType="com.ruoyi.business.domain.resp.RespBusStoreHistoryInfo">
|
||||||
|
SELECT s.id,
|
||||||
|
s.platform_type platformType,
|
||||||
|
s.store_code storeCode,
|
||||||
|
s.store_name storeName,
|
||||||
|
sd.last_order_num lastOrderNum,
|
||||||
|
sd.last_positive_reviews_num lastPositiveReviewsNum,
|
||||||
|
sd.last_five_star_reviews_num lastFiveStarReviewsNum,
|
||||||
|
sd.last_return_visit_num lastReturnVisitNum,
|
||||||
|
ifnull(round((sd.last_positive_reviews_num/sd.last_return_visit_num)*100,2),0) as lastReturnVisitRate,
|
||||||
|
sd.score,
|
||||||
|
s.price,
|
||||||
|
DATE_FORMAT(sd.create_time,'%Y-%m-%d') bindTime
|
||||||
|
FROM bus_store_info s
|
||||||
|
LEFT JOIN bus_store_day_history_info sd ON s.id = sd.store_id and DATE_FORMAT(sd.create_time,'%Y-%m-%d') = #{storeBelong}
|
||||||
|
LEFT JOIN bus_store_config_info sc ON s.store_code = sc.store_code
|
||||||
|
where s.self_delivery_status != '3'
|
||||||
|
<if test="selfDeliveryStatus != null and selfDeliveryStatus != ''"> and s.self_delivery_status = #{selfDeliveryStatus}</if>
|
||||||
|
<if test="saleBindId != null "> and s.sale_bind_id = #{saleBindId}</if>
|
||||||
|
<if test="bindUser != null and bindUser != ''"> and s.bind_user = #{bindUser}</if>
|
||||||
|
<if test="platformType != null and platformType != ''"> and s.platform_type = #{platformType}</if>
|
||||||
|
<if test="storeCode != null and storeCode != ''"> and s.store_code = #{storeCode}</if>
|
||||||
|
<if test="storeName != null and storeName != ''"> and s.store_name like concat('%', #{storeName}, '%')</if>
|
||||||
|
<if test="grantStatus != null and grantStatus != ''"> and s.grant_status = #{grantStatus}</if>
|
||||||
|
<if test="returnVisitStatus != null and returnVisitStatus != ''"> and s.return_visit_status = #{returnVisitStatus}</if>
|
||||||
|
<if test="marketingChannels != null and marketingChannels != ''"> and s.marketing_channels = #{marketingChannels}</if>
|
||||||
|
<if test="bindId != null "> and s.bind_id = #{bindId}</if>
|
||||||
|
</select>
|
||||||
<select id="storeStatisticsExport" resultType="com.ruoyi.business.domain.resp.RespBusStoreInfo">
|
<select id="storeStatisticsExport" resultType="com.ruoyi.business.domain.resp.RespBusStoreInfo">
|
||||||
SELECT
|
SELECT
|
||||||
s.id,
|
s.id,
|
||||||
|
@ -185,7 +213,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
sd.last_five_star_reviews_num lastFiveStarReviewsNum,
|
sd.last_five_star_reviews_num lastFiveStarReviewsNum,
|
||||||
sd.last_return_visit_num lastReturnVisitNum,
|
sd.last_return_visit_num lastReturnVisitNum,
|
||||||
ifnull(round((sd.last_positive_reviews_num/sd.last_return_visit_num)*100,2),0) as lastReturnVisitRate,
|
ifnull(round((sd.last_positive_reviews_num/sd.last_return_visit_num)*100,2),0) as lastReturnVisitRate,
|
||||||
ifnull(sdd.ct,0) todayReturnVisitNum,
|
s.price,
|
||||||
sd.score,
|
sd.score,
|
||||||
s.bind_time bindTime,
|
s.bind_time bindTime,
|
||||||
CONCAT(sc.min_order_num,'~',sc.max_order_num) returnVisitUserRange,
|
CONCAT(sc.min_order_num,'~',sc.max_order_num) returnVisitUserRange,
|
||||||
|
@ -196,14 +224,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
END selfDeliveryStatus
|
END selfDeliveryStatus
|
||||||
FROM
|
FROM
|
||||||
bus_store_info s
|
bus_store_info s
|
||||||
LEFT JOIN bus_store_day_info sd ON s.id = sd.store_id
|
LEFT JOIN bus_store_day_history_info sd ON s.id = sd.store_id and DATE_FORMAT(sd.create_time,'%Y-%m-%d') = #{storeBelong}
|
||||||
LEFT JOIN bus_store_config_info sc ON s.store_code = sc.store_code
|
LEFT JOIN bus_store_config_info sc ON s.store_code = sc.store_code
|
||||||
LEFT JOIN (
|
|
||||||
select rv.store_code,count(rv.id) ct
|
|
||||||
from bus_return_visit_info rv
|
|
||||||
where DATE_FORMAT(rv.return_visit_time,'%Y-%m-%d') = CURDATE()
|
|
||||||
group by rv.store_code
|
|
||||||
) sdd ON sdd.store_code = s.store_code
|
|
||||||
where s.self_delivery_status != '3'
|
where s.self_delivery_status != '3'
|
||||||
<if test="selfDeliveryStatus != null and selfDeliveryStatus != ''"> and s.self_delivery_status = #{selfDeliveryStatus}</if>
|
<if test="selfDeliveryStatus != null and selfDeliveryStatus != ''"> and s.self_delivery_status = #{selfDeliveryStatus}</if>
|
||||||
<if test="saleBindId != null "> and s.sale_bind_id = #{saleBindId}</if>
|
<if test="saleBindId != null "> and s.sale_bind_id = #{saleBindId}</if>
|
||||||
|
@ -218,6 +240,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
ORDER BY s.bind_time desc
|
ORDER BY s.bind_time desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="storeHistoryStatisticsExport" resultType="com.ruoyi.business.domain.resp.RespBusStoreHistoryInfo">
|
||||||
|
SELECT
|
||||||
|
s.id,
|
||||||
|
CASE s.platform_type
|
||||||
|
WHEN '1' THEN '美团'
|
||||||
|
WHEN '2' THEN '饿了么'
|
||||||
|
ELSE ''
|
||||||
|
END as platformType,
|
||||||
|
s.store_code storeCode,
|
||||||
|
s.store_name storeName,
|
||||||
|
sd.last_order_num lastOrderNum,
|
||||||
|
sd.last_positive_reviews_num lastPositiveReviewsNum,
|
||||||
|
sd.last_five_star_reviews_num lastFiveStarReviewsNum,
|
||||||
|
sd.last_return_visit_num lastReturnVisitNum,
|
||||||
|
ifnull(round((sd.last_positive_reviews_num/sd.last_return_visit_num)*100,2),0) as lastReturnVisitRate,
|
||||||
|
s.price,
|
||||||
|
sd.score,
|
||||||
|
DATE_FORMAT(sd.create_time,'%Y-%m-%d') bindTime
|
||||||
|
FROM bus_store_info s
|
||||||
|
LEFT JOIN bus_store_day_history_info sd ON s.id = sd.store_id and DATE_FORMAT(sd.create_time,'%Y-%m-%d') = #{storeBelong}
|
||||||
|
LEFT JOIN bus_store_config_info sc ON s.store_code = sc.store_code
|
||||||
|
where s.self_delivery_status != '3'
|
||||||
|
<if test="saleBindId != null "> and s.sale_bind_id = #{saleBindId}</if>
|
||||||
|
<if test="bindUser != null and bindUser != ''"> and s.bind_user = #{bindUser}</if>
|
||||||
|
<if test="platformType != null and platformType != ''"> and s.platform_type = #{platformType}</if>
|
||||||
|
<if test="storeCode != null and storeCode != ''"> and s.store_code = #{storeCode}</if>
|
||||||
|
<if test="storeName != null and storeName != ''"> and s.store_name like concat('%', #{storeName}, '%')</if>
|
||||||
|
<if test="grantStatus != null and grantStatus != ''"> and s.grant_status = #{grantStatus}</if>
|
||||||
|
<if test="returnVisitStatus != null and returnVisitStatus != ''"> and s.return_visit_status = #{returnVisitStatus}</if>
|
||||||
|
<if test="marketingChannels != null and marketingChannels != ''"> and s.marketing_channels = #{marketingChannels}</if>
|
||||||
|
<if test="bindId != null "> and s.bind_id = #{bindId}</if>
|
||||||
|
</select>
|
||||||
|
|
||||||
<insert id="insertBusStoreInfo" parameterType="BusStoreInfo" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertBusStoreInfo" parameterType="BusStoreInfo" useGeneratedKeys="true" keyProperty="id">
|
||||||
insert into bus_store_info
|
insert into bus_store_info
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
|
|
|
@ -8,7 +8,14 @@ export function listStore(query) {
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 查询店铺列表
|
||||||
|
export function listHistory(query) {
|
||||||
|
return request({
|
||||||
|
url: '/business/store/listHistory',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
// 查询归属销售列表
|
// 查询归属销售列表
|
||||||
export function getMtUrl(query) {
|
export function getMtUrl(query) {
|
||||||
return request({
|
return request({
|
||||||
|
|
|
@ -113,17 +113,26 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="10">
|
<el-col :span="5">
|
||||||
<el-form-item label="创建时间">
|
<el-form-item label="统计时间">
|
||||||
<el-date-picker
|
<el-date-picker clearable
|
||||||
|
v-model="queryParams.storeBelong"
|
||||||
|
type="date"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
placeholder="请选择统计时间"
|
||||||
|
style="width: 240px">
|
||||||
|
</el-date-picker>
|
||||||
|
<!-- <el-date-picker
|
||||||
v-model="dateRange"
|
v-model="dateRange"
|
||||||
value-format="yyyy-MM-dd"
|
value-format="yyyy-MM-dd"
|
||||||
type="daterange"
|
type="daterange"
|
||||||
range-separator="至"
|
range-separator="至"
|
||||||
start-placeholder="开始日期"
|
start-placeholder="开始日期"
|
||||||
end-placeholder="结束日期">
|
end-placeholder="结束日期">
|
||||||
</el-date-picker>
|
</el-date-picker> -->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="5">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
<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 icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
@ -175,32 +184,28 @@
|
||||||
{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}
|
{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="名称" prop="storeName" align="center" />
|
||||||
|
<el-table-column label="编号" prop="storeCode" align="center" />
|
||||||
<el-table-column label="平台" prop="platformType" width="55">
|
<el-table-column label="平台" prop="platformType" width="55">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :options="dict.type.sys_platform_type" :value="scope.row.platformType"/>
|
<dict-tag :options="dict.type.sys_platform_type" :value="scope.row.platformType"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="编号" prop="storeCode" align="center" />
|
<!-- <el-table-column label="在线状态" prop ="grantStatus" align="center" width="75" >
|
||||||
<el-table-column label="名称" prop="storeName" align="center" />
|
|
||||||
<el-table-column label="在线状态" prop ="grantStatus" align="center" width="75" >
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :options="dict.type.sys_grant_status" :value="scope.row.grantStatus"/>
|
<dict-tag :options="dict.type.sys_grant_status" :value="scope.row.grantStatus"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
<el-table-column label="昨日单量" prop="lastOrderNum" align="center" width="75"/>
|
<el-table-column label="昨日单量" prop="lastOrderNum" align="center" />
|
||||||
<el-table-column label="昨日好评量" prop="lastPositiveReviewsNum" align="center" width="85"/>
|
<el-table-column label="昨日好评量" prop="lastPositiveReviewsNum" align="center" />
|
||||||
<el-table-column label="昨日五星量" prop="lastFiveStarReviewsNum" align="center" width="85"/>
|
<el-table-column label="昨日五星量" prop="lastFiveStarReviewsNum" align="center" />
|
||||||
<el-table-column label="昨日回访量" prop="lastReturnVisitNum" align="center" width="85"/>
|
<el-table-column label="昨日回访量" prop="lastReturnVisitNum" align="center" />
|
||||||
<el-table-column label="昨日H评比(%)" prop="lastReturnVisitRate" align="center" :render-header="renderPrice" width="120" />
|
<el-table-column label="昨日H评比(%)" prop="lastReturnVisitRate" align="center" :render-header="renderPrice" />
|
||||||
<el-table-column label="今日回访量" prop="todayReturnVisitNum" align="center" width="85" />
|
<!-- <el-table-column label="今日回访量" prop="todayReturnVisitNum" align="center" /> -->
|
||||||
<el-table-column label="评分" prop="score" align="center" width="55" />
|
<el-table-column label="评分" prop="score" align="center" />
|
||||||
<el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName" width="65" />
|
<!-- <el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName" /> -->
|
||||||
<el-table-column label="创建时间" align="center" prop="bindTime" width="160">
|
<el-table-column label="统计时间" align="center" prop="bindTime"/>
|
||||||
<template slot-scope="scope">
|
<!-- <el-table-column label="营销用户下单" prop="returnVisitUserRange" align="center" /> -->
|
||||||
<span>{{ parseTime(scope.row.bindTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="营销用户下单" prop="returnVisitUserRange" align="center" width="110" />
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width =120>
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width =120>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
|
@ -226,128 +231,6 @@
|
||||||
:limit.sync="queryParams.pageSize"
|
:limit.sync="queryParams.pageSize"
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
/>
|
/>
|
||||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="150px">
|
|
||||||
<el-form-item label="早高峰时段-方案" prop="content1">
|
|
||||||
<!-- <el-input v-model="form.storeCode" placeholder="店铺编码" /> -->
|
|
||||||
<el-select
|
|
||||||
v-model="form.content1"
|
|
||||||
placeholder="选择话术"
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in dict.type.bus_script_type"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="午高峰时段-方案" prop="content2">
|
|
||||||
<el-select
|
|
||||||
v-model="form.content2"
|
|
||||||
placeholder="选择话术"
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in dict.type.bus_script_type"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="晚高峰时段-方案" prop="content3">
|
|
||||||
<el-select
|
|
||||||
v-model="form.content3"
|
|
||||||
placeholder="选择话术"
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in dict.type.bus_script_type"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="默认时间段-方案" prop="content4">
|
|
||||||
<el-select
|
|
||||||
v-model="form.content4"
|
|
||||||
placeholder="选择话术"
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in dict.type.bus_script_type"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="营销用户-下单次数 >=" prop="min_order_num">
|
|
||||||
<el-input-number v-model="form.minOrderNum" placeholder="请输入营销下单次数" :min="1"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="营销用户-下单次数 <=" prop="max_order_num">
|
|
||||||
<el-input-number v-model="form.maxOrderNum" placeholder="请输入营销下单次数" :min="1"/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="营销时段" prop="start_time">
|
|
||||||
<el-time-picker
|
|
||||||
is-range
|
|
||||||
v-model="timeRange"
|
|
||||||
value-format = "HH:mm:ss"
|
|
||||||
range-separator="至"
|
|
||||||
start-placeholder="开始时间"
|
|
||||||
end-placeholder="结束时间"
|
|
||||||
placeholder="选择时间范围">
|
|
||||||
</el-time-picker>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="营销时长" prop="selfDeliveryDuration">
|
|
||||||
<el-input-number v-model="form.selfDeliveryDuration" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="营销限额" prop="quota">
|
|
||||||
<el-input-number v-model="form.quota" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="是否拼好饭">
|
|
||||||
<el-radio-group v-model="form.isSpliceOrder">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in dict.type.sys_yes_no"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{dict.label}}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="店铺归属" prop="saleBindId">
|
|
||||||
<el-select
|
|
||||||
v-model="form.saleBindId"
|
|
||||||
placeholder="店铺归属"
|
|
||||||
filterable
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in saleList"
|
|
||||||
:key="dict.id"
|
|
||||||
:label="dict.saleName+' :'+dict.id"
|
|
||||||
:value="dict.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="备注">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
|
||||||
<!-- <img class="btn" :src="imageUrl" alt="your-image-description" > -->
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<el-dialog :visible.sync="open1" width="800px" append-to-body>
|
<el-dialog :visible.sync="open1" width="800px" append-to-body>
|
||||||
<el-form ref="form1" :model="form1" label-width="150px">
|
<el-form ref="form1" :model="form1" label-width="150px">
|
||||||
|
@ -386,7 +269,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
import { listStore, changeReturnVisitStatus, getMtUrl, changeSelfDeliveryStatus, getStoreConfig, updateStoreConfig, getStoreStatistics, generateWord, nowIntegral, setUpPrize } from "@/api/business/store";
|
import { listHistory, changeReturnVisitStatus, getMtUrl, changeSelfDeliveryStatus, getStoreConfig, updateStoreConfig, getStoreStatistics, generateWord, nowIntegral, setUpPrize } from "@/api/business/store";
|
||||||
import { listSaleA} from "@/api/business/sale";
|
import { listSaleA} from "@/api/business/sale";
|
||||||
import { listA} from "@/api/agent/info";
|
import { listA} from "@/api/agent/info";
|
||||||
|
|
||||||
|
@ -443,7 +326,8 @@ export default {
|
||||||
storeName: undefined,
|
storeName: undefined,
|
||||||
saleBindId: undefined,
|
saleBindId: undefined,
|
||||||
grantStatus: undefined,
|
grantStatus: undefined,
|
||||||
returnVisitStatus: undefined
|
returnVisitStatus: undefined,
|
||||||
|
storeBelong: undefined
|
||||||
},
|
},
|
||||||
saleList: [],
|
saleList: [],
|
||||||
agentList:[],
|
agentList:[],
|
||||||
|
@ -505,7 +389,7 @@ export default {
|
||||||
/** 查询角色列表 */
|
/** 查询角色列表 */
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
listStore(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
|
listHistory(this.queryParams).then(response => {
|
||||||
this.storeList = response.rows;
|
this.storeList = response.rows;
|
||||||
this.total = response.total;
|
this.total = response.total;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
|
Loading…
Reference in New Issue