From 2593c12b3378eb5d6c154559c027572747cf78a2 Mon Sep 17 00:00:00 2001 From: userName <244140623@qq.com> Date: Mon, 19 Feb 2024 11:04:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A1=E5=88=92=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MesPlanDetailController.java | 108 ++++++ .../com/ruoyi/mts/domain/MesPlanDetail.java | 54 +++ .../ruoyi/mts/domain/bo/MesPlanDetailBo.java | 57 +++ .../ruoyi/mts/domain/vo/MesPlanDetailVo.java | 63 ++++ .../ruoyi/mts/mapper/MesPlanDetailMapper.java | 15 + .../mts/service/IMesPlanDetailService.java | 43 +++ .../impl/MesPlanDetailServiceImpl.java | 101 ++++++ .../mapper/mts/MesPlanDetailMapper.xml | 22 ++ ruoyi-ui-vue3/src/api/mts/planDetail.js | 44 +++ ruoyi-ui-vue3/src/router/index.js | 98 +++--- .../src/views/mts/planDetail/index.vue | 329 ++++++++++++++++++ .../src/views/mts/planMain/index.vue | 94 ++--- 12 files changed, 920 insertions(+), 108 deletions(-) create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/controller/MesPlanDetailController.java create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/domain/MesPlanDetail.java create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/domain/bo/MesPlanDetailBo.java create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/domain/vo/MesPlanDetailVo.java create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/mapper/MesPlanDetailMapper.java create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/service/IMesPlanDetailService.java create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/mts/service/impl/MesPlanDetailServiceImpl.java create mode 100644 ruoyi-demo/src/main/resources/mapper/mts/MesPlanDetailMapper.xml create mode 100644 ruoyi-ui-vue3/src/api/mts/planDetail.js create mode 100644 ruoyi-ui-vue3/src/views/mts/planDetail/index.vue diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/controller/MesPlanDetailController.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/controller/MesPlanDetailController.java new file mode 100644 index 0000000..b2c562b --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/controller/MesPlanDetailController.java @@ -0,0 +1,108 @@ +package com.ruoyi.mts.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.mts.domain.vo.MesPlanDetailVo; +import com.ruoyi.mts.domain.bo.MesPlanDetailBo; +import com.ruoyi.mts.service.IMesPlanDetailService; + +/** + * 生产计划明细 + * + * @author jiangzhe + * @date 2024-02-19 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/mts/planDetail") +public class MesPlanDetailController extends BaseController { + + private final IMesPlanDetailService iMesPlanDetailService; + + /** + * 查询生产计划明细列表 + */ + @SaCheckPermission("mts:planDetail:list") + @GetMapping("/list") + public R> list(MesPlanDetailBo bo) { + List list = iMesPlanDetailService.queryList(bo); + return R.ok(list); + } + + /** + * 导出生产计划明细列表 + */ + @SaCheckPermission("mts:planDetail:export") + @Log(title = "生产计划明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(MesPlanDetailBo bo, HttpServletResponse response) { + List list = iMesPlanDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "生产计划明细", MesPlanDetailVo.class, response); + } + + /** + * 获取生产计划明细详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("mts:planDetail:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iMesPlanDetailService.queryById(id)); + } + + /** + * 新增生产计划明细 + */ + @SaCheckPermission("mts:planDetail:add") + @Log(title = "生产计划明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody MesPlanDetailBo bo) { + return toAjax(iMesPlanDetailService.insertByBo(bo)); + } + + /** + * 修改生产计划明细 + */ + @SaCheckPermission("mts:planDetail:edit") + @Log(title = "生产计划明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody MesPlanDetailBo bo) { + return toAjax(iMesPlanDetailService.updateByBo(bo)); + } + + /** + * 删除生产计划明细 + * + * @param ids 主键串 + */ + @SaCheckPermission("mts:planDetail:remove") + @Log(title = "生产计划明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iMesPlanDetailService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/MesPlanDetail.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/MesPlanDetail.java new file mode 100644 index 0000000..1bcee4a --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/MesPlanDetail.java @@ -0,0 +1,54 @@ +package com.ruoyi.mts.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.TreeEntity; + +/** + * 生产计划明细对象 mes_plan_detail + * + * @author jiangzhe + * @date 2024-02-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("mes_plan_detail") +public class MesPlanDetail extends TreeEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + /** + * 主表id + */ + private Long mainId; + /** + * 名称 + */ + private String name; + /** + * 计划时间 + */ + private Date planDate; + /** + * 实际时间 + */ + private Date actualDate; + /** + * 删除标志(0存在,2删除) + */ + @TableLogic + private String delFlag; + +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/bo/MesPlanDetailBo.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/bo/MesPlanDetailBo.java new file mode 100644 index 0000000..4298d4d --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/bo/MesPlanDetailBo.java @@ -0,0 +1,57 @@ +package com.ruoyi.mts.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.TreeEntity; + +/** + * 生产计划明细业务对象 mes_plan_detail + * + * @author jiangzhe + * @date 2024-02-19 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class MesPlanDetailBo extends TreeEntity { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 主表id + */ + @NotNull(message = "主表id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long mainId; + + /** + * 名称 + */ + @NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 计划时间 + */ + @NotNull(message = "计划时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date planDate; + + /** + * 实际时间 + */ + @NotNull(message = "实际时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date actualDate; + + +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/vo/MesPlanDetailVo.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/vo/MesPlanDetailVo.java new file mode 100644 index 0000000..9568bdf --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/domain/vo/MesPlanDetailVo.java @@ -0,0 +1,63 @@ +package com.ruoyi.mts.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + +import java.io.Serializable; + +/** + * 生产计划明细视图对象 mes_plan_detail + * + * @author jiangzhe + * @date 2024-02-19 + */ +@Data +@ExcelIgnoreUnannotated +public class MesPlanDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 父id + */ + @ExcelProperty(value = "父id") + private Long parentId; + + /** + * 主表id + */ + @ExcelProperty(value = "主表id") + private Long mainId; + + /** + * 名称 + */ + @ExcelProperty(value = "名称") + private String name; + + /** + * 计划时间 + */ + @ExcelProperty(value = "计划时间") + private Date planDate; + + /** + * 实际时间 + */ + @ExcelProperty(value = "实际时间") + private Date actualDate; + + +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/mapper/MesPlanDetailMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/mapper/MesPlanDetailMapper.java new file mode 100644 index 0000000..ab4faea --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/mapper/MesPlanDetailMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.mts.mapper; + +import com.ruoyi.mts.domain.MesPlanDetail; +import com.ruoyi.mts.domain.vo.MesPlanDetailVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 生产计划明细Mapper接口 + * + * @author jiangzhe + * @date 2024-02-19 + */ +public interface MesPlanDetailMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/service/IMesPlanDetailService.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/service/IMesPlanDetailService.java new file mode 100644 index 0000000..79e6fba --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/service/IMesPlanDetailService.java @@ -0,0 +1,43 @@ +package com.ruoyi.mts.service; + +import com.ruoyi.mts.domain.MesPlanDetail; +import com.ruoyi.mts.domain.vo.MesPlanDetailVo; +import com.ruoyi.mts.domain.bo.MesPlanDetailBo; + +import java.util.Collection; +import java.util.List; + +/** + * 生产计划明细Service接口 + * + * @author jiangzhe + * @date 2024-02-19 + */ +public interface IMesPlanDetailService { + + /** + * 查询生产计划明细 + */ + MesPlanDetailVo queryById(Long id); + + + /** + * 查询生产计划明细列表 + */ + List queryList(MesPlanDetailBo bo); + + /** + * 新增生产计划明细 + */ + Boolean insertByBo(MesPlanDetailBo bo); + + /** + * 修改生产计划明细 + */ + Boolean updateByBo(MesPlanDetailBo bo); + + /** + * 校验并批量删除生产计划明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/mts/service/impl/MesPlanDetailServiceImpl.java b/ruoyi-demo/src/main/java/com/ruoyi/mts/service/impl/MesPlanDetailServiceImpl.java new file mode 100644 index 0000000..27caf08 --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/mts/service/impl/MesPlanDetailServiceImpl.java @@ -0,0 +1,101 @@ +package com.ruoyi.mts.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.mts.domain.bo.MesPlanDetailBo; +import com.ruoyi.mts.domain.vo.MesPlanDetailVo; +import com.ruoyi.mts.domain.MesPlanDetail; +import com.ruoyi.mts.mapper.MesPlanDetailMapper; +import com.ruoyi.mts.service.IMesPlanDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 生产计划明细Service业务层处理 + * + * @author jiangzhe + * @date 2024-02-19 + */ +@RequiredArgsConstructor +@Service +public class MesPlanDetailServiceImpl implements IMesPlanDetailService { + + private final MesPlanDetailMapper baseMapper; + + /** + * 查询生产计划明细 + */ + @Override + public MesPlanDetailVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + + /** + * 查询生产计划明细列表 + */ + @Override + public List queryList(MesPlanDetailBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(MesPlanDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getParentId() != null, MesPlanDetail::getParentId, bo.getParentId()); + lqw.eq(bo.getMainId() != null, MesPlanDetail::getMainId, bo.getMainId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), MesPlanDetail::getName, bo.getName()); + lqw.eq(bo.getPlanDate() != null, MesPlanDetail::getPlanDate, bo.getPlanDate()); + lqw.eq(bo.getActualDate() != null, MesPlanDetail::getActualDate, bo.getActualDate()); + return lqw; + } + + /** + * 新增生产计划明细 + */ + @Override + public Boolean insertByBo(MesPlanDetailBo bo) { + MesPlanDetail add = BeanUtil.toBean(bo, MesPlanDetail.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改生产计划明细 + */ + @Override + public Boolean updateByBo(MesPlanDetailBo bo) { + MesPlanDetail update = BeanUtil.toBean(bo, MesPlanDetail.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(MesPlanDetail entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除生产计划明细 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-demo/src/main/resources/mapper/mts/MesPlanDetailMapper.xml b/ruoyi-demo/src/main/resources/mapper/mts/MesPlanDetailMapper.xml new file mode 100644 index 0000000..df83065 --- /dev/null +++ b/ruoyi-demo/src/main/resources/mapper/mts/MesPlanDetailMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-ui-vue3/src/api/mts/planDetail.js b/ruoyi-ui-vue3/src/api/mts/planDetail.js new file mode 100644 index 0000000..ca1467f --- /dev/null +++ b/ruoyi-ui-vue3/src/api/mts/planDetail.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询生产计划明细列表 +export function listPlanDetail(query) { + return request({ + url: '/mts/planDetail/list', + method: 'get', + params: query + }) +} + +// 查询生产计划明细详细 +export function getPlanDetail(id) { + return request({ + url: '/mts/planDetail/' + id, + method: 'get' + }) +} + +// 新增生产计划明细 +export function addPlanDetail(data) { + return request({ + url: '/mts/planDetail', + method: 'post', + data: data + }) +} + +// 修改生产计划明细 +export function updatePlanDetail(data) { + return request({ + url: '/mts/planDetail', + method: 'put', + data: data + }) +} + +// 删除生产计划明细 +export function delPlanDetail(id) { + return request({ + url: '/mts/planDetail/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui-vue3/src/router/index.js b/ruoyi-ui-vue3/src/router/index.js index 2559686..2f91f9e 100644 --- a/ruoyi-ui-vue3/src/router/index.js +++ b/ruoyi-ui-vue3/src/router/index.js @@ -89,76 +89,90 @@ export const constantRoutes = [ // 动态路由,基于用户权限动态去加载 export const dynamicRoutes = [ { - path: '/system/user-auth', + path: "/system/user-auth", component: Layout, hidden: true, - permissions: ['system:user:edit'], + permissions: ["system:user:edit"], children: [ { - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { title: '分配角色', activeMenu: '/system/user' } - } - ] + path: "role/:userId(\\d+)", + component: () => import("@/views/system/user/authRole"), + name: "AuthRole", + meta: { title: "分配角色", activeMenu: "/system/user" }, + }, + ], }, { - path: '/system/role-auth', + path: "/system/role-auth", component: Layout, hidden: true, - permissions: ['system:role:edit'], + permissions: ["system:role:edit"], children: [ { - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { title: '分配用户', activeMenu: '/system/role' } - } - ] + path: "user/:roleId(\\d+)", + component: () => import("@/views/system/role/authUser"), + name: "AuthUser", + meta: { title: "分配用户", activeMenu: "/system/role" }, + }, + ], }, { - path: '/system/dict-data', + path: "/system/dict-data", component: Layout, hidden: true, - permissions: ['system:dict:list'], + permissions: ["system:dict:list"], children: [ { - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { title: '字典数据', activeMenu: '/system/dict' } - } - ] + path: "index/:dictId(\\d+)", + component: () => import("@/views/system/dict/data"), + name: "Data", + meta: { title: "字典数据", activeMenu: "/system/dict" }, + }, + ], }, { - path: '/system/oss-config', + path: "/mts/plan-detail", component: Layout, hidden: true, - permissions: ['system:oss:list'], + permissions: ["mts:planMain:list"], children: [ { - path: 'index', - component: () => import('@/views/system/oss/config'), - name: 'OssConfig', - meta: { title: '配置管理', activeMenu: '/system/oss'} - } - ] + path: "index/:mainId(\\d+)", + component: () => import("@/views/mts/planDetail"), + name: "detail", + meta: { title: "计划任务", activeMenu: "/mts/planMain" }, + }, + ], }, { - path: '/tool/gen-edit', + path: "/system/oss-config", component: Layout, hidden: true, - permissions: ['tool:gen:edit'], + permissions: ["system:oss:list"], children: [ { - path: 'index/:tableId(\\d+)', - component: () => import('@/views/tool/gen/editTable'), - name: 'GenEdit', - meta: { title: '修改生成配置', activeMenu: '/tool/gen' } - } - ] - } -] + path: "index", + component: () => import("@/views/system/oss/config"), + name: "OssConfig", + meta: { title: "配置管理", activeMenu: "/system/oss" }, + }, + ], + }, + { + path: "/tool/gen-edit", + component: Layout, + hidden: true, + permissions: ["tool:gen:edit"], + children: [ + { + path: "index/:tableId(\\d+)", + component: () => import("@/views/tool/gen/editTable"), + name: "GenEdit", + meta: { title: "修改生成配置", activeMenu: "/tool/gen" }, + }, + ], + }, +]; const router = createRouter({ history: createWebHistory(import.meta.env.VITE_APP_CONTEXT_PATH), diff --git a/ruoyi-ui-vue3/src/views/mts/planDetail/index.vue b/ruoyi-ui-vue3/src/views/mts/planDetail/index.vue new file mode 100644 index 0000000..e6744cb --- /dev/null +++ b/ruoyi-ui-vue3/src/views/mts/planDetail/index.vue @@ -0,0 +1,329 @@ + + + diff --git a/ruoyi-ui-vue3/src/views/mts/planMain/index.vue b/ruoyi-ui-vue3/src/views/mts/planMain/index.vue index c63c4aa..1d38a40 100644 --- a/ruoyi-ui-vue3/src/views/mts/planMain/index.vue +++ b/ruoyi-ui-vue3/src/views/mts/planMain/index.vue @@ -2,26 +2,15 @@
- + - - @@ -33,50 +22,32 @@ - 新增 + 新增 - 修改 + 修改 - 删除 + 删除 - 导出 + 导出 - - + + +