From 5e2c82659566fb618124ca723c2e11c28f4d1ac1 Mon Sep 17 00:00:00 2001 From: dataprince Date: Thu, 23 Nov 2023 11:18:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=A0=91=E8=A1=A8?= =?UTF-8?q?=E6=BC=94=E7=A4=BA=E7=A8=8B=E5=BA=8F=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?mybatis-flex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flex-ui/src/api/mf/product.js | 44 +++ flex-ui/src/views/mf/product/index.vue | 289 ++++++++++++++++++ .../mf/controller/MfProductController.java | 116 +++++++ .../java/com/ruoyi/mf/domain/MfProduct.java | 30 ++ .../com/ruoyi/mf/domain/bo/MfProductBo.java | 40 +++ .../com/ruoyi/mf/domain/vo/MfProductVo.java | 46 +++ .../com/ruoyi/mf/domain/vo/MfStudentVo.java | 2 + .../com/ruoyi/mf/mapper/MfProductMapper.java | 17 ++ .../ruoyi/mf/service/IMfProductService.java | 58 ++++ .../mf/service/impl/MfProductServiceImpl.java | 127 ++++++++ .../resources/mapper/mf/MfProductMapper.xml | 7 + 11 files changed, 776 insertions(+) create mode 100644 flex-ui/src/api/mf/product.js create mode 100644 flex-ui/src/views/mf/product/index.vue create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/resources/mapper/mf/MfProductMapper.xml diff --git a/flex-ui/src/api/mf/product.js b/flex-ui/src/api/mf/product.js new file mode 100644 index 0000000..f35b5a5 --- /dev/null +++ b/flex-ui/src/api/mf/product.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询产品树列表 +export function listProduct(query) { + return request({ + url: '/mf/product/list', + method: 'get', + params: query + }) +} + +// 查询产品树详细 +export function getProduct(productId) { + return request({ + url: '/mf/product/' + productId, + method: 'get' + }) +} + +// 新增产品树 +export function addProduct(data) { + return request({ + url: '/mf/product', + method: 'post', + data: data + }) +} + +// 修改产品树 +export function updateProduct(data) { + return request({ + url: '/mf/product', + method: 'put', + data: data + }) +} + +// 删除产品树 +export function delProduct(productId) { + return request({ + url: '/mf/product/' + productId, + method: 'delete' + }) +} diff --git a/flex-ui/src/views/mf/product/index.vue b/flex-ui/src/views/mf/product/index.vue new file mode 100644 index 0000000..92abd97 --- /dev/null +++ b/flex-ui/src/views/mf/product/index.vue @@ -0,0 +1,289 @@ + + + diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java new file mode 100644 index 0000000..808b9e1 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java @@ -0,0 +1,116 @@ +package com.ruoyi.mf.controller; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.core.core.domain.R; +import com.ruoyi.common.excel.utils.ExcelUtil; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.web.annotation.RepeatSubmit; +import com.ruoyi.common.web.core.BaseController; +import jakarta.annotation.Resource; +import com.ruoyi.mf.domain.vo.MfProductVo; +import com.ruoyi.mf.domain.bo.MfProductBo; +import com.ruoyi.mf.service.IMfProductService; + + +/** + * 产品树Controller + * + * @author 数据小王子 + * 2023-11-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/mf/product") +public class MfProductController extends BaseController +{ + @Resource + private IMfProductService mfProductService; + + /** + * 查询产品树列表 + */ + @SaCheckPermission("mf:product:list") + @GetMapping("/list") + public R> list(MfProductBo mfProductBo) + { + List list = mfProductService.selectList(mfProductBo); + return R.ok(list); + } + + /** + * 导出产品树列表 + */ + @SaCheckPermission("mf:product:export") + @Log(title = "产品树", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, MfProductBo mfProductBo) + { + List list = mfProductService.selectList(mfProductBo); + ExcelUtil.exportExcel(list, "产品树", MfProductVo.class, response); + } + + /** + * 获取产品树详细信息 + */ + @SaCheckPermission("mf:product:query") + @GetMapping(value = "/{productId}") + public R getInfo(@PathVariable Long productId) + { + return R.ok(mfProductService.selectById(productId)); + } + + /** + * 新增产品树 + */ + @SaCheckPermission("mf:product:add") + @Log(title = "产品树", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping + public R add(@Validated @RequestBody MfProductBo mfProductBo) + { + boolean inserted = mfProductService.insert(mfProductBo); + if (!inserted) { + return R.fail("新增产品树记录失败!"); + } + return R.ok(); + } + + /** + * 修改产品树 + */ + @SaCheckPermission("mf:product:edit") + @Log(title = "产品树", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping + public R edit(@Validated @RequestBody MfProductBo mfProductBo) + { + Boolean updated = mfProductService.update(mfProductBo); + if (!updated) { + R.fail("修改产品树记录失败!"); + } + return R.ok(); + } + + /** + * 删除产品树 + */ + @SaCheckPermission("mf:product:remove") + @Log(title = "产品树", businessType = BusinessType.DELETE) + @DeleteMapping("/{productIds}") + public R remove(@PathVariable Long[] productIds) + { + boolean deleted = mfProductService.deleteByIds(productIds); + if (!deleted) { + R.fail("删除产品树记录失败!"); + } + return R.ok(); + } +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java new file mode 100644 index 0000000..6229ed9 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java @@ -0,0 +1,30 @@ +package com.ruoyi.mf.domain; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.ruoyi.common.orm.core.domain.TreeEntity; + +/** + * 产品树对象 mf_product + * + * @author 数据小王子 + * 2023-11-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Table(value = "mf_product") +public class MfProduct extends TreeEntity +{ + /** 产品id */ + @Id + private Long productId; + + /** 产品名称 */ + private String productName; + + /** 产品状态(0正常 1停用) */ + private String status; + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java new file mode 100644 index 0000000..d817bf1 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java @@ -0,0 +1,40 @@ +package com.ruoyi.mf.domain.bo; + +import com.ruoyi.mf.domain.MfProduct; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import com.ruoyi.common.orm.core.domain.TreeEntity; + +/** + * 产品树业务对象 mf_product + * + * @author 数据小王子 + * @date 2023-11-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = MfProduct.class, reverseConvertGenerate = false) +public class MfProductBo extends TreeEntity +{ + + /** + * 产品id + */ + private Long productId; + + /** + * 产品名称 + */ + @NotBlank(message = "产品名称不能为空") + private String productName; + + /** + * 产品状态(0正常 1停用) + */ + @NotBlank(message = "产品状态(0正常 1停用)不能为空") + private String status; + + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java new file mode 100644 index 0000000..f3c0c1a --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java @@ -0,0 +1,46 @@ +package com.ruoyi.mf.domain.vo; + +import com.ruoyi.mf.domain.MfProduct; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.excel.annotation.ExcelDictFormat; +import com.ruoyi.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import com.ruoyi.common.orm.core.domain.TreeEntity; + +/** + * 产品树视图对象 mf_product + * + * @author 数据小王子 + * @date 2023-11-23 + */ +@Data +@ExcelIgnoreUnannotated +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = MfProduct.class) +public class MfProductVo extends TreeEntity implements Serializable +{ + + @Serial + private static final long serialVersionUID = 1L; + + /** 产品id */ + @ExcelProperty(value = "产品id") + private Long productId; + + /** 产品名称 */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** 产品状态(0正常 1停用) */ + @ExcelProperty(value = "产品状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_student_status") + private String status; + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java index a7c5904..e2016c0 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java @@ -14,6 +14,7 @@ import java.io.Serial; import java.io.Serializable; import java.util.Date; import com.ruoyi.common.orm.core.domain.BaseEntity; +import lombok.EqualsAndHashCode; /** @@ -24,6 +25,7 @@ import com.ruoyi.common.orm.core.domain.BaseEntity; */ @Data @ExcelIgnoreUnannotated +@EqualsAndHashCode(callSuper = true) @AutoMapper(target = MfStudent.class) public class MfStudentVo extends BaseEntity implements Serializable { diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java new file mode 100644 index 0000000..18b39f4 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java @@ -0,0 +1,17 @@ +package com.ruoyi.mf.mapper; + +import com.mybatisflex.core.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import com.ruoyi.mf.domain.MfProduct; + +/** + * 产品树Mapper接口 + * + * @author 数据小王子 + * 2023-11-23 + */ +@Mapper +public interface MfProductMapper extends BaseMapper +{ + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java new file mode 100644 index 0000000..4fd836d --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java @@ -0,0 +1,58 @@ +package com.ruoyi.mf.service; + +import java.util.List; +import com.ruoyi.mf.domain.MfProduct; +import com.ruoyi.mf.domain.vo.MfProductVo; +import com.ruoyi.mf.domain.bo.MfProductBo; +import com.ruoyi.common.orm.core.service.IBaseService; + +/** + * 产品树Service接口 + * + * @author 数据小王子 + * 2023-11-23 + */ +public interface IMfProductService extends IBaseService +{ + /** + * 查询产品树 + * + * @param productId 产品树主键 + * @return 产品树 + */ + MfProductVo selectById(Long productId); + + /** + * 查询产品树列表 + * + * @param mfProductBo 产品树Bo + * @return 产品树集合 + */ + List selectList(MfProductBo mfProductBo); + + + /** + * 新增产品树 + * + * @param mfProductBo 产品树Bo + * @return 结果:true 操作成功,false 操作失败 + */ + boolean insert(MfProductBo mfProductBo); + + /** + * 修改产品树 + * + * @param mfProductBo 产品树Bo + * @return 结果:true 更新成功,false 更新失败 + */ + boolean update(MfProductBo mfProductBo); + + /** + * 批量删除产品树 + * + * @param productIds 需要删除的产品树主键集合 + * @return 结果:true 删除成功,false 删除失败 + */ + boolean deleteByIds(Long[] productIds); + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java new file mode 100644 index 0000000..98eb8cd --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java @@ -0,0 +1,127 @@ +package com.ruoyi.mf.service.impl; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import cn.hutool.core.util.ObjectUtil; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.ruoyi.common.core.utils.MapstructUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.orm.core.page.PageQuery; +import com.ruoyi.common.orm.core.page.TableDataInfo; +import com.ruoyi.common.orm.core.service.impl.BaseServiceImpl; +import com.ruoyi.common.core.utils.DateUtils; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.mf.mapper.MfProductMapper; +import com.ruoyi.mf.domain.MfProduct; +import com.ruoyi.mf.domain.bo.MfProductBo; +import com.ruoyi.mf.domain.vo.MfProductVo; +import com.ruoyi.mf.service.IMfProductService; + +import static com.ruoyi.mf.domain.table.MfProductTableDef.MF_PRODUCT; + +/** + * 产品树Service业务层处理 + * + * @author 数据小王子 + * 2023-11-23 + */ +@Service +public class MfProductServiceImpl extends BaseServiceImpl implements IMfProductService +{ + @Resource + private MfProductMapper mfProductMapper; + + @Override + public QueryWrapper query() { + return super.query().from(MF_PRODUCT); + } + + private QueryWrapper buildQueryWrapper(MfProductBo mfProductBo) { + QueryWrapper queryWrapper = super.buildBaseQueryWrapper(); + + if (StringUtils.isNotBlank(mfProductBo.getProductName())) { + queryWrapper.and(MF_PRODUCT.PRODUCT_NAME.like(mfProductBo.getProductName())); + } + if (mfProductBo.getOrderNum() != null) { + queryWrapper.and(MF_PRODUCT.ORDER_NUM.eq(mfProductBo.getOrderNum())); + } + if (StringUtils.isNotBlank(mfProductBo.getStatus())) { + queryWrapper.and(MF_PRODUCT.STATUS.eq(mfProductBo.getStatus())); + } + + return queryWrapper; + } + + /** + * 查询产品树 + * + * @param productId 产品树主键 + * @return 产品树 + */ + @Override + public MfProductVo selectById(Long productId) + { + return this.getOneAs(query().where(MF_PRODUCT.PRODUCT_ID.eq(productId)), MfProductVo.class); + } + + /** + * 查询产品树列表 + * + * @param mfProductBo 产品树Bo + * @return 产品树集合 + */ + @Override + public List selectList(MfProductBo mfProductBo) + { + QueryWrapper queryWrapper = buildQueryWrapper(mfProductBo); + return this.listAs(queryWrapper, MfProductVo.class); + } + + + /** + * 新增产品树 + * + * @param mfProductBo 产品树Bo + * @return 结果:true 操作成功,false 操作失败 + */ + @Override + public boolean insert(MfProductBo mfProductBo) + { + MfProduct mfProduct = MapstructUtils.convert(mfProductBo, MfProduct.class); + + return this.save(mfProduct);//使用全局配置的雪花算法主键生成器生成ID值 + } + + /** + * 修改产品树 + * + * @param mfProductBo 产品树Bo + * @return 结果:true 更新成功,false 更新失败 + */ + @Override + public boolean update(MfProductBo mfProductBo) + { + MfProduct mfProduct = MapstructUtils.convert(mfProductBo, MfProduct.class); + boolean updated = this.updateById(mfProduct); + + return updated; + } + + /** + * 批量删除产品树 + * + * @param productIds 需要删除的产品树主键集合 + * @return 结果:true 删除成功,false 删除失败 + */ + @Transactional + @Override + public boolean deleteByIds(Long[] productIds) + { + return this.removeByIds(Arrays.asList(productIds)); + } + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/mf/MfProductMapper.xml b/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/mf/MfProductMapper.xml new file mode 100644 index 0000000..4694c98 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/resources/mapper/mf/MfProductMapper.xml @@ -0,0 +1,7 @@ + + + + +