13 changed files with 578 additions and 19 deletions
@ -0,0 +1,67 @@ |
|||||
|
package org.nl.wms.decision_manage.controller; |
||||
|
|
||||
|
|
||||
|
import cn.dev33.satoken.annotation.SaIgnore; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import org.nl.common.base.TableDataInfo; |
||||
|
import org.nl.common.domain.query.PageQuery; |
||||
|
import org.nl.common.logging.annotation.Log; |
||||
|
import org.nl.common.utils.MapOf; |
||||
|
import org.nl.wms.decision_manage.service.IStSectStrategyService; |
||||
|
import org.nl.wms.decision_manage.service.dao.StSectStrategy; |
||||
|
import org.nl.wms.decision_manage.service.dao.StStrategyConfig; |
||||
|
import org.nl.wms.decision_manage.service.dto.SectStrategyQuery; |
||||
|
import org.nl.wms.decision_manage.service.dto.StrategyQuery; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.validation.annotation.Validated; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Arrays; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 前端控制器 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2025-06-25 |
||||
|
*/ |
||||
|
@RestController |
||||
|
@RequestMapping("/stSectStrategy") |
||||
|
public class StSectStrategyController { |
||||
|
|
||||
|
@Autowired |
||||
|
private IStSectStrategyService iStSectStrategyService; |
||||
|
|
||||
|
@GetMapping |
||||
|
public ResponseEntity<Object> query(SectStrategyQuery query, PageQuery page) { |
||||
|
return new ResponseEntity<>(iStSectStrategyService.page(page.build(),query.build()), HttpStatus.OK); |
||||
|
} |
||||
|
|
||||
|
@PostMapping |
||||
|
@Log("新增库区货位规则") |
||||
|
public ResponseEntity<Object> create(@Validated @RequestBody StSectStrategy dao) { |
||||
|
iStSectStrategyService.save(dao); |
||||
|
return new ResponseEntity<>(HttpStatus.OK); |
||||
|
} |
||||
|
|
||||
|
@PutMapping |
||||
|
@Log("修改库区货位规则") |
||||
|
public ResponseEntity<Object> update(@Validated @RequestBody StSectStrategy dao) { |
||||
|
iStSectStrategyService.updateById(dao); |
||||
|
return new ResponseEntity<>(HttpStatus.OK); |
||||
|
} |
||||
|
|
||||
|
@DeleteMapping |
||||
|
@Log("删除规格") |
||||
|
public ResponseEntity<Object> delete(@RequestBody Long[] ids) { |
||||
|
iStSectStrategyService.removeByIds(Arrays.asList(ids)); |
||||
|
return new ResponseEntity<>(HttpStatus.OK); |
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
package org.nl.wms.decision_manage.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.nl.wms.decision_manage.service.dao.StSectStrategy; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2025-06-25 |
||||
|
*/ |
||||
|
public interface IStSectStrategyService extends IService<StSectStrategy> { |
||||
|
|
||||
|
} |
@ -0,0 +1,57 @@ |
|||||
|
package org.nl.wms.decision_manage.service.dao; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import java.io.Serializable; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2025-06-25 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@TableName("st_sect_strategy") |
||||
|
public class StSectStrategy implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 主键盘 |
||||
|
*/ |
||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||
|
private Integer id; |
||||
|
|
||||
|
/** |
||||
|
* 库区 |
||||
|
*/ |
||||
|
private String sect_code; |
||||
|
|
||||
|
/** |
||||
|
* 规则 |
||||
|
*/ |
||||
|
private String strategy; |
||||
|
|
||||
|
/** |
||||
|
* 描述 |
||||
|
*/ |
||||
|
private String description; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private String update_time; |
||||
|
|
||||
|
/** |
||||
|
* 更新人 |
||||
|
*/ |
||||
|
private String update_name; |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package org.nl.wms.decision_manage.service.dao.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.nl.wms.decision_manage.service.dao.StSectStrategy; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* Mapper 接口 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2025-06-25 |
||||
|
*/ |
||||
|
public interface StSectStrategyMapper extends BaseMapper<StSectStrategy> { |
||||
|
|
||||
|
} |
@ -0,0 +1,5 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="org.nl.wms.decision_manage.service.dao.mapper.StSectStrategyMapper"> |
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,26 @@ |
|||||
|
package org.nl.wms.decision_manage.service.dto; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
import org.nl.common.domain.query.BaseQuery; |
||||
|
import org.nl.common.domain.query.QParam; |
||||
|
import org.nl.common.enums.QueryTEnum; |
||||
|
import org.nl.wms.decision_manage.service.dao.StSectStrategy; |
||||
|
import org.nl.wms.decision_manage.service.dao.StStrategyConfig; |
||||
|
|
||||
|
/* |
||||
|
* @author ZZQ |
||||
|
* @Date 2023/5/4 19:49 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class SectStrategyQuery extends BaseQuery<StSectStrategy> { |
||||
|
|
||||
|
private String strategy_name; |
||||
|
private Boolean is_delete =Boolean.FALSE; |
||||
|
|
||||
|
@Override |
||||
|
public void paramMapping() { |
||||
|
super.doP.put("strategy_name", QParam.builder().k(new String[]{"strategy_name"}).type(QueryTEnum.LK).build()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package org.nl.wms.decision_manage.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.nl.wms.decision_manage.service.IStSectStrategyService; |
||||
|
import org.nl.wms.decision_manage.service.dao.StSectStrategy; |
||||
|
import org.nl.wms.decision_manage.service.dao.mapper.StSectStrategyMapper; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 服务实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author generator |
||||
|
* @since 2025-06-25 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class StSectStrategyServiceImpl extends ServiceImpl<StSectStrategyMapper, StSectStrategy> implements IStSectStrategyService { |
||||
|
|
||||
|
} |
@ -0,0 +1,166 @@ |
|||||
|
<template> |
||||
|
<el-dialog |
||||
|
:title="crud.status.title" |
||||
|
append-to-body |
||||
|
:before-close="crud.cancelCU" |
||||
|
:visible.sync="crud.status.cu > 0 || crud.status.view > 0" |
||||
|
> |
||||
|
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="110px"> |
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="策略名称:" prop="strategy_name"> |
||||
|
<el-input v-model="form.strategy_name" style="width: 200px;" /> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="策略类型:" prop="strategy_type"> |
||||
|
<el-select |
||||
|
v-model="form.strategy_type" |
||||
|
placeholder="" |
||||
|
style="width: 200px" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in strategyTypeList" |
||||
|
:key="item.id" |
||||
|
:label="item.label" |
||||
|
:value="item.value" |
||||
|
/> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
|
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="类处理类型:" prop="class_type"> |
||||
|
<el-select |
||||
|
v-model="form.class_type" |
||||
|
placeholder="" |
||||
|
style="width: 200px" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in classTypeList" |
||||
|
:key="item.id" |
||||
|
:label="item.label" |
||||
|
:value="item.value" |
||||
|
/> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="参数:" prop="param"> |
||||
|
<el-input v-model="form.param" style="width: 200px;" /> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="12"> |
||||
|
<el-form-item label="策略编码:" prop="param"> |
||||
|
<el-input v-model="form.strategy_code" style="width: 200px;" /> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
|
||||
|
<el-row :gutter="20"> |
||||
|
<el-col :span="24"> |
||||
|
<el-form-item label="描述:" prop="remark"> |
||||
|
<el-input v-model="form.remark" :rows="3" type="textarea" style="width: 560px;" /> |
||||
|
</el-form-item> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-form> |
||||
|
<div v-show="crud.status.cu > 0" slot="footer" class="dialog-footer"> |
||||
|
<el-button type="text" @click="crud.cancelCU">取消</el-button> |
||||
|
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
const defaultForm = { |
||||
|
id: null, |
||||
|
strategy_code: null, |
||||
|
strategy_name: null, |
||||
|
strategy_type: null, |
||||
|
class_type: null, |
||||
|
param: null, |
||||
|
remark: null, |
||||
|
is_used: null, |
||||
|
ban: null, |
||||
|
update_name: null, |
||||
|
update_time: null, |
||||
|
is_delete: null |
||||
|
} |
||||
|
import CRUD, { form, crud } from '@crud/crud' |
||||
|
|
||||
|
export default { |
||||
|
name: 'AddDialog', |
||||
|
mixins: [form(defaultForm), crud()], |
||||
|
props: { |
||||
|
dialogShow: { |
||||
|
type: Boolean, |
||||
|
default: false |
||||
|
}, |
||||
|
openParam: { |
||||
|
type: Object |
||||
|
} |
||||
|
}, |
||||
|
watch: { |
||||
|
dialogShow: { |
||||
|
handler(newValue, oldValue) { |
||||
|
this.dialogVisible = newValue |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
dialogVisible: false, |
||||
|
strategyTypeList: [ |
||||
|
{ 'label': '入库', 'value': '1' }, |
||||
|
{ 'label': '出库', 'value': '2' }, |
||||
|
{ 'label': '通用', 'value': '3' } |
||||
|
], |
||||
|
classTypeList: [ |
||||
|
{ 'label': '实现类', 'value': '1' }, |
||||
|
{ 'label': '表达式', 'value': '2' }, |
||||
|
{ 'label': '脚本', 'value': '3' } |
||||
|
], |
||||
|
rules: { |
||||
|
strategy_name: [ |
||||
|
{ required: true, message: '策略名称不能为空', trigger: 'blur' } |
||||
|
], |
||||
|
strategy_type: [ |
||||
|
{ required: true, message: '策略类型不能为空', trigger: 'blur' } |
||||
|
], |
||||
|
strategy_code: [ |
||||
|
{ required: true, message: '策略编码不能为空', trigger: 'blur' } |
||||
|
], |
||||
|
param: [ |
||||
|
{ required: true, message: '参数不能为空', trigger: 'blur' } |
||||
|
], |
||||
|
class_type: [ |
||||
|
{ required: true, message: '类处理类型不能为空', trigger: 'blur' } |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
handleClose(done) { |
||||
|
this.$confirm('确认关闭?') |
||||
|
.then(_ => { |
||||
|
done() |
||||
|
}) |
||||
|
.catch(_ => { |
||||
|
}) |
||||
|
}, |
||||
|
close() { |
||||
|
this.form = [] |
||||
|
this.$emit('update:dialogShow', false) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
|
||||
|
</style> |
@ -0,0 +1,160 @@ |
|||||
|
<template> |
||||
|
<div class="app-container"> |
||||
|
<!--工具栏--> |
||||
|
<div class="head-container"> |
||||
|
<div v-if="crud.props.searchToggle"> |
||||
|
<!-- 搜索 --> |
||||
|
<el-form |
||||
|
:inline="true" |
||||
|
class="demo-form-inline" |
||||
|
label-position="right" |
||||
|
label-width="80px" |
||||
|
label-suffix=":" |
||||
|
> |
||||
|
<el-form-item label="策略名称"> |
||||
|
<el-input |
||||
|
v-model="query.strategy_name" |
||||
|
clearable |
||||
|
size="mini" |
||||
|
placeholder="策略名称" |
||||
|
style="width: 200px;" |
||||
|
class="filter-item" |
||||
|
@keyup.enter.native="crud.toQuery" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<rrOperation /> |
||||
|
</el-form> |
||||
|
|
||||
|
</div> |
||||
|
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'--> |
||||
|
<crudOperation :permission="permission"/> |
||||
|
<!--表单组件--> |
||||
|
<el-table |
||||
|
ref="table" |
||||
|
v-loading="crud.loading" |
||||
|
:data="crud.data" |
||||
|
size="mini" |
||||
|
style="width: 100%;" |
||||
|
@selection-change="crud.selectionChangeHandler" |
||||
|
> |
||||
|
<el-table-column type="selection" width="55" /> |
||||
|
<el-table-column label="策略类型" > |
||||
|
<template slot-scope="scope"> |
||||
|
{{scope.row.ban?"系统策略":"自定义策略"}} |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="strategy_name" label="策略名称" /> |
||||
|
<el-table-column prop="strategy_code" label="策略编码" /> |
||||
|
<el-table-column prop="strategy_type" label="决策类型" /> |
||||
|
<el-table-column prop="class_type" label="策略执行器" /> |
||||
|
<el-table-column prop="param" show-overflow-tooltip label="参数" /> |
||||
|
<el-table-column prop="remark" show-overflow-tooltip label="描述" /> |
||||
|
<el-table-column label="是否启用" align="center" prop="is_used"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-switch |
||||
|
:value="scope.row.is_used" |
||||
|
active-color="#409EFF" |
||||
|
inactive-color="#F56C6C" |
||||
|
@change="changeEnabled(scope.row, scope.row.is_used)" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="update_name" label="操作人" /> |
||||
|
<el-table-column min-width="160" prop="update_time" label="操作时间" /> |
||||
|
<el-table-column |
||||
|
v-permission="[]" |
||||
|
label="操作" |
||||
|
width="120" |
||||
|
align="center" |
||||
|
fixed="right" |
||||
|
> |
||||
|
<template slot-scope="scope"> |
||||
|
<udOperation |
||||
|
:disabledDle="scope.row.ban" |
||||
|
:disabledEdit="scope.row.ban" |
||||
|
:data="scope.row" |
||||
|
:permission="permission" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<pagination /> |
||||
|
</div> |
||||
|
<AddDialog /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import crudStrategy from './strategy' |
||||
|
import AddDialog from './AddDialog' |
||||
|
import CRUD, { crud, form, header, presenter } from '@crud/crud' |
||||
|
import rrOperation from '@crud/RR.operation' |
||||
|
import crudOperation from '@crud/CRUD.operation' |
||||
|
import udOperation from '@crud/UD.operation' |
||||
|
import pagination from '@crud/Pagination' |
||||
|
|
||||
|
export default { |
||||
|
name: 'Strategy', |
||||
|
dicts: [], |
||||
|
components: { pagination, crudOperation, rrOperation, udOperation, AddDialog }, |
||||
|
mixins: [presenter(), header(), crud()], |
||||
|
cruds() { |
||||
|
return CRUD({ |
||||
|
title: '策略管理', |
||||
|
url: 'api/strategy', |
||||
|
idField: 'id', |
||||
|
sort: 'id,desc', |
||||
|
crudMethod: { ...crudStrategy }, |
||||
|
optShow: { |
||||
|
add: true, |
||||
|
edit: false, |
||||
|
del: false, |
||||
|
download: false, |
||||
|
reset: true |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
dialogVisible: false, |
||||
|
permission: {}, |
||||
|
rules: { |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
// 钩子:在获取表格数据之前执行,false 则代表不获取数据 |
||||
|
[CRUD.HOOK.beforeRefresh]() { |
||||
|
return true |
||||
|
}, |
||||
|
format_is_used(is_used) { |
||||
|
return is_used==true |
||||
|
}, |
||||
|
changeEnabled(data, val) { |
||||
|
let msg = '此操作将停用,是否继续!' |
||||
|
if (val !== '1') { |
||||
|
msg = '此操作将启用,是否继续!' |
||||
|
} |
||||
|
this.$confirm(msg, '提示', { |
||||
|
confirmButtonText: '确定', |
||||
|
cancelButtonText: '取消', |
||||
|
type: 'warning' |
||||
|
}).then(() => { |
||||
|
crudStrategy.changeActive(data).then(res => { |
||||
|
this.crud.toQuery() |
||||
|
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) |
||||
|
}).catch(() => { |
||||
|
data.is_used = !data.is_used |
||||
|
}) |
||||
|
}).catch(() => { |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.is-scrolling-none + .el-table__fixed-right { |
||||
|
height: 100% !important; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,35 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
|
||||
|
export function add(data) { |
||||
|
return request({ |
||||
|
url: 'api/strategy', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export function del(ids) { |
||||
|
return request({ |
||||
|
url: 'api/strategy/', |
||||
|
method: 'delete', |
||||
|
data: ids |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export function edit(data) { |
||||
|
return request({ |
||||
|
url: 'api/strategy', |
||||
|
method: 'put', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export function changeActive(data) { |
||||
|
return request({ |
||||
|
url: 'api/strategy/changeActive', |
||||
|
method: 'put', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export default { add, edit, del, changeActive } |
Loading…
Reference in new issue