订单相关优化

This commit is contained in:
xiezhijun 2021-02-25 17:30:51 +08:00
parent a793e1dbee
commit 204529f52e
12 changed files with 172 additions and 147 deletions
stdiet-admin/src/main/java/com/stdiet/web/controller/custom
stdiet-custom/src/main
java/com/stdiet/custom
resources/mapper/custom
stdiet-ui/src
components
OrderAdd
OrderDetail
OrderDrawer
OrderEdit
store
views/custom/order

@ -11,6 +11,7 @@ import com.stdiet.custom.controller.OrderBaseController;
import com.stdiet.custom.domain.SysOrder;
import com.stdiet.custom.page.OrderTableDataInfo;
import com.stdiet.custom.service.ISysOrderService;
import com.stdiet.custom.utils.OrderUtils;
import com.stdiet.system.service.ISysDictDataService;
import com.stdiet.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
@ -52,34 +53,8 @@ public class SysOrderController extends OrderBaseController {
if (totalAmount == null) {
totalAmount = new BigDecimal(0);
}
for (SysOrder order : list) {
for (SysUser user : userList) {
if (user.getUserId().equals(order.getPreSaleId())) {
order.setPreSale(user.getNickName());
}
if (user.getUserId().equals(order.getAfterSaleId())) {
order.setAfterSale(user.getNickName());
}
if (user.getUserId().equals(order.getNutritionistId())) {
order.setNutritionist(user.getNickName());
}
if (user.getUserId().equals(order.getNutriAssisId())) {
order.setNutriAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorId())) {
order.setOperator(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerId())) {
order.setPlanner(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerAssisId())) {
order.setPlannerAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorAssisId())) {
order.setOperatorAssis(user.getNickName());
}
}
initUserNickNameAndOrderType(userList,order);
if (StringUtils.isNotEmpty(order.getPhone())) {
order.setPhone(StringUtils.hiddenPhoneNumber(order.getPhone()));
}
@ -103,37 +78,8 @@ public class SysOrderController extends OrderBaseController {
public AjaxResult export(SysOrder sysOrder) {
List<SysOrder> list = sysOrderService.selectSysOrderList(sysOrder);
List<SysUser> userList = userService.selectAllUser();
for (SysOrder order : list) {
for (SysUser user : userList) {
if (user.getUserId().equals(order.getPreSaleId())) {
order.setPreSale(user.getNickName());
}
if (user.getUserId().equals(order.getAfterSaleId())) {
order.setAfterSale(user.getNickName());
}
if (user.getUserId().equals(order.getNutritionistId())) {
order.setNutritionist(user.getNickName());
}
if (user.getUserId().equals(order.getNutriAssisId())) {
order.setNutriAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorId())) {
order.setOperator(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerId())) {
order.setPlanner(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerAssisId())) {
order.setPlannerAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorAssisId())) {
order.setOperatorAssis(user.getNickName());
}
}
if (StringUtils.isNotEmpty(order.getPhone())) {
order.setPhone(StringUtils.hiddenPhoneNumber(order.getPhone()));
}
initUserNickNameAndOrderType(userList,order);
}
ExcelUtil<SysOrder> util = new ExcelUtil<SysOrder>(SysOrder.class);
return util.exportExcel(list, "order");
@ -157,36 +103,44 @@ public class SysOrderController extends OrderBaseController {
SysOrder order = sysOrderService.selectSysOrderById(orderId);
if (order != null) {
List<SysUser> userList = userService.selectAllUser();
for (SysUser user : userList) {
if (user.getUserId().equals(order.getPreSaleId())) {
order.setPreSale(user.getNickName());
}
if (user.getUserId().equals(order.getAfterSaleId())) {
order.setAfterSale(user.getNickName());
}
if (user.getUserId().equals(order.getNutritionistId())) {
order.setNutritionist(user.getNickName());
}
if (user.getUserId().equals(order.getNutriAssisId())) {
order.setNutriAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorId())) {
order.setOperator(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerId())) {
order.setPlanner(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerAssisId())) {
order.setPlannerAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorAssisId())) {
order.setOperatorAssis(user.getNickName());
}
}
initUserNickNameAndOrderType(userList,order);
}
return AjaxResult.success(order);
}
private void initUserNickNameAndOrderType(List<SysUser> userList, SysOrder order){
for (SysUser user : userList) {
if (user.getUserId().equals(order.getPreSaleId())) {
order.setPreSale(user.getNickName());
}
if (user.getUserId().equals(order.getOnSaleId())) {
order.setOnSale(user.getNickName());
}
if (user.getUserId().equals(order.getAfterSaleId())) {
order.setAfterSale(user.getNickName());
}
if (user.getUserId().equals(order.getNutritionistId())) {
order.setNutritionist(user.getNickName());
}
if (user.getUserId().equals(order.getNutriAssisId())) {
order.setNutriAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorId())) {
order.setOperator(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerId())) {
order.setPlanner(user.getNickName());
}
if (user.getUserId().equals(order.getPlannerAssisId())) {
order.setPlannerAssis(user.getNickName());
}
if (user.getUserId().equals(order.getOperatorAssisId())) {
order.setOperatorAssis(user.getNickName());
}
}
order.setOrderTypeName(OrderUtils.getOrderTypeName(order));
}
/**
* 新增销售订单
*/

@ -77,9 +77,11 @@ public class SysOrder extends BaseEntity {
private String preSale;
/** 售中ID */
@Excel(name = "售中ID")
private Long onSaleId;
@Excel(name = "售中")
private String onSale;
/**
* 售后
*/
@ -235,23 +237,21 @@ public class SysOrder extends BaseEntity {
private Integer amountFlag;
/** 订单类型 0普通单 1比例拆分单 2体验单 */
@Excel(name = "订单类型 0普通单 1比例拆分单 2体验单")
private String orderType;
@Excel(name = "订单类型")
private String orderTypeName;
/** 订单次数类型 0一开单 1二开单 */
@Excel(name = "订单次数类型 0一开单 1二开单")
private String orderCountType;
/** 订单金额类型 0全款单 1定金单 2尾款单 */
@Excel(name = "订单金额类型 0全款单 1定金单 2尾款单")
private String orderMoneyType;
/** 拆分订单中的主订单id非拆分订单时该id都为0 */
@Excel(name = "拆分订单中的主订单id非拆分订单时该id都为0")
private Long mainOrderId;
/** 售后二开提成单, 0非提成单 1提成单 */
@Excel(name = "售后二开提成单, 0非提成单 1提成单")
private Integer afterSaleCommissOrder;
/** 删除标记 */

@ -187,6 +187,11 @@ public class SysOrderServiceImpl implements ISysOrderService {
setOrderServerEndDate(sysOrder);
sysOrder.setUpdateBy(SecurityUtils.getUsername());
sysOrder.setUpdateTime(DateUtils.getNowDate());
//体验单
/*if("2".equals(sysOrder.getOrderType())){
}*/
//更新订单
int row = sysOrderMapper.updateSysOrder(sysOrder);
// 审核后的订单才生成食谱

@ -0,0 +1,26 @@
package com.stdiet.custom.utils;
import com.stdiet.custom.domain.SysOrder;
public class OrderUtils {
private static final String[] orderTypeArray = {"普通单","比例拆分单","体验单"};
private static final String[] orderCountTypeArray = {"一开单","二开单"};
private static final String[] orderMoneyTypeArray = {"全款单","定金单","尾款单"};
/**
* 根据订单对象获取订单类型名称
* @param sysOrder
* @return
*/
public static final String getOrderTypeName(SysOrder sysOrder){
String orderTypeName = "";
orderTypeName += orderTypeArray[Integer.parseInt(sysOrder.getOrderType())];
orderTypeName += "/"+orderCountTypeArray[Integer.parseInt(sysOrder.getOrderCountType())];
orderTypeName += "/"+orderMoneyTypeArray[Integer.parseInt(sysOrder.getOrderMoneyType())];
return orderTypeName;
}
}

@ -59,7 +59,8 @@
select o.order_id, o.review_status, o.cus_id, sc.name as customer, sc.phone, o.amount, o.start_time, o.pause_time, o.status, o.weight, ser.dict_label as serve_time,
o.serve_time_id, o.pay_type_id, pay.dict_label as pay_type, o.pre_sale_id, o.create_by, o.create_time, o.after_sale_id, o.update_by, o.update_time,
o.nutritionist_id, o.remark, o.nutri_assis_id, o.account_id, acc.dict_label as account, o.planner_id, o.planner_assis_id, o.operator_id, o.operator_assis_id,
o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,o.become_fan_time
o.recommender, o.order_time,o.give_serve_day,o.conditioning_project_id,cp.dict_label as conditioning_project,o.server_end_time,o.become_fan_time,
o.on_sale_id,o.order_type,o.order_count_type,o.order_money_type,o.main_order_id,o.after_sale_commiss_order
from sys_order o
LEFT JOIN sys_customer sc ON sc.id = o.cus_id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_pay_type') AS pay ON pay.dict_value = o.pay_type_id
@ -368,9 +369,6 @@
<if test="userId != null">
and (su_sale.user_id = #{userId} or su_nutritionist.user_id = #{userId})
</if>
<!--<if test="beginTime != null and beginTime != ''">
AND o.order_time &gt;= #{beginTime}
</if>-->
<if test="endTime != null and endTime != ''">
AND DATE_FORMAT(o.order_time,'%Y-%m-%d') &lt;= #{endTime}
</if>

@ -119,9 +119,10 @@
<el-form-item label="售中" prop="onSaleId">
<el-select v-model="form.onSaleId" placeholder="请选择">
<el-option
:key="177"
:label="'时瑞瑞'"
:value="parseInt('177')"
v-for="dict in onSaleIdOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="parseInt(dict.dictValue)"
/>
</el-select>
</el-form-item>
@ -481,6 +482,8 @@ export default {
...mapGetters([
//
"preSaleIdOptions",
//
"onSaleIdOptions",
//
"afterSaleIdOptions",
//
@ -694,17 +697,15 @@ export default {
}
//
if (newVal[0] == 2) {
/*this.form.nutritionistId = null;
this.form.nutritionistIdList = null;
this.form.afterSaleId = null;
this.form.nutriAssisId = null;*/
this.afterNutiShow = false;
this.form.onSaleId = 177;
this.form.onSaleId = parseInt(this.onSaleIdOptions[1].dictValue);
this.form.serveTimeId = 7;
this.form.conditioningProjectId = 12;
}else{
this.form.onSaleId = null;
this.form.serveTimeId = 90;
this.afterNutiShow = true;
this.form.conditioningProjectId = 0;
}
},
},

@ -16,14 +16,7 @@
<el-table-column width="120" prop="attr_name_one"> </el-table-column>
<el-table-column prop="value_one">
<template slot-scope="scope">
<el-tag
v-if="scope.row.attr_name_one === '审核状态'"
:type="scope.row.value_one === 'yes' ? 'success' : 'danger'"
>
{{ scope.row.value_one === "yes" ? "已审核" : "未审核" }}
</el-tag>
<auto-hide-message
v-else
:data="scope.row.value_one == null ? '' : scope.row.value_one + ''"
:maxLength="20"
/>
@ -32,7 +25,14 @@
<el-table-column width="120" prop="attr_name_two"></el-table-column>
<el-table-column prop="value_two">
<template slot-scope="scope">
<el-tag
v-if="scope.row.attr_name_two === '审核状态'"
:type="scope.row.value_two === 'yes' ? 'success' : 'danger'"
>
{{ scope.row.value_two === "yes" ? "已审核" : "未审核" }}
</el-tag>
<auto-hide-message
v-else
:data="scope.row.value_two == null ? '' : scope.row.value_two + ''"
:maxLength="20"
/>
@ -68,23 +68,25 @@ export default {
visible: false,
//
orderTitleData: [
["审核状态", "成交时间", "调理项目"],
["姓名", "手机号", "金额"],
["收款方式", "收款账号", "服务时长"],
["赠送时长", "售前", "售后"],
["营养师", "助理营养师", "策划"],
["策划助理", "运营", "运营助理"],
["开始时间", "结束时间", "备注"],
["订单类型","审核状态", "成交时间"],
["调理项目","姓名", "手机号"],
["金额","收款方式", "收款账号"],
["服务时长","赠送时长", "售前"],
["售中","售后","营养师"],
["助理营养师","策划","策划助理"],
["运营","运营助理","开始时间"],
["结束时间","备注",""]
],
//
orderValueData: [
["reviewStatus", "orderTime", "conditioningProject"],
["customer", "phone", "amount"],
["payType", "account", "serveTime"],
["giveServeDay", "preSale", "afterSale"],
["nutritionist", "nutriAssis", "planner"],
["plannerAssis", "operator", "operatorAssis"],
["startTime", "serverEndTime", "remark"],
["orderTypeName","reviewStatus", "orderTime"],
["conditioningProject","customer", "phone"],
["amount","payType", "account"],
["serveTime","giveServeDay", "preSale"],
["onSale","afterSale","nutritionist"],
["nutriAssis","planner","plannerAssis"],
["operator","operatorAssis","startTime"],
["serverEndTime","remark",""]
],
};
},
@ -106,12 +108,8 @@ export default {
},
showDialog(orderId) {
getInfoDetail({ orderId }).then((response) => {
response.data.weight =
response.data.weight != null ? response.data.weight + "斤" : "";
response.data.giveServeDay =
response.data.giveServeDay != null
? response.data.giveServeDay + "天"
: "";
response.data.weight = response.data.weight != null ? response.data.weight + "斤" : "";
response.data.giveServeDay = response.data.giveServeDay != null ? response.data.giveServeDay + "天" : "";
for (let i = 0; i < this.orderTitleData.length; i++) {
this.orderDetailList.push({
attr_name_one: this.orderTitleData[i][0],

@ -35,20 +35,26 @@
>
<template slot-scope="scope">
<el-tag
v-if="scope.row.orderType === 'main'"
v-if="scope.row.type === 'main'"
:type="scope.row.reviewStatus === 'yes' ? 'success' : 'danger'"
disable-transitions
>
{{ scope.row.reviewStatus === "yes" ? "已审核" : "未审核" }}
</el-tag>
<el-tag
v-if="scope.row.orderType === 'virtual'"
v-if="scope.row.type === 'virtual'"
disable-transitions
>
分单
</el-tag>
</template>
</el-table-column>
<el-table-column
label="订单类型"
prop="orderTypeName"
align="center"
width="160"
></el-table-column>
<el-table-column
label="成交时间"
prop="orderTime"
@ -63,7 +69,7 @@
<el-table-column label="操作" align="center" width="120px">
<template slot-scope="scope">
<el-button
v-if="scope.row.orderType === 'main'"
v-if="scope.row.type === 'main'"
size="mini"
type="text"
@click="handleOnDetailClick(scope.row)"
@ -71,7 +77,7 @@
>
<el-button
v-if="
scope.row.orderType === 'main' &&
scope.row.type === 'main' &&
(checkPermi(['custom:order:review']) ||
(checkPermi(['custom:order:edit']) &&
userId === scope.row.preSaleId &&
@ -86,7 +92,7 @@
size="mini"
type="text"
v-if="
scope.row.orderType === 'main' &&
scope.row.type === 'main' &&
(checkPermi(['custom:order:review']) ||
(checkPermi(['custom:order:remove']) &&
userId === scope.row.preSaleId &&
@ -153,14 +159,14 @@ export default {
if (tarOrder) {
if (!tarOrder.children) {
const firstObj = JSON.parse(JSON.stringify(tarOrder));
tarOrder.children = [{ ...firstObj, orderType: "main" }];
tarOrder.children = [{ ...firstObj, type: "main" }];
}
tarOrder.amount += cur.amount;
tarOrder.amount += cur.afterSaleCommissOrder == 0 ? cur.amount : 0;
tarOrder.orderId += cur.orderId;
tarOrder.orderType = "virtual";
tarOrder.children.push({ ...cur, orderType: "main" });
tarOrder.type = "virtual";
tarOrder.children.push({ ...cur, type: "main" });
} else {
cur.orderType = "main";
cur.type = "main";
arr.push(cur);
}
return arr;

@ -2,13 +2,18 @@
<el-dialog
:title="title"
:visible.sync="visible"
width="720px"
width="820px"
append-to-body
:close-on-click-modal="false"
@closed="handleOnClosed"
>
<el-row :gutter="15">
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-col :span="16">
<el-form-item label="订单类型" prop="orderTypeName">
<el-input v-model="form.orderTypeName" placeholder="" :disabled="true"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="成交金额" prop="amount">
<el-input v-model="form.amount" placeholder="请输入金额" />
@ -89,7 +94,19 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="onSaleShow">
<el-form-item label="售中" prop="onSaleId">
<el-select v-model="form.onSaleId" placeholder="请选择">
<el-option
v-for="dict in onSaleIdOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="parseInt(dict.dictValue)"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-show="afterSaleNutriAssShow">
<el-form-item label="售后" prop="afterSaleId">
<el-select v-model="form.afterSaleId" placeholder="请选择">
<el-option
@ -101,7 +118,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="afterSaleNutriAssShow">
<el-form-item label="主营养师" prop="nutritionistId">
<el-select v-model="form.nutritionistId" placeholder="请选择">
<el-option
@ -113,7 +130,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="afterSaleNutriAssShow">
<el-form-item label="助理营养师" prop="nutriAssisId">
<el-select v-model="form.nutriAssisId" placeholder="请选择">
<el-option
@ -125,7 +142,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="planOperatorShow">
<el-form-item label="策划" prop="plannerId">
<el-select v-model="form.plannerId" placeholder="请选择">
<el-option
@ -137,7 +154,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="planOperatorShow">
<el-form-item label="策划助理" prop="plannerAssisId">
<el-select v-model="form.plannerAssisId" placeholder="请选择">
<el-option
@ -149,7 +166,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="planOperatorShow">
<el-form-item label="运营" prop="operatorId">
<el-select v-model="form.operatorId" placeholder="请选择">
<el-option
@ -161,7 +178,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-show="planOperatorShow">
<el-form-item label="运营助理" prop="operatorAssisId">
<el-select v-model="form.operatorAssisId" placeholder="请选择">
<el-option
@ -367,6 +384,12 @@ export default {
reviewStatusOptions: [],
//()
orderDropdownCorrespondingOptions: [],
//
onSaleShow: false,
//
afterSaleNutriAssShow: true,
//
planOperatorShow: true
};
},
created() {
@ -401,6 +424,8 @@ export default {
...mapGetters([
//
"preSaleIdOptions",
//
"onSaleIdOptions",
//
"afterSaleIdOptions",
//
@ -512,6 +537,7 @@ export default {
pauseTime: null,
payTypeId: defaultPayType ? parseInt(defaultPayType.dictValue) : null,
preSaleId: defaultPresale ? parseInt(defaultPresale.dictValue) : null,
onSaleId: null,
createBy: null,
createTime: null,
afterSaleId: defaultAftersale
@ -543,6 +569,11 @@ export default {
};
// console.log(this.form);
this.resetForm("form");
console.log("--"+obj.orderType);
this.onSaleShow = this.form.orderType == "2";
this.afterSaleNutriAssShow = this.form.orderType != "2" && this.form.afterSaleCommissOrder == 0;
this.planOperatorShow = this.form.afterSaleCommissOrder == 0;
},
handleOnClosed() {
this.reset();

@ -16,6 +16,7 @@ const getters = {
nutritionistIdOptions: state => state.global.nutritionistIdOptions,
nutriAssisIdOptions: state => state.global.nutriAssisIdOptions,
preSaleIdOptions: state => state.global.preSaleIdOptions,
onSaleIdOptions: state => state.global.onSaleIdOptions,
afterSaleIdOptions: state => state.global.afterSaleIdOptions,
plannerIdOptions: state => state.global.plannerIdOptions,
plannerAssisIdOptions: state => state.global.plannerAssisIdOptions,

@ -4,6 +4,7 @@ const oriState = {
nutritionistIdOptions: [],
nutriAssisIdOptions: [],
preSaleIdOptions: [],
onSaleIdOptions: [],
afterSaleIdOptions: [],
plannerIdOptions: [],
plannerAssisIdOptions: [],
@ -41,6 +42,7 @@ const actions = {
nutritionistIdOptions: options["nutri"] || [],
nutriAssisIdOptions: options["nutri_assis"] || [],
preSaleIdOptions: options["pre_sale"] || [],
onSaleIdOptions: options["on_sale"] || [],
afterSaleIdOptions: options["after_sale"] || [],
plannerIdOptions: options["planner"] || [],
plannerAssisIdOptions: options["planner_assis"] || [],

@ -223,6 +223,7 @@
<el-form-item label="服务时长" prop="serveTimeId">
<el-select
v-model="queryParams.serveTimeId"
clearable
placeholder="请选服务时长"
>
<el-option
@ -238,6 +239,7 @@
<el-form-item label="订单金额" prop="amountFlag">
<el-select
v-model="queryParams.amountFlag"
clearable
placeholder="请选金额状态"
>
<el-option :key="0" label="全部订单" :value="null" />
@ -334,8 +336,9 @@
}}</span>
</template>
</el-table-column>
<el-table-column label="订单类型" align="center" prop="orderTypeName" width="160"/>
<el-table-column label="客户姓名" align="center" prop="customer" />
<el-table-column label="手机号" align="center" prop="phone" width="100" />
<!--<el-table-column label="手机号" align="center" prop="phone" width="100" />-->
<el-table-column label="成交金额" align="center" prop="amount">
<template slot-scope="scope">
{{ toThousands(scope.row.amount) }}