销售人信息 对应操作

This commit is contained in:
wangshuai 2024-07-06 22:00:28 +08:00
parent 5356b9bbe6
commit 02ce48c6ea
7 changed files with 150 additions and 52 deletions

View File

@ -1,7 +1,14 @@
package com.ruoyi.business.controller; package com.ruoyi.business.controller;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.business.domain.BusStoreDayInfo;
import com.ruoyi.business.domain.BusStoreInfo;
import com.ruoyi.business.resp.RespBusStoreInfo;
import com.ruoyi.business.service.IBusStoreDayInfoService;
import com.ruoyi.business.service.IBusStoreInfoService;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -34,6 +41,12 @@ public class BusSaleInfoController extends BaseController
@Autowired @Autowired
private IBusSaleInfoService busSaleInfoService; private IBusSaleInfoService busSaleInfoService;
@Autowired
private IBusStoreInfoService iBusStoreInfoService;
@Autowired
private IBusStoreDayInfoService iBusStoreDayInfoService;
/** /**
* 查询店铺归属-销售人员统计列表 * 查询店铺归属-销售人员统计列表
*/ */
@ -43,7 +56,30 @@ public class BusSaleInfoController extends BaseController
{ {
startPage(); startPage();
List<BusSaleInfo> list = busSaleInfoService.selectBusSaleInfoList(busSaleInfo); List<BusSaleInfo> list = busSaleInfoService.selectBusSaleInfoList(busSaleInfo);
return getDataTable(list); List<BusSaleInfo> tableList = list.stream()
.map(info -> {
BusStoreInfo busStoreInfo = new BusStoreInfo();
busStoreInfo.setSaleBindId(info.getId());
int count = 0;
List<BusStoreInfo> ll = iBusStoreInfoService.selectBusStoreInfoList(busStoreInfo);
for (BusStoreInfo b:ll) {
BusStoreDayInfo busStoreDayInfo = new BusStoreDayInfo();
busStoreDayInfo.setStoreId(b.getId());
List<BusStoreDayInfo> dayList = iBusStoreDayInfoService.selectBusStoreDayInfoList(busStoreDayInfo);
for (BusStoreDayInfo day: dayList){
count = day.getLastFiveStarReviewsNum()+count;
}
}
info.setStoreNum(ll.size());
info.setLastOrderNum(0);
info.setFiveStarReviewsNum(count);
info.setReturnVisitNum(0);
return info;
})
.collect(Collectors.toList());
tableList.forEach(System.out::println);
return getDataTable(tableList);
// return getDataTable(list);
} }
@PreAuthorize("@ss.hasPermi('business:sale:list')") @PreAuthorize("@ss.hasPermi('business:sale:list')")
@ -76,6 +112,22 @@ public class BusSaleInfoController extends BaseController
return success(busSaleInfoService.selectBusSaleInfoById(id)); return success(busSaleInfoService.selectBusSaleInfoById(id));
} }
/**
* 新增店铺归属-销售人员统计
*/
@PreAuthorize("@ss.hasPermi('business:sale:add')")
@Log(title = "店铺归属-销售人员统计", businessType = BusinessType.INSERT)
@PostMapping("/saveOrUpdateSale")
public AjaxResult saveOrUpdateSale(@RequestBody BusSaleInfo busSaleInfo)
{
int count = 0;
if(busSaleInfo.getId() == null){
count = busSaleInfoService.insertBusSaleInfo(busSaleInfo);
}else{
count = busSaleInfoService.updateBusSaleInfo(busSaleInfo);
}
return toAjax(count);
}
/** /**
* 新增店铺归属-销售人员统计 * 新增店铺归属-销售人员统计
*/ */

View File

@ -5,10 +5,12 @@ import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.business.domain.BusStoreConfigInfo; import com.ruoyi.business.domain.BusStoreConfigInfo;
import com.ruoyi.business.domain.BusStoreDayInfo;
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.resp.RespBusStoreInfo; import com.ruoyi.business.resp.RespBusStoreInfo;
import com.ruoyi.business.service.IBusStoreConfigInfoService; import com.ruoyi.business.service.IBusStoreConfigInfoService;
import com.ruoyi.business.service.IBusStoreDayInfoService;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -48,6 +50,9 @@ public class BusStoreInfoController extends BaseController
@Autowired @Autowired
private IBusStoreConfigInfoService iBusStoreConfigInfoService; private IBusStoreConfigInfoService iBusStoreConfigInfoService;
@Autowired
private IBusStoreDayInfoService busStoreDayInfoService;
/** /**
* 查询店铺信息列表 * 查询店铺信息列表
*/ */
@ -65,14 +70,28 @@ public class BusStoreInfoController extends BaseController
@PreAuthorize("@ss.hasPermi('business:store:list')") @PreAuthorize("@ss.hasPermi('business:store:list')")
@GetMapping("/listA") @GetMapping("/listA")
public TableDataInfo listA(ReqBusStoreInfo reqBusStoreInfo) public TableDataInfo listA(ReqBusStoreInfo reqBusStoreInfo)
{ {//new RespBusStoreInfo(busStoreInfo1)
startPage(); startPage();
BusStoreInfo busStoreInfo = new BusStoreInfo(); BusStoreInfo busStoreInfo = new BusStoreInfo();
BeanUtils.copyProperties(reqBusStoreInfo, busStoreInfo); BeanUtils.copyProperties(reqBusStoreInfo, busStoreInfo);
List<BusStoreInfo> list = busStoreInfoService.selectBusStoreInfoList(busStoreInfo); List<BusStoreInfo> list = busStoreInfoService.selectBusStoreInfoList(busStoreInfo);
List<RespBusStoreInfo> tableList = list.stream() List<RespBusStoreInfo> tableList = list.stream()
.map(busStoreInfo1 -> new RespBusStoreInfo(busStoreInfo1)) .map(busStoreInfo1 -> {
RespBusStoreInfo info = new RespBusStoreInfo(busStoreInfo1);
BusStoreDayInfo busStoreDayInfo = new BusStoreDayInfo();
busStoreDayInfo.setStoreId(info.getId());
List<BusStoreDayInfo> ll = busStoreDayInfoService.selectBusStoreDayInfoList(busStoreDayInfo);
info.setLastOrderNum(ll.get(0).getLastOrderNum());
info.setLastPositiveReviewsNum(ll.get(0).getLastPositiveReviewsNum());
info.setLastFiveStarReviewsNum(ll.get(0).getLastFiveStarReviewsNum());
info.setLastReturnVisitNum(ll.get(0).getLastReturnVisitNum());
info.setTodayReturnVisitNum(ll.get(0).getTodayReturnVisitNum());
info.setScore(ll.get(0).getScore());
info.setLastReturnVisitRate(ll.get(0).getLastReturnVisitRate());
return info;
})
.collect(Collectors.toList()); .collect(Collectors.toList());
tableList.forEach(System.out::println);
return getDataTable(tableList); return getDataTable(tableList);
} }

View File

@ -1,6 +1,7 @@
package com.ruoyi.business.resp; package com.ruoyi.business.resp;
import com.ruoyi.business.domain.BusStoreInfo; import com.ruoyi.business.domain.BusStoreInfo;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -82,6 +83,34 @@ public class RespBusStoreInfo {
@ApiModelProperty(name = "绑定时间(创建)") @ApiModelProperty(name = "绑定时间(创建)")
private Date bindTime; private Date bindTime;
/** 昨日订单量 */
@ApiModelProperty(name = "昨日订单量")
private int lastOrderNum;
/** 昨日好评量 */
@ApiModelProperty(name = "昨日好评量")
private int lastPositiveReviewsNum;
/** 昨日五星量 */
@ApiModelProperty(name = "昨日五星量")
private int lastFiveStarReviewsNum;
/** 昨日回访量 */
@ApiModelProperty(name = "昨日回访量")
private int lastReturnVisitNum;
/** 昨日回访比50% */
@ApiModelProperty(name = "昨日回访比50%")
private String lastReturnVisitRate;
/** 今日回访量 */
@ApiModelProperty(name = "今日回访量")
private int todayReturnVisitNum;
/** 评分 */
@Excel(name = "评分")
private String score;
public RespBusStoreInfo() { public RespBusStoreInfo() {
} }

View File

@ -158,13 +158,13 @@
<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="昨日单量" align="center" /> <el-table-column label="昨日单量" prop="lastOrderNum" align="center" />
<el-table-column label="昨日好评量" align="center" /> <el-table-column label="昨日好评量" prop="lastPositiveReviewsNum" align="center" />
<el-table-column label="昨日五星量" align="center" /> <el-table-column label="昨日五星量" prop="lastFiveStarReviewsNum" align="center" />
<el-table-column label="昨日回访量" align="center" /> <el-table-column label="昨日回访量" prop="lastReturnVisitNum" align="center" />
<el-table-column label="昨日营销比(%)" align="center" :render-header="renderPrice"/> <el-table-column label="昨日营销比(%)" prop="lastReturnVisitRate" align="center" :render-header="renderPrice"/>
<el-table-column label="今日回访量" align="center" /> <el-table-column label="今日回访量" prop="todayReturnVisitNum" align="center" />
<el-table-column label="评分" align="center" /> <el-table-column label="评分" prop="score" align="center" />
<el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName"/> <el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName"/>
<el-table-column label="创建时间" align="center" prop="bindTime" width="180"> <el-table-column label="创建时间" align="center" prop="bindTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">

View File

@ -23,7 +23,7 @@
plain plain
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleUpdate" @click="handleAdd"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@ -79,8 +79,8 @@
<!-- 添加或修改角色配置对话框 --> <!-- 添加或修改角色配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="角色名称" prop="roleName"> <el-form-item label="名称" prop="saleName">
<el-input v-model="form.saleName" placeholder="请输入角色名称" /> <el-input v-model="form.saleName" placeholder="请输入销售人名称" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -167,14 +167,8 @@ export default {
}, },
// //
rules: { rules: {
roleName: [ saleName: [
{ required: true, message: "角色名称不能为空", trigger: "blur" } { required: true, message: "名称不能为空", trigger: "blur" }
],
roleKey: [
{ required: true, message: "权限字符不能为空", trigger: "blur" }
],
roleSort: [
{ required: true, message: "角色顺序不能为空", trigger: "blur" }
] ]
} }
}; };
@ -214,6 +208,12 @@ export default {
this.openDataScope = false; this.openDataScope = false;
this.reset(); this.reset();
}, },
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.roleId)
this.single = selection.length!=1
this.multiple = !selection.length
},
// //
reset() { reset() {
if (this.$refs.menu != undefined) { if (this.$refs.menu != undefined) {
@ -224,16 +224,9 @@ export default {
this.deptExpand = true, this.deptExpand = true,
this.deptNodeAll = false, this.deptNodeAll = false,
this.form = { this.form = {
roleId: undefined, id: undefined,
roleName: undefined, saleName: undefined,
roleKey: undefined, delStatus: "1"
roleSort: 0,
status: "0",
menuIds: [],
deptIds: [],
menuCheckStrictly: true,
deptCheckStrictly: true,
remark: undefined
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -251,7 +244,6 @@ export default {
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.getMenuTreeselect();
this.open = true; this.open = true;
this.title = "添加销售人"; this.title = "添加销售人";
}, },
@ -267,9 +259,9 @@ export default {
/** 提交按钮 */ /** 提交按钮 */
submitForm: function() { submitForm: function() {
this.form.delStatus = "1";
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
this.form.menuIds = this.getMenuAllCheckedKeys();
saveOrUpdateSale(this.form).then(response => { saveOrUpdateSale(this.form).then(response => {
this.$modal.msgSuccess("操作成功"); this.$modal.msgSuccess("操作成功");
this.open = false; this.open = false;
@ -280,17 +272,23 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const id = row.id ; const data = {id: row.id,delStatus: 2}
this.$modal.confirm('是否确认删除角色编号为"' + id + '"的数据项?').then(function() { this.$modal.confirm('是否确认删除解绑编号为"' + row.id + '"的店铺?').then(function() {
return saveOrUpdateSale(this.form); saveOrUpdateSale(data).then(response => {
// this.$modal.msgSuccess("");
// this.open = false;
// this.getList();
});
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(function() {
});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('system/role/export', { this.download('business/sale/export', {
...this.queryParams ...this.queryParams
}, `role_${new Date().getTime()}.xlsx`) }, `role_${new Date().getTime()}.xlsx`)
} }

View File

@ -158,13 +158,13 @@
<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="昨日单量" align="center" /> <el-table-column label="昨日单量" prop="lastOrderNum" align="center" />
<el-table-column label="昨日好评量" align="center" /> <el-table-column label="昨日好评量" prop="lastPositiveReviewsNum" align="center" />
<el-table-column label="昨日五星量" align="center" /> <el-table-column label="昨日五星量" prop="lastFiveStarReviewsNum" align="center" />
<el-table-column label="昨日回访量" align="center" /> <el-table-column label="昨日回访量" prop="lastReturnVisitNum" align="center" />
<el-table-column label="昨日营销比(%)" align="center" :render-header="renderPrice"/> <el-table-column label="昨日营销比(%)" prop="lastReturnVisitRate" align="center" :render-header="renderPrice"/>
<el-table-column label="今日回访量" align="center" /> <el-table-column label="今日回访量" prop="todayReturnVisitNum" align="center" />
<el-table-column label="评分" align="center" /> <el-table-column label="评分" prop="score" align="center" />
<el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName"/> <el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName"/>
<el-table-column label="创建时间" align="center" prop="bindTime" width="180"> <el-table-column label="创建时间" align="center" prop="bindTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">

View File

@ -158,13 +158,13 @@
<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="昨日单量" align="center" /> <el-table-column label="昨日单量" prop="lastOrderNum" align="center" />
<el-table-column label="昨日好评量" align="center" /> <el-table-column label="昨日好评量" prop="lastPositiveReviewsNum" align="center" />
<el-table-column label="昨日五星量" align="center" /> <el-table-column label="昨日五星量" prop="lastFiveStarReviewsNum" align="center" />
<el-table-column label="昨日回访量" align="center" /> <el-table-column label="昨日回访量" prop="lastReturnVisitNum" align="center" />
<el-table-column label="昨日营销比(%)" align="center" :render-header="renderPrice"/> <el-table-column label="昨日营销比(%)" prop="lastReturnVisitRate" align="center" :render-header="renderPrice"/>
<el-table-column label="今日回访量" align="center" /> <el-table-column label="今日回访量" prop="todayReturnVisitNum" align="center" />
<el-table-column label="评分" align="center" /> <el-table-column label="评分" prop="score" align="center" />
<el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName"/> <el-table-column label="归属" prop="saleBindId" align="center" :formatter="idToName"/>
<el-table-column label="创建时间" align="center" prop="bindTime" width="180"> <el-table-column label="创建时间" align="center" prop="bindTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">