养修服务单项
养修服务单项查询列表
页面主要代码:
<script th:inline="javascript">
var editFlag = '';
var saleOnFlag = '';
var saleOffFlag = '';
var prefix = ctx + "/business/serviceItem";
var carDatas = [[${
@dict.getType('si_car_package')}]];
var catalogDatas = [[${
@dict.getType('si_service_catalog')}]];
var auditDatas = [[${
@dict.getType('si_audit_status')}]];
var saleDatas = [[${
@dict.getType('si_sale_status')}]];
$(function() {
var options = {
url: prefix + "/query",
createUrl: prefix + "/addPage",
updateUrl: prefix + "/editPage?id={id}",
removeUrl: prefix + "/remove",
modalName: "服务单项",
columns: [{
checkbox: true
},
{
field: 'id',
title: '',
visible: false
},
{
field: 'name',
title: '服务项名称',
},
{
field: 'carPackage',
title: '是否套餐',
align: 'center',
formatter: function(value, row, index) {
console.log(value, carDatas);//索引:数据自典明细对象
return $.table.selectDictLabel(carDatas, value);
}
},
{
field: 'info',
title: '备注信息',
},
{
field: 'auditStatus',
title: '审核状态',
align: 'center',
formatter: function(value, row, index) {
console.log(value, auditDatas);//索引:数据自典明细对象
return $.table.selectDictLabel(auditDatas, value);
}
},
{
field: 'saleStatus',
title: '上架状态',
align: 'center',
formatter: function(value, row, index) {
console.log(value, saleDatas);//索引:数据自典明细对象
return $.table.selectDictLabel(saleDatas, value);
}
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
//把全局变量赋值给局部变量,使用局部变量进行相关操作
var editFlagTemp = editFlag;
var saleOnFlagTemp = saleOnFlag;
var saleOffFlagTemp = saleOffFlag;
var actions = [];
if(row.saleStatus == 1){
//如果是上架状态,是不能进行编辑的
editFlagTemp += " disabled";
}else {
//如果是套餐,且处于审核状态中是不能进行编辑的
if(row.carPackage == 1 && row.auditStatus == 1){
editFlagTemp += " disabled";
}
}
actions.push('<a class="btn btn-success btn-xs ' + editFlagTemp + '" href="javascript:void(0)" ' +
'οnclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
//销售状态为上架的情况显示下架按钮
if(row.saleStatus == 1){
actions.push('<a class="btn btn-danger btn-xs ' + saleOffFlagTemp + '" href="javascript:void(0)" ' +
'οnclick="saleOffOp(\'' + row.id + '\')"><i class="fa fa-edit"></i>下架</a> ');
}else{
//销售状态为下架的情况显示上架按钮,如果是套餐而且还没有审核通过还需要把按钮置为不可点击
if(row.carPackage == 1 && row.auditStatus != 2){
saleOnFlagTemp += " disabled";
}
actions.push('<a class="btn btn-info btn-xs' + saleOnFlagTemp + '" href="javascript:void(0)" ' +
'οnclick="saleOnOp(\'' + row.id + '\')"><i class="fa fa-edit"></i>上架</a> ');
}
return actions.join('');
}
}]
};
// 用于初始化整个table列表
$.table.init(options);
$("#bootstrap-table").on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table load-success.bs.table", function () {
//下架才能进行编辑
var rows = $.table.selectColumns("carPackage");
//是套餐
if(rows.length==1 && rows[0]==1){
//且状态为初始化或者拒绝
var auditStatus = $.table.selectColumns("auditStatus")[0];
console.log(auditStatus==0);
//审核状态是初始化或重新发起才将发起审核的按钮的disabled进行移除
if(auditStatus==0 || auditStatus==3){
$(".auditBtn").removeClass("disabled");
return;
}
}
$(".auditBtn").addClass("disabled");
});
});
</script>
/**
* 服务单项
*/
@Setter
@Getter
public class ServiceItem {
private static final long serialVersionUID = 1L;
public static final Integer CARPACKAGE_NO = 0;//不是套餐
public static final Integer CARPACKAGE_YES = 1;//是套餐
public static final Integer AUDITSTATUS_INIT = 0;//初始化
public static final Integer AUDITSTATUS_AUDITING = 1;//审核中
public static final Integer AUDITSTATUS_APPROVED = 2;//审核通过
public static final Integer AUDITSTATUS_REPLY = 3;//重新发起
public static final Integer AUDITSTATUS_NO_REQUIRED = 4;//无需审核
public static final Integer SALESTATUS_OFF = 0;//下架
public static final Integer SALESTATUS_ON = 1;//上架
private Long id;
private String name; //服务项名称
private BigDecimal originalPrice; //服务项原价
private BigDecimal discountPrice; //服务项折扣价
private Integer carPackage; //是否套餐【是/否】
private String info; //备注信息
private Date createTime; //创建时间
private Integer serviceCatalog; //服务分类【维修/保养/其他】
private Integer auditStatus = AUDITSTATUS_NO_REQUIRED; //审核状态【初始化/审核中/审核通过/审核拒绝/无需审核】
private Integer saleStatus = SALESTATUS_OFF; //上架状态【已上架/未上架】
}
业务需求分析:
首先服务单项在录入之后默认的状态为未上架,而我们在服务结算单中只能查询到已上架的服务单项,服务单项分成两类 :
- 单项服务 ----> 录入数据之后,可以直接对其进行上架
- 套餐服务---->录入数据之后,不能直接上架,需要进行审核,审核通过之后才能进行上架
针对上架和下架按钮:
如果服务单项的销售状态为上架
的情况==>按钮需显示下架按钮
如果服务单项的销售状态为下架
的情况:
- 非套餐 ===>直接显示上架按钮
- 套餐 ====>需要审核通过才能上架,如果不是审核通过状态,可以看到上架按钮,但是按钮是不可点击的
//销售状态为上架的情况显示下架按钮
if(row.saleStatus == 1){
actions.push('<a class="btn btn-danger btn-xs ' + saleOffFlagTemp + '" href="javascript:void(0)" ' +
'onclick="saleOffOp(\'' + row.id + '\')"><i class="fa fa-edit"></i>下架</a> ');
}else{
//销售状态为下架的情况显示上架按钮,如果是套餐而且还没有审核通过还需要把按钮置为不可点击
if(row.carPackage == 1 && row.auditStatus != 2){
saleOnFlagTemp += " disabled";
}
actions.push('<a class="btn btn-info btn-xs' + saleOnFlagTemp + '" href="javascript:void(0)" ' +
'onclick="saleOnOp(\'' + row.id + '\')"><i class="fa fa-edit"></i>上架</a> ');
}
针对编辑按钮:
已上架,不能直接进行编辑,需要下架之后才能进行编辑
未上架,但是是套餐且处于审核状态,这时候也是不能进行编辑的
if(row.saleStatus == 1){
//如果是上架状态,是不能进行编辑的
editFlagTemp += " disabled";
}else {
//如果是套餐,且处于审核状态中是不能进行编辑的
if(row.carPackage == 1 && row.auditStatus == 1){
editFlagTemp += " disabled";
}
}
发起审核按钮:
只有是套餐和审核状态是初始化或重新发起时才需要发起审核
$("#bootstrap-table").on("check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table load-success.bs.table", function () {
//下架才能进行编辑
var rows = $.table.selectColumns("carPackage");
//是套餐
if(rows.length==1 && rows[0]==1){
var auditStatus = $.table.selectColumns("auditStatus")[0];
console.log(auditStatus==0);
//审核状态是初始化或重新发起才将发起审核的按钮的disabled进行移除
if(auditStatus==0 || auditStatus==3){
$(".auditBtn").removeClass("disabled");
return;
}
}
$(".auditBtn").addClass("disabled");
});
养修服务单项添加![请添加图片描述](https://img-blog.csdnimg.cn/3270e3137b9c4591a6bec7445d258fa7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAa2pjb2Rlcg==,size_20,color_FFFFFF,t_70,g_se,x_16)
提交表单,发起add请求
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-serviceItem-add').serialize());
}
}
在进行保存时 ,由于添加页面没有给时间、销售状态等值进行填写,需要手动进行赋值或给默认值将数据进行补齐
@Override
public void save(ServiceItem serviceItem) {
//在进行添加操作时,先判断是不是套餐
//是套餐需要进行审核,把状态设置为初始化
if(ServiceItem.CARPACKAGE_YES.equals(serviceItem.getCarPackage())){
serviceItem.setAuditStatus(ServiceItem.AUDITSTATUS_INIT);
}else{
//非套餐,把状态设置为默认值:无需审核
serviceItem.setAuditStatus(ServiceItem.AUDITSTATUS_NO_REQUIRED);
}
//添加完成首先需要让该数据为下架状态
//由于添加页面没有给时间、销售状态、审核状态等值进行填写,需要手动进行赋值或给默认值进行补齐
serviceItem.setSaleStatus(ServiceItem.SALESTATUS_OFF);
serviceItem.setCreateTime(new Date());
serviceItemMapper.insert(serviceItem);
}
养修服务单项编辑
提交表单,发起edit请求
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-serviceItem-edit').serialize());
}
}
当数据进行更新操作时,如果页面收集的数据只是部分数据,此时更新操作时需要考虑页面数据缺失问题
- 如果是上架状态,不允许修改的,抛出异常
- 套餐,如果是审核中,不能进行编辑,抛出异常
- 如果是下架状态,并且是套餐,且审核通过了,再重新进行编辑,需要把审核状态设为初始状态
@Override
public void update(ServiceItem serviceItem) {
//当数据进行更新操作时,如果页面收集的数据只是部分数据,此时更新操作时需要考虑页面数据缺失问题
//有3种解决方案
//1.在sql中将不需要进行更新的字段进行删除(常用):SQL中需要注意,只更新需要修改的字段,不需要进行更新的字段删除即可
//2.先查,在替换,最后再更新
//如果是上架状态,不能进行修改
ServiceItem st = this.get(serviceItem.getId());
if(ServiceItem.SALESTATUS_ON.equals(st.getSaleStatus())){
throw new BusinessException("该服务项在上架中,不允许修改");
}
//如果是套餐,且没有审核通过,不能进行修改
if(ServiceItem.CARPACKAGE_YES.equals(st.getCarPackage())
&& ServiceItem.AUDITSTATUS_AUDITING.equals(st.getAuditStatus())){
throw new BusinessException("审核中,不能进行修改");
}
//如果是下架状态,并且是套餐,且审核通过了,再重新进行编辑,需要把审核状态设为初始状态
if(ServiceItem.CARPACKAGE_YES.equals(st.getCarPackage())
&& ServiceItem.AUDITSTATUS_APPROVED.equals(st.getAuditStatus())){
st.setAuditStatus(ServiceItem.AUDITSTATUS_INIT);
}else {
//是什么审核状态就设置为什么审核状态
serviceItem.setAuditStatus(st.getAuditStatus());
}
//把销售状态设置为下架
serviceItem.setSaleStatus(ServiceItem.SALESTATUS_OFF);
serviceItem.setCreateTime(serviceItem.getCreateTime());
//3.通过动态sql实现
serviceItemMapper.updateByPrimaryKey(serviceItem);
}
养修服务单项上架/下架
点击上架按钮,发送saleOn请求
function saleOnOp(id) {
$.modal.confirm("确认需要上架此服务项吗?", function() {
$.operate.submit(prefix + "/saleOn?id="+id, "post");
});
}
当数据处于以下状态是不能进行上架的:
- 数据处于上架状态
- 如果是套餐,并且不是审核通过的状态,是不能上架的,抛出异常
@Override
public void saleOn(Long id) {
ServiceItem serviceItem = this.get(id);
//数据处于上架状态,再点击上架,抛出异常.
if(ServiceItem.SALESTATUS_ON.equals(serviceItem.getSaleStatus())){
throw new BusinessException("服务单项已经处于上架状态");
}
//如果是套餐,并且不是审核通过的状态,是不能上架的,抛出异常.
if(ServiceItem.CARPACKAGE_YES.equals(serviceItem.getCarPackage()) &&
!ServiceItem.AUDITSTATUS_APPROVED.equals(serviceItem.getAuditStatus())){
throw new BusinessException("套餐审核通过才可以进行上架");
}
//非套餐,可以直接进行上架
//通过id把状态修改为上架
serviceItemMapper.changeSaleStatus(id,ServiceItem.SALESTATUS_ON);
}
点击下架按钮,发送saleOff请求
function saleOffOp(id){
$.modal.confirm("确认需要下架此服务项吗?", function() {
$.operate.submit(prefix + "/saleOff?id="+id, "post");
});
}
@Override
public void saleOff(Long id) {
//通过id把状态修改为下架
serviceItemMapper.changeSaleStatus(id,ServiceItem.SALESTATUS_OFF);
}
养修预约记录列表查询
按钮显示要求:
当记录状态是预约中
, 编辑,到店,取消,删除可用,结算单不可用
当记录状态是已到店
, 编辑,到店,取消,删除不可用, 结算单可用,
当记录状态是用户取消
,编辑,到店,取消,删除, 结算单不可用
当记录状态是结算单生成
,编辑,到店,取消,删除不可用, 结算单可用
<script th:inline="javascript">
var editFlag = [[${
@permission.hasPermi('business:appointment:edit')}]];
var arrivalFlag = [[${
@permission.hasPermi('business:appointment:arrival')}]</