From 5f5982d75ef24d64682eaf1f4d44b4ddf5a483ad Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Mon, 15 May 2023 11:13:56 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E5=9F=BA=E7=A1=80=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nladmin-system/doc/wms.xls | Bin 295936 -> 331264 bytes .../MdBaseClassstandardController.java | 93 +++++ .../service/IMdBaseClassstandardService.java | 72 ++++ .../service/dao/MdBaseClassstandard.java | 98 +++++ .../dao/mapper/MdBaseClassstandardMapper.java | 12 + .../dao/mapper/MdBaseClassstandardMapper.xml | 5 + .../service/dto/MdBaseClassstandardDto.java | 73 ++++ .../service/dto/MdBaseClassstandardQuery.java | 12 + .../service/dto/MdBaseClassstandardTrees.java | 26 ++ .../impl/MdBaseClassstandardServiceImpl.java | 246 +++++++++++ .../impl/MdBaseMaterialServiceImpl.java | 7 + .../controller/MdBaseVehicleController.java | 66 +++ .../service/IMdBaseVehicleService.java | 43 ++ .../vehicle/service/dao/MdBaseVehicle.java | 80 ++++ .../dao/mapper/MdBaseVehicleMapper.java | 12 + .../dao/mapper/MdBaseVehicleMapper.xml | 5 + .../vehicle/service/dto/MdBaseVehicleDto.java | 68 +++ .../service/dto/MdBaseVehicleQuery.java | 12 + .../impl/MdBaseVehicleServiceImpl.java | 85 ++++ .../controller/MdBaseWorkshopController.java | 8 + .../service/IMdBaseWorkshopService.java | 7 + .../impl/MdBaseWorkshopServiceImpl.java | 8 + .../wms/basedata/classification/index.vue | 390 ++++++++++++++++++ .../classification/mdBaseClassstandard.js | 82 ++++ .../src/views/wms/basedata/material/index.vue | 107 +++-- .../src/views/wms/basedata/vehicle/index.vue | 184 +++++++++ .../wms/basedata/vehicle/mdBaseVehicle.js | 27 ++ .../wms/basedata/workshop/mdBaseWorkshop.js | 9 +- 28 files changed, 1811 insertions(+), 26 deletions(-) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java create mode 100644 nladmin-ui/src/views/wms/basedata/classification/index.vue create mode 100644 nladmin-ui/src/views/wms/basedata/classification/mdBaseClassstandard.js create mode 100644 nladmin-ui/src/views/wms/basedata/vehicle/index.vue create mode 100644 nladmin-ui/src/views/wms/basedata/vehicle/mdBaseVehicle.js diff --git a/nladmin-system/doc/wms.xls b/nladmin-system/doc/wms.xls index 0b05f22b4b7adec1e40d704815b52d9cf27c8f72..d48375496360bf6d05104c4ece5e0df2de2417f6 100644 GIT binary patch delta 68005 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 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java new file mode 100644 index 0000000..9b8acf9 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java @@ -0,0 +1,93 @@ +package org.nl.wms.database.classification.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.classification.service.IMdBaseClassstandardService; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; +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.List; +import java.util.Map; + +/** +* @author lyd +* @date 2023-05-11 +**/ +@Slf4j +@RestController +@Api(tags = "基础分类管理") +@RequestMapping("/api/Classstandard") +public class MdBaseClassstandardController { + + @Autowired + private IMdBaseClassstandardService mdBaseClassstandardService; + + @GetMapping + @Log("查询基础分类") + @ApiOperation("查询基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseClassstandardService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增基础分类") + @ApiOperation("新增基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseClassstandard entity){ + mdBaseClassstandardService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改基础分类") + @ApiOperation("修改基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseClassstandard entity){ + mdBaseClassstandardService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除基础分类") + @ApiOperation("删除基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody List ids) { + mdBaseClassstandardService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getClassName") + @Log("获取分类名称下拉框") + @ApiOperation("获取分类名称下拉框") + public ResponseEntity getClassName() { + return new ResponseEntity<>(mdBaseClassstandardService.getClassName(), HttpStatus.OK); + } + + @GetMapping("/loadClass") + @Log("查询基础类型") + @ApiOperation("查询基础类型") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity query(@RequestParam Map whereJson) { + return new ResponseEntity<>(mdBaseClassstandardService.loadClass(whereJson), HttpStatus.OK); + } + + @ApiOperation("查询类别:根据ID获取同级与上级数据") + @PostMapping("/superior") + //@PreAuthorize("@el.check('user:list','dept:list')") + public ResponseEntity getSuperior(@RequestBody String id) { + MdBaseClassstandard classstandard = mdBaseClassstandardService.getById(id); + ArrayList list = mdBaseClassstandardService.getSuperior(classstandard, new ArrayList<>()); + return new ResponseEntity<>(mdBaseClassstandardService.buildTree(list), HttpStatus.OK); + } +} + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java new file mode 100644 index 0000000..7081151 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java @@ -0,0 +1,72 @@ +package org.nl.wms.database.classification.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-11 +**/ +public interface IMdBaseClassstandardService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseClassstandard entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseClassstandard entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(List ids); + + /** + * 获取下拉框 + * @return + */ + List getClassName(); + + /** + * loadClass + * @param whereJson + * @return + */ + List loadClass(Map whereJson); + + /** + * + * @param classstandard + * @param objects + * @return + */ + ArrayList getSuperior(MdBaseClassstandard classstandard, ArrayList objects); + + /** + * 构建树形 + * @param list + * @return + */ + List buildTree(ArrayList list); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java new file mode 100644 index 0000000..e244b8f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java @@ -0,0 +1,98 @@ +package org.nl.wms.database.classification.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_classstandard") +public class MdBaseClassstandard implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "class_id", type = IdType.NONE) + @ApiModelProperty(value = "分类标识") + private String class_id; + + @ApiModelProperty(value = "分类编码") + private String class_code; + + @ApiModelProperty(value = "分类名称") + private String class_name; + + @ApiModelProperty(value = "分类简要描述") + private String class_desc; + + @ApiModelProperty(value = "上级分类标识") + private String parent_class_id; + + @ApiModelProperty(value = "子级数目") + private Integer sub_count; + + @ApiModelProperty(value = "是否叶子") + private Boolean is_leaf; + + @ApiModelProperty(value = "是否可修改") + private Boolean is_modify; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "级别") + private String class_level; + + @ApiModelProperty(value = "外部标识") + private String ext_id; + + @ApiModelProperty(value = "外部上级标识") + private String ext_parent_id; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @TableField(exist = false) + private Boolean hasChildren; + + @TableField(exist = false) + private String id; + + @TableField(exist = false) + private String label; + @TableField(exist = false) + private Boolean leaf; + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java new file mode 100644 index 0000000..656069b --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.classification.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public interface MdBaseClassstandardMapper extends BaseMapper { + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml new file mode 100644 index 0000000..fc841cc --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java new file mode 100644 index 0000000..09830e6 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java @@ -0,0 +1,73 @@ +package org.nl.wms.database.classification.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +public class MdBaseClassstandardDto implements Serializable { + + /** 分类标识 */ + private String class_id; + + /** 分类编码 */ + private String class_code; + + /** 分类名称 */ + private String class_name; + + /** 分类简要描述 */ + private String class_desc; + + /** 上级分类标识 */ + private String parent_class_id; + + /** 子级数目 */ + private String sub_count; + + /** 是否叶子 */ + private Boolean is_leaf; + + /** 是否可修改 */ + private Boolean is_modify; + + /** 是否删除 */ + private Boolean is_delete; + + /** 级别 */ + private String class_level; + + /** 外部标识 */ + private String ext_id; + + /** 外部上级标识 */ + private String ext_parent_id; + + /** 车间编码 */ + private String workshop_code; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java new file mode 100644 index 0000000..bbf449a --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.classification.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public class MdBaseClassstandardQuery extends BaseQuery { + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java new file mode 100644 index 0000000..c5f76cc --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java @@ -0,0 +1,26 @@ +package org.nl.wms.database.classification.service.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/12 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MdBaseClassstandardTrees extends MdBaseClassstandard implements Serializable { + + @TableField(exist = false) + private List children; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java new file mode 100644 index 0000000..d3c5b65 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java @@ -0,0 +1,246 @@ +package org.nl.wms.database.classification.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.database.classification.service.IMdBaseClassstandardService; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; +import org.nl.wms.database.classification.service.dao.mapper.MdBaseClassstandardMapper; +import org.nl.wms.database.classification.service.dto.MdBaseClassstandardTrees; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +/** + * @author lyd + * @description 服务实现 + * @date 2023-05-11 + **/ +@Slf4j +@Service +public class MdBaseClassstandardServiceImpl extends ServiceImpl implements IMdBaseClassstandardService { + + @Autowired + private MdBaseClassstandardMapper mdBaseClassstandardMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String class_code = ObjectUtil.isNotEmpty(whereJson.get("class_code")) ? whereJson.get("class_code").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(class_code), MdBaseClassstandard::getClass_code, class_code) + .eq(MdBaseClassstandard::getIs_delete, false) + .eq(MdBaseClassstandard::getParent_class_id, "0") + .or(la -> la.isNull(MdBaseClassstandard::getParent_class_id)); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseClassstandardMapper.selectPage(pages, lam); + pages.getRecords().forEach(classstandard -> { + classstandard.setIs_leaf(!(classstandard.getSub_count() > 0)); + classstandard.setHasChildren(classstandard.getSub_count() > 0); + }); + return pages; + } + + @Override + @Transactional + public void create(MdBaseClassstandard entity) { + // 判断是否存在 + MdBaseClassstandard mdBaseClassstandard = mdBaseClassstandardMapper + .selectOne(new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getClass_code, entity.getClass_code()) + .eq(MdBaseClassstandard::getIs_delete, false)); + if (ObjectUtil.isNotEmpty(mdBaseClassstandard) && !mdBaseClassstandard.getClass_id().equals(entity.getClass_id())) { + throw new BadRequestException("存在相同的基础类别编号"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setClass_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + entity.setIs_leaf(true); + entity.setClass_level(Math.ceil(entity.getClass_code().length() / 2.0) + ""); + entity.setSub_count(0); + mdBaseClassstandardMapper.insert(entity); + // 更新节点 + if (ObjectUtil.isNotEmpty(entity.getParent_class_id()) && !entity.getParent_class_id().equals("0")) { + updateSubCnt(entity.getParent_class_id()); + } + } + + private void updateSubCnt(String parentClassId) { + MdBaseClassstandard classObject = mdBaseClassstandardMapper.selectById(parentClassId); + if (ObjectUtil.isEmpty(classObject)) return; + List classList = mdBaseClassstandardMapper + .selectList(new LambdaQueryWrapper().eq(MdBaseClassstandard::getParent_class_id, parentClassId)); + int size = classList.size(); + classObject.setSub_count(size); + classObject.setIs_leaf(size > 0); + mdBaseClassstandardMapper.updateById(classObject); + } + + @Override + public void update(MdBaseClassstandard entity) { + MdBaseClassstandard dto = mdBaseClassstandardMapper.selectById(entity.getClass_id()); + if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + // 判断是否存在 + MdBaseClassstandard mdBaseClassstandard = mdBaseClassstandardMapper + .selectOne(new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getClass_code, entity.getClass_code()) + .eq(MdBaseClassstandard::getIs_delete, false)); + if (ObjectUtil.isNotEmpty(mdBaseClassstandard) && !mdBaseClassstandard.getClass_id().equals(entity.getClass_id())) { + throw new BadRequestException("存在相同的基础类别编号"); + } + // 查询原来的父id + String oldPid = dto.getParent_class_id(); + String newPid = entity.getParent_class_id(); + if (entity.getParent_class_id() != null && entity.getClass_id().equals(entity.getParent_class_id())) { + throw new BadRequestException("上级不能为自己"); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + // 更新 + mdBaseClassstandardMapper.updateById(entity); + //更新父节点中子节点数目 + updateSubCnt(oldPid); + updateSubCnt(newPid); + } + + @Override + public void deleteAll(List ids) { + // 递归删除子类 + for (String id : ids) { + // 获取元素体 + MdBaseClassstandard classstandard = mdBaseClassstandardMapper.selectById(id); + mdBaseClassstandardMapper.deleteById(classstandard.getClass_id()); + // 找出所有当前节点的子节点 + List baseClassstandardList = mdBaseClassstandardMapper.selectList( + new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getParent_class_id, classstandard.getClass_id())); + if (baseClassstandardList.size() > 0) { + List collect = baseClassstandardList.stream() + .map(md -> md.getClass_id()) + .collect(Collectors.toList()); + deleteAll(collect); + } + updateSubCnt(classstandard.getParent_class_id()); + } + } + + @Override + public List getClassName() { + return mdBaseClassstandardMapper.selectList(new LambdaQueryWrapper() + .isNull(MdBaseClassstandard::getParent_class_id) + .or() + .eq(MdBaseClassstandard::getParent_class_id, "0") + .eq(MdBaseClassstandard::getIs_delete, false)); + } + + @Override + public List loadClass(Map whereJson) { + String pid = ObjectUtil.isNotEmpty(whereJson.get("pid")) ? whereJson.get("pid").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(pid), MdBaseClassstandard::getParent_class_id, pid) + .or(ObjectUtil.isEmpty(pid), la -> la.isNull(MdBaseClassstandard::getParent_class_id) + .or() + .eq(MdBaseClassstandard::getParent_class_id, "0")) + .eq(MdBaseClassstandard::getIs_delete, false); + List classstandardList = mdBaseClassstandardMapper.selectList(lam); + classstandardList.forEach(classstandard -> { + classstandard.setHasChildren(classstandard.getSub_count() > 0); + classstandard.setLeaf(!(classstandard.getSub_count() > 0)); + classstandard.setId(classstandard.getClass_id()); + classstandard.setLabel(classstandard.getClass_name()); + }); + return classstandardList; + } + + /** + * 递归获取树形数据,从子级到父级以及最高级 + * + * @param classstandard + * @param res + * @return + */ + @Override + public ArrayList getSuperior(MdBaseClassstandard classstandard, ArrayList res) { + if (ObjectUtil.isEmpty(classstandard.getParent_class_id()) || classstandard.getParent_class_id().equals("0")) { + // 父类id为空或者是0就是顶级类别 + List classstandardList = mdBaseClassstandardMapper.selectList(new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getIs_delete, false) + .eq(MdBaseClassstandard::getParent_class_id, "0") + .or(la -> la.isNull(MdBaseClassstandard::getParent_class_id))); + res.addAll(classstandardList); + return res; + } + // 递归寻找同级 + List mdBaseClassstandards = mdBaseClassstandardMapper.selectList( + new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getIs_delete, false) + .eq(MdBaseClassstandard::getParent_class_id, classstandard.getParent_class_id())); + res.addAll(mdBaseClassstandards); + return getSuperior(mdBaseClassstandardMapper.selectById(classstandard.getParent_class_id()), res); + } + + @Override + public List buildTree(ArrayList list) { + // 将获取的数据初始化状态 + list.forEach(classstandard -> { + classstandard.setId(classstandard.getClass_id()); + classstandard.setLabel(classstandard.getClass_name()); + classstandard.setLeaf(!(classstandard.getSub_count() > 0)); + classstandard.setHasChildren(classstandard.getSub_count() > 0); + }); + List trees = new ArrayList<>(); // 待返回数据 + for (MdBaseClassstandard mdBaseClassstandard : list) { + // 筛选父类的值 + if (ObjectUtil.isEmpty(mdBaseClassstandard.getParent_class_id()) + || mdBaseClassstandard.getParent_class_id().equals("0")) { + // collect:获取当前对象的所有子级 + List collect = list.stream().filter(t -> t.getParent_class_id() + .equals(mdBaseClassstandard.getClass_id())).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect)) { + // 设置参数 + collect.forEach(classstandard -> { + classstandard.setId(classstandard.getClass_id()); + classstandard.setLabel(classstandard.getClass_name()); + classstandard.setHasChildren(classstandard.getSub_count() > 0); + }); + MdBaseClassstandardTrees tObj = new MdBaseClassstandardTrees(); + // 赋值一份实体,可以避免vue-tree拿到children属性显示展开图标 + BeanUtils.copyProperties(mdBaseClassstandard, tObj); + tObj.setChildren(collect); + trees.add(tObj); + } else { + trees.add(mdBaseClassstandard); + } + } + } + return trees; + } + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java index d73b8f4..995086e 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.wms.database.material.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -18,6 +19,7 @@ import org.springframework.stereotype.Service; import java.util.Map; import java.util.Set; +import java.util.function.Consumer; /** @@ -34,7 +36,12 @@ public class MdBaseMaterialServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page){ + String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) ? whereJson.get("blurry").toString() : null; + String workshop_code = ObjectUtil.isNotEmpty(whereJson.get("workshop_code")) ? whereJson.get("workshop_code").toString() : null; LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(blurry), MdBaseMaterial::getMaterial_code, blurry) + .or(ObjectUtil.isNotEmpty(blurry), l -> l.like(ObjectUtil.isNotEmpty(blurry), MdBaseMaterial::getMaterial_name, blurry)) + .eq(ObjectUtil.isNotEmpty(workshop_code), MdBaseMaterial::getWorkshop_code, workshop_code); IPage pages = new Page<>(page.getPage() + 1, page.getSize()); mdBaseMaterialMapper.selectPage(pages, lam); return pages; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java new file mode 100644 index 0000000..64271da --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java @@ -0,0 +1,66 @@ +package org.nl.wms.database.vehicle.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; +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.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-11 +**/ +@Slf4j +@RestController +@Api(tags = "载具维护管理") +@RequestMapping("/api/mdBaseVehicle") +public class MdBaseVehicleController { + + @Autowired + private IMdBaseVehicleService mdBaseVehicleService; + + @GetMapping + @Log("查询载具维护") + @ApiOperation("查询载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseVehicleService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增载具维护") + @ApiOperation("新增载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseVehicle entity){ + mdBaseVehicleService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改载具维护") + @ApiOperation("修改载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseVehicle entity){ + mdBaseVehicleService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除载具维护") + @ApiOperation("删除载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdBaseVehicleService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java new file mode 100644 index 0000000..1444e28 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java @@ -0,0 +1,43 @@ +package org.nl.wms.database.vehicle.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-11 +**/ +public interface IMdBaseVehicleService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseVehicle entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseVehicle entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java new file mode 100644 index 0000000..65ef1b8 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java @@ -0,0 +1,80 @@ +package org.nl.wms.database.vehicle.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_vehicle") +public class MdBaseVehicle implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "vehicle_code", type = IdType.NONE) + @ApiModelProperty(value = "载具编码") + private String vehicle_code; + + @ApiModelProperty(value = "载具名称") + private String vehicle_name; + + @ApiModelProperty(value = "载具类型") + private String vehicle_type; + + @ApiModelProperty(value = "一维码") + private String one_code; + + @ApiModelProperty(value = "二维码") + private String two_code; + + @ApiModelProperty(value = "RFID编码") + private String rfid_code; + + @ApiModelProperty(value = "载具宽度") + private BigDecimal vehicle_width; + + @ApiModelProperty(value = "载具长度") + private BigDecimal vehicle_long; + + @ApiModelProperty(value = "载具高度") + private BigDecimal vehicle_height; + + @ApiModelProperty(value = "载具超仓位类型") + private String overstruct_type; + + @ApiModelProperty(value = "占仓位数") + private BigDecimal occupystruct_qty; + + @ApiModelProperty(value = "外部标识") + private String ext_id; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java new file mode 100644 index 0000000..9dc21e3 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.vehicle.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public interface MdBaseVehicleMapper extends BaseMapper { + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml new file mode 100644 index 0000000..e51e86f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java new file mode 100644 index 0000000..737739f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java @@ -0,0 +1,68 @@ +package org.nl.wms.database.vehicle.service.dto; + +import java.math.BigDecimal; +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +public class MdBaseVehicleDto implements Serializable { + + /** 载具编码 */ + private String vehicle_code; + + /** 载具名称 */ + private String vehicle_name; + + /** 载具类型 */ + private String vehicle_type; + + /** 一维码 */ + private String one_code; + + /** 二维码 */ + private String two_code; + + /** RFID编码 */ + private String rfid_code; + + /** 载具宽度 */ + private BigDecimal vehicle_width; + + /** 载具长度 */ + private BigDecimal vehicle_long; + + /** 载具高度 */ + private BigDecimal vehicle_height; + + /** 载具超仓位类型 */ + private String overstruct_type; + + /** 占仓位数 */ + private BigDecimal occupystruct_qty; + + /** 外部标识 */ + private String ext_id; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java new file mode 100644 index 0000000..7048638 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.vehicle.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public class MdBaseVehicleQuery extends BaseQuery { + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java new file mode 100644 index 0000000..faea58f --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java @@ -0,0 +1,85 @@ +package org.nl.wms.database.vehicle.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.mapper.MdBaseVehicleMapper; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-11 +**/ +@Slf4j +@Service +public class MdBaseVehicleServiceImpl extends ServiceImpl implements IMdBaseVehicleService { + + @Autowired + private MdBaseVehicleMapper mdBaseVehicleMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + String vehicle_type = ObjectUtil.isNotEmpty(whereJson.get("vehicle_type")) ? whereJson.get("vehicle_type").toString() : null; + String vehicle_code = ObjectUtil.isNotEmpty(whereJson.get("vehicle_code")) ? whereJson.get("vehicle_code").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(vehicle_type), MdBaseVehicle::getVehicle_type, vehicle_type) + .like(ObjectUtil.isNotEmpty(vehicle_code), MdBaseVehicle::getVehicle_code, vehicle_code); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseVehicleMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(MdBaseVehicle entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setVehicle_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + mdBaseVehicleMapper.insert(entity); + } + + @Override + public void update(MdBaseVehicle entity) { + MdBaseVehicle dto = mdBaseVehicleMapper.selectById(entity.getVehicle_code()); + if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + mdBaseVehicleMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + mdBaseVehicleMapper.deleteBatchIds(ids); + } + +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java index 30ce61c..1c63c37 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java @@ -63,4 +63,12 @@ public class MdBaseWorkshopController { mdBaseWorkshopService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + @GetMapping("/getWorkShopList") + @Log("获取车间下拉框") + @ApiOperation("获取车间下拉框") + //@SaCheckPermission("@el.check('mdBaseWorkshop:list')") + public ResponseEntity getWorkShopList(){ + return new ResponseEntity<>(mdBaseWorkshopService.getWorkShopList(),HttpStatus.OK); + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java index 8753459..be158c6 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java @@ -5,6 +5,7 @@ import org.nl.common.domain.query.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; +import java.util.List; import java.util.Map; import java.util.Set; @@ -40,4 +41,10 @@ public interface IMdBaseWorkshopService extends IService { * @param ids / */ void deleteAll(Set ids); + + /** + * 获取车间下拉框 + * @return + */ + List getWorkShopList(); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java index 4b3f758..aae4573 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java @@ -14,6 +14,7 @@ import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Map; import java.util.Set; @@ -71,4 +72,11 @@ public class MdBaseWorkshopServiceImpl extends ServiceImpl getWorkShopList() { + return mdBaseWorkshopMapper.selectList(new LambdaQueryWrapper() + .eq(MdBaseWorkshop::getIs_used, true) + .eq(MdBaseWorkshop::getIs_delete, false)); + } + } diff --git a/nladmin-ui/src/views/wms/basedata/classification/index.vue b/nladmin-ui/src/views/wms/basedata/classification/index.vue new file mode 100644 index 0000000..6c7014f --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/classification/index.vue @@ -0,0 +1,390 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/classification/mdBaseClassstandard.js b/nladmin-ui/src/views/wms/basedata/classification/mdBaseClassstandard.js new file mode 100644 index 0000000..0c216de --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/classification/mdBaseClassstandard.js @@ -0,0 +1,82 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/Classstandard', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/Classstandard/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/Classstandard', + method: 'put', + data + }) +} + +export function getClass(params) { + return request({ + url: 'api/Classstandard/loadClass', + method: 'get', + params + }) +} + +export function getClassSuperior(ids) { + const data = ids.length || ids.length === 0 ? ids : Array.of(ids) + return request({ + url: 'api/Classstandard/superior', + method: 'post', + data + }) +} + +export function getClassType(params) { + return request({ + url: 'api/Classstandard/getClass', + method: 'get', + params + }) +} +export function queryClassById(params) { + return request({ + url: 'api/Classstandard/queryClassById', + method: 'get', + params + }) +} +// 传入分类标识和级别 +export function getType(params) { + return request({ + url: 'api/Classstandard/getType', + method: 'get', + params + }) +} + +export function getClassTable(params) { + return request({ + url: 'api/Classstandard/getClassTable', + method: 'get', + params + }) +} + +export function getClassName() { + return request({ + url: 'api/Classstandard/getClassName', + method: 'get' + }) +} + +export default { add, edit, del, getClass, getClassSuperior, getClassType, getClassTable, getType, queryClassById, getClassName } diff --git a/nladmin-ui/src/views/wms/basedata/material/index.vue b/nladmin-ui/src/views/wms/basedata/material/index.vue index c726090..0f93777 100644 --- a/nladmin-ui/src/views/wms/basedata/material/index.vue +++ b/nladmin-ui/src/views/wms/basedata/material/index.vue @@ -2,6 +2,41 @@
+
+ + + + + + + + + + + +
@@ -37,27 +72,27 @@ - - - - - - - + + + + + + + - - - - + + + +