修改
项目编写流程
- 创建实体类,来产生对象和对应属性
- 编写Service层,包括Service接口和ServiceImpl实现,编写具体的实现逻辑调用
- 编写Controller层,装载Service接口,使用注解进行路径映射,在方法中调用Service接口方法来实现调用逻辑实现业务
- 根据具体的Controller和ServiceImpl来编写与数据交互的DAO层的Mapper接口和XML中编写SQL语句
东软ruoyi修改 - 工厂建模
首先看需求需要在修改中有明细和物料档案的显示和选择
需要引入物料档案的组件
建模明细包括设备信息的查询
改前须知
工厂建模页面需要四张表,mes_factory_model、mes_factory_model_detail、wms_material_info、mes_equipment
修改前搞清楚四张表的关联关系
数据库关联关系
mes_factory_model中有三个属性material_id、product_line_name、remark。
其中mes_factory_model中的id对应着mes_factory_model_detail中的product_line_id,
material_id属性对应wms_material_info中的id属性。
mes_factory_model_detail中的equipment_id对应,mes_equipment中的id。

代码生成
用工厂建模数据表导入后,修改路径配置
生成解压到路径
后端修改 物料档案编号-->物料名称
在MesFactoryModel对应的实体类中需要添加物料名称属性,private String materialName;并且生成get/set方法
先将需要用到的模块装配Service到Controller中
这个Service有查询物料名称的方法
@Autowired
private IWmsMaterialInfoService materialInfoService;
具体做法就是在原本的public TableDataInfo list(MesFactoryModel mesFactoryModel)方法中将拿到的MesFactoryModel list中的对应id,放到materialInfoService中。
调用selectWmsMaterialInfoById方法,model.getMaterialId()使用id查询名称,遍历时将名称使用实体类中的set方法写入属性值。
public TableDataInfo list(MesFactoryModel mesFactoryModel)
{
startPage();
List<MesFactoryModel> list = mesFactoryModelService.selectMesFactoryModelList(mesFactoryModel);
list.stream().forEach(model->{
materialInfoService.selectWmsMaterialInfoById(model.getMaterialId());
if(material!=null) {
model.setMaterialName(material.getName());
}
});
return getDataTable(list);
}
后端修改批量新增/删除工厂建模明细和单独删除的方法
在Mapper中新增一条方法`public int batchMesFactoryModeldetail(List mesFactoryModelDetailList)` Mapper XML中添加一条sql语句用于执行数据库操作
<insert id ="batchMesFactoryModeldetail">
insert into mes_factory_model_detail(product_line_id,equipment_id) values
<foreach item="item" index="index" collection="list" separator=",">
(#{item.productLineId},#{item.equipmentId})
</foreach>
</insert>
Mapper中新增public int deleteMesFactoryModelDetailByProductLineId(Long id);用来批量删除
XML中添加
<delete id="deleteMesFactoryModelDetailByProductLineIds" parameterType="String">
delete from mes_factory_model_detail where product_line_id in
<foreach item="productLineId" collection="array" open="(" separator="," close=")">
#{productLineId}
</foreach>
</delete>
Mapper新增public int deleteMesFactoryModelDetailByProductLineId(Long id);
XML中添加
<delete id="deleteMesFactoryModelDetailByProductLineId" parameterType="Long">
delete from mes_factory_model_detail where product_line_id = #{productLineId}
</delete>
在serviceImp中添加方法
/**
* 新增工厂建模明细信息
*
* @param mesFactoryModel 工厂建模对象
*/
public void insertMesFactoryModelDetail(MesFactoryModel mesFactoryModel)
{
List<MesFactoryModelDetail> mesFactoryModelDetailList = mesFactoryModel.getMesFactoryModelDetailList();
Long id = mesFactoryModel.getId();
if (StringUtils.isNotNull(mesFactoryModelDetailList))
{
List<MesFactoryModelDetail> list = new ArrayList<MesFactoryModelDetail>();
for (MesFactoryModelDetail mesFactoryModelDetail : mesFactoryModelDetailList)
{
mesFactoryModelDetail.setProductLineId(id);
list.add(mesFactoryModelDetail);
}
if (list.size() > 0)
{
mesFactoryModelMapper.batchMesFactoryModelDetail(list);
}
}
}
在新增工厂建模方法中添加调用添加工厂建模明细的方法
insertMesFactoryModelDetail(mesFactoryModel);
修改工厂建模的时候需要先将原明细数据删除,先调用删除明细的方法
/**
* 修改工厂建模
*
* @param mesFactoryModel 工厂建模
* @return 结果
*/
@Transactional
@Override
public int updateMesFactoryModel(MesFactoryModel mesFactoryModel)
{
mesFactoryModelMapper.deleteMesFactoryModelDetailByProductLineId(mesFactoryModel.getId());
insertMesFactoryModelDetail(mesFactoryModel);
return mesFactoryModelMapper.updateMesFactoryModel(mesFactoryModel);
}
删除建模时也需要删除明细,在删除建模的方法中添加删除明细的方法
/**
* 删除工厂建模信息
*
* @param id 工厂建模ID
* @return 结果
*/
@Transactional
@Override
public int deleteMesFactoryModelById(Long id)
{
mesFactoryModelMapper.deleteMesFactoryModelDetailByProductLineId(id);
return mesFactoryModelMapper.deleteMesFactoryModelById(id);
}
前端修改
首先需要修改的就是数据表格的展示
在先前的表格中生成的是物料编号的展示,在后端修改,已经把产品名称MaterialName放入list中返回到前端中存放数据的factoryModelList中
将table中的label和绑定的prop修改为需要的MaterialName
<el-table-column label="产品名称" align="center" prop="materialName" />
修改-添加和修改的对话框-上半
将下面的form修改为需要的字段和数据绑定
并引入import Editor from '@/components/MyEditor';在components中注册
接下来引入MaterialSelect组件
<el-form-item label="生产线名称" prop="productLineName">
<el-input v-model="form.productLineName" placeholder="请输入生产线名称" />
</el-form-item>
<el-form-item label="产品名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请选择产品">
<el-button v-no-more-click slot="append" @click="handleSelectMaterial">选择</el-button>
</el-input>
</el-form-item>
<el-form-item label="产品规格" prop="productSpecification">
<el-input disabled v-model="form.productSpecification" placeholder="请输入产品规格" />
</el-form-item>
<el-form-item label="产品型号" prop="productModel">
<el-input disabled v-model="form.productModel" placeholder="请输入生产线名称" />
</el-form-item>
<el-form-item label="描述" prop="remark">
<editor v-model="form.remark" :min-height="192" />
</el-form-item>
具体写什么
- 修改数据绑定
- 根据需求把需求中的
选择按钮加在文本框中
使用slot="append"将按钮加在文本框最右边 - 不可编辑需求加入到代码中
附上disabled属性不可编辑 - 编写具体的方法和加入属性
一个属性,控制显示,两个方法点击取消和选择数据回显方法
<MaterialSelect :open="materialSelectOpen" @onCancel="handleMaterialCancel" @onSelected="handleMaterialSelected"/>
记得在属性中添加materialSelectOpen属性来控制开关
在方法中添加handleMaterialCancel``handleMaterialSelected
// 处理选择物料档案
handleSelectMaterial() {
this.materialSelectOpen = true;
},
handleMaterialSelected(list) {
if (list && list.length > 0) {
this.material = list[0];
this.form.materialId = this.material.id;
this.form.materialName = this.material.name;
this.form.productModel = this.material.model;
this.form.productSpecification = this.material.specification;
}
this.materialSelectOpen = false;
},
handleMaterialCancel() {
this.materialSelectOpen = false;
},
点击修改的数据回显在方法handleUpdate中
修改-添加和修改的对话框-下半
如果使用代码生成中的主子表会自带这个线和按钮,如果使用单表生成就需要自己添加对应内容和方法
<el-divider content-position="center">工厂建模明细信息</el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini"
@click="handleAddMesFactoryModelDetail">添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="el-icon-delete" size="mini"
@click="handleDeleteMesFactoryModelDetail">删除</el-button>
</el-col>
</el-row
在下半表格中修改数据展示
修改建模明细信息
修改下方表格,绑定数据,加入插槽添加下拉选择菜单
<el-table :data="mesFactoryModelDetailList" :row-class-name="rowMesFactoryModelDetailIndex"
@selection-change="handleMesFactoryModelDetailSelectionChange" ref="mesFactoryModelDetail" style="width:100%">
<el-table-column type="selection" align="center" width="50" />
<el-table-column label="序号" align="center" prop="index" width="50" />
<el-table-column label="设备编号" prop="equipmentId" width="150">
<template slot-scope="scope">
<el-form-item :prop="'mesFactoryModelDetailList.' + scope.$index + '.equipmentId'"
:rules="rules.equipmentId">
<el-select v-model="scope.row.equipmentId" placeholder="请选择设备" clearable
@change="handleEquipChange(scope.row.equipmentId, scope.$index)">
<el-option v-for="dict in equipmentIdOptions" :key="dict.dictValue" :label="dict.dictLabel"
:value="parseInt(dict.dictValue)"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="编码" align="center" prop="code" />
<el-table-column label="型号" align="center" prop="model" />
<el-table-column label="生产日期" align="center" prop="productDate">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.productDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="生产批号" align="center" prop="batchNo" />
<el-table-column label="制造商" align="center" prop="manufacturer" />
</el-table>
加入校验规则,在属性的rules中加入
equipmentId: [
{ required: true, message: "设备不能为空", trigger: "change" }
],
在方法中定义工厂建模明细添加按钮操作方法
handleAddMesFactoryModelDetail() {
let obj = {};
obj.equipmentId = "";
obj.code = "";
obj.model = "";
obj.manufacturer = "";
obj.productDate = "";
obj.batchNo = "";
this.mesFactoryModelDetailList.push(obj);
},
定义删除按钮方法
先定义checkedMesFactoryModelDetail[]来存放勾选数据(应该代码生成有)
handleDeleteMesFactoryModelDetail() {
//先判断是否为空,提醒勾选
if (this.checkedMesFactoryModelDetail.length == 0) {
this.$alert("请先选择要删除的工厂建模明细数据", "提示", { confirmButtonText: "确认", });
//不为空传入勾选数据删除数组元素清除选择和切换行的选中状态
} else {
this.mesFactoryModelDetailList.splice(this.checkedMesFactoryModelDetail[0].index - 1, 1);
}
},
接下来定义勾选方法定义
/** 工厂建模明细序号 */
//
rowMesFactoryModelDetailIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
这里用到了两个elementui的方法clearSelection和toggleRowSelection方法清除选择和切换行的选中状态
handleMesFactoryModelDetailSelectionChange(selection) {
if (selection.length > 1) {
this.$refs.mesFactoryModelDetail.clearSelection();
this.$refs.mesFactoryModelDetail.toggleRowSelection(selection.pop());
} else {
this.checkedMesFactoryModelDetail = selection;
}
},
先查询设备明细,引入api import { getEquipmentInfo } from "@/api/baseInfo/equipmentInfo";
getEquipmentDetail(eqId, row) {
if(!eqId){
return;
}
getEquipmentInfo(eqId).then(res => {
Object.assign(row, res.data);
});
},
编写改变设备明细逻辑
handleEquipChange(val, index) {
if (val) {
let row = this.mesFactoryModelDetailList[index];
this.getEquipmentDetail(val, row);
}
},
修改列表中修改按钮绑定的点击方法
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
console.log(row);
getModel(id).then(response => {
this.form = response.data;
this.mesFactoryModelDetailList = response.data.mesFactoryModelDetailList;
console.log(this.mesFactoryModelDetailList);
this.mesFactoryModelDetailList.forEach(eq => {
let obj = {
code: '',
manufacturer: '',
productDate: '',
batchNo: '',
model: '',
}
this.mesFactoryModelDetailList.push(Object.assign(obj, eq));
});
this.mesFactoryModelDetailList.forEach(eq => {
this.getEquipmentDetail(eq.equipmentId, eq);
});
this.open = true;
this.title = "修改工厂建模";
});
},
物料档案
代码生成好物料档案的代码导入
修改前端使用布局分开左右两边
工艺建模
代码生成对应代码路径改为.mes,模块名mesModel,业务名processModel,导入对应的前端后端
工艺建模--后端修改
和工厂建模相同思路
在com.neu.carbon.mes.domain实体类中添加属性materialName并生成getset方法
在对应的Controller中载入物料档案的Service
@Autowired
private IWmsMaterialInfoService WmsMaterialInfoService;
在查询方法中进行遍历
public TableDataInfo list(MesProcessModel mesProcessModel)
{
startPage();
List<MesProcessModel> list = mesProcessModelService.selectMesProcessModelList(mesProcessModel);
//遍历到对象model,将model获取id在物料档案中循环
list.forEach(model->{
WmsMaterialInfo wmsMaterialInfo = WmsMaterialInfoService.selectWmsMaterialInfoById(model.getMaterialId());
if (wmsMaterialInfo != null){
model.setMaterailName(wmsMaterialInfo.getName());
}
});
return getDataTable(list);
}
还要做获取工艺建模详细信息
public AjaxResult getInfo(@PathVariable("id") Long id)
{
MesProcessModel mesProcessModel = mesProcessModelService.selectMesProcessModelById(id);
WmsMaterialInfo wmsMaterialInfo = WmsMaterialInfoService.selectWmsMaterialInfoById(mesProcessModel.getMaterialId());
if (wmsMaterialInfo != null){
mesProcessModel.setMaterialName(wmsMaterialInfo.getName());
}
return AjaxResult.success(mesProcessModel);
}