add:基础管理/物料分类

This commit is contained in:
zhangzhiqiang
2023-05-15 19:47:30 +08:00
parent 535b1a6b8c
commit cc9f55ace0
15 changed files with 457 additions and 102 deletions

View File

@@ -14,7 +14,7 @@ import java.sql.Connection;
/**
* mybatis数据库操作拦截
*/
@Component
//@Component
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class DatazhuazhuaInterceptor implements Interceptor {

View File

@@ -1,20 +0,0 @@
package org.nl.wms.masterdata_manage.controller.master;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 基础数据分类标准表 前端控制器
* </p>
*
* @author generator
* @since 2023-05-05
*/
@RestController
@RequestMapping("/mdPbClassstandard")
public class MdPbClassstandardController {
}

View File

@@ -1,20 +0,0 @@
package org.nl.wms.masterdata_manage.controller.master;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 计量单位表 前端控制器
* </p>
*
* @author generator
* @since 2023-05-05
*/
@RestController
@RequestMapping("/mdPbMeasureunit")
public class MdPbMeasureunitController {
}

View File

@@ -1,7 +1,8 @@
package org.nl.wms.masterdata_manage.备份master.rest;
package org.nl.wms.masterdata_manage.master.controller.classstandard;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -9,10 +10,13 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.masterdata_manage.master.service.classstandard.IMdPbClassstandardService;
import org.nl.wms.masterdata_manage.备份master.service.ClassstandardService;
import org.nl.wms.masterdata_manage.备份master.service.dto.ClassstandardDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -30,24 +34,27 @@ import java.util.Map;
@Api(tags = "基础类别管理")
@RequestMapping("/api/Classstandard")
@Slf4j
@SaIgnore
public class ClassstandardController {
private final ClassstandardService ClassstandardService;
@Autowired
private IMdPbClassstandardService mdPbClassstandardService;
@GetMapping
@Log("查询基础类别")
@ApiOperation("查询基础类别")
//@PreAuthorize("@el.check('Classstandard:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(ClassstandardService.queryAll(whereJson, page), HttpStatus.OK);
public ResponseEntity<Object> queryList(@RequestParam Map whereJson) {
return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.dropdownList(whereJson)), HttpStatus.OK);
}
@PostMapping
@Log("新增基础类别")
@ApiOperation("新增基础类别")
//@PreAuthorize("@el.check('Classstandard:add')")
public ResponseEntity<Object> create(@Validated @RequestBody ClassstandardDto dto) {
ClassstandardService.create(dto);
public ResponseEntity<Object> create(@Validated @RequestBody JSONObject form) {
mdPbClassstandardService.create(form);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@@ -55,8 +62,8 @@ public class ClassstandardController {
@Log("修改基础类别")
@ApiOperation("修改基础类别")
//@PreAuthorize("@el.check('Classstandard:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody ClassstandardDto dto) {
ClassstandardService.update(dto);
public ResponseEntity<Object> update(@Validated @RequestBody JSONObject form) {
mdPbClassstandardService.updateForm(form);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@@ -64,8 +71,8 @@ public class ClassstandardController {
@ApiOperation("删除基础类别")
//@PreAuthorize("@el.check('Classstandard:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
ClassstandardService.deleteAll(ids);
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
mdPbClassstandardService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@@ -73,16 +80,16 @@ public class ClassstandardController {
@Log("查询基础类型")
@ApiOperation("查询基础类型")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson) {
return new ResponseEntity<>(ClassstandardService.loadClass(whereJson), HttpStatus.OK);
public ResponseEntity<Object> query(@RequestParam JSONObject whereJson) {
return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.loadClass(whereJson)), HttpStatus.OK);
}
@GetMapping("/getClass")
@Log("查询基础类型")
@ApiOperation("查询基础类型")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> queryClassBycode(@RequestParam Map whereJson) {
return new ResponseEntity<>(ClassstandardService.queryClassBycode(whereJson), HttpStatus.OK);
public ResponseEntity<Object> queryClassBycode(@RequestParam JSONObject whereJson) {
return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.queryClassBycode(whereJson)), HttpStatus.OK);
}
@@ -90,8 +97,8 @@ public class ClassstandardController {
@Log("查询分类基础列表")
@ApiOperation("查询分类基础列表")
//@PreAuthorize("@el.check('materialtype:list')")
public ResponseEntity<Object> queryClassById(@RequestParam Map whereJson) {
return new ResponseEntity<>(ClassstandardService.queryClassById(whereJson), HttpStatus.OK);
public ResponseEntity<Object> queryClassById(@RequestParam JSONObject whereJson) {
return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.queryClassById(whereJson)), HttpStatus.OK);
}
@GetMapping("/getClassTable")

View File

@@ -1,5 +1,5 @@
package org.nl.wms.masterdata_manage.备份master.rest;
package org.nl.wms.masterdata_manage.master.controller.measureunit;
import io.swagger.annotations.Api;
@@ -26,7 +26,7 @@ import java.util.Map;
@Api(tags = "计量单位管理")
@RequestMapping("/api/mdPbMeasureunit")
@Slf4j
public class UnitController {
public class MdPbMeasureunitController {
private final UnitService unitService;
@GetMapping

View File

@@ -0,0 +1,58 @@
package org.nl.wms.masterdata_manage.master.service.classstandard;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.masterdata_manage.master.service.classstandard.dao.MdPbClassstandard;
import java.util.List;
import java.util.Map;
/**
* <p>
* 基础数据分类标准表 服务类
* </p>
*
* @author generator
* @since 2023-05-05
*/
public interface IMdPbClassstandardService extends IService<MdPbClassstandard> {
/**
* 物料类型下拉选
* @param json
* @return
*/
List<Map> dropdownList(Map json);
/**
* 家在物料列表
* @param whereJson
*/
List<Map> loadClass(JSONObject whereJson);
List<Map> queryClassBycode(JSONObject whereJson);
List<Map> queryClassById(JSONObject whereJson);
/**
* 创建
* @param form
* @return
*/
String create(JSONObject form);
/**
* 修改
* @param form
* @return
*/
String updateForm(JSONObject form);
/**
* 删除当前及子集
* @param ids
*/
void deleteAll(String[] ids);
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.masterdata_manage.service.master.dao;
package org.nl.wms.masterdata_manage.master.service.classstandard.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -25,6 +26,7 @@ public class MdPbClassstandard implements Serializable {
/**
* 分类标识
*/
@TableId(value = "class_id")
private String class_id;
/**
@@ -55,7 +57,7 @@ public class MdPbClassstandard implements Serializable {
/**
* 子部门数目
*/
private String sub_count;
private Integer sub_count;
/**
* 是否叶子
@@ -95,7 +97,7 @@ public class MdPbClassstandard implements Serializable {
/**
* 创建时间
*/
private LocalDateTime create_time;
private String create_time;
/**
* 修改人
@@ -110,7 +112,9 @@ public class MdPbClassstandard implements Serializable {
/**
* 修改时间
*/
private LocalDateTime update_time;
private String update_time;
private Boolean is_delete;
}

View File

@@ -0,0 +1,121 @@
package org.nl.wms.masterdata_manage.master.service.classstandard.dto;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
* <p>
* 基础数据分类标准表
* </p>
*
* @author generator
* @since 2023-05-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("md_pb_classstandard")
public class MdPbClassstandardTree implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 分类标识
*/
@TableId(value = "class_id")
private String class_id;
/**
* 分类编码
*/
private String class_code;
/**
* 分类长编码
*/
private String long_class_code;
/**
* 分类名称
*/
private String class_name;
/**
* 分类简要描述
*/
private String class_desc;
/**
* 上级分类标识
*/
private String parent_class_id;
/**
* 子部门数目
*/
private Integer sub_count;
/**
* 是否叶子
*/
private Boolean is_leaf;
/**
* 是否可修改
*/
private Boolean is_modify;
/**
* 级别
*/
private String class_level;
/**
* 外部标识
*/
private String ext_id;
/**
* 外部上级标识
*/
private String ext_parent_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;
private List<MdPbClassstandardTree> itemClassstrandard;
}

View File

@@ -0,0 +1,241 @@
package org.nl.wms.masterdata_manage.master.service.classstandard.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.hash.Hash;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.nl.common.utils.CopyUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.masterdata_manage.master.service.classstandard.IMdPbClassstandardService;
import org.nl.wms.masterdata_manage.master.service.classstandard.dao.MdPbClassstandard;
import org.nl.wms.masterdata_manage.master.service.classstandard.dto.MdPbClassstandardTree;
import org.nl.wms.masterdata_manage.service.master.dao.mapper.MdPbClassstandardMapper;
import org.nl.wms.masterdata_manage.备份master.service.dto.ClassstandardDto;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 基础数据分类标准表 服务实现类
* </p>
*
* @author generator
* @since 2023-05-05
*/
@Service
public class MdPbClassstandardServiceImpl extends ServiceImpl<MdPbClassstandardMapper, MdPbClassstandard> implements IMdPbClassstandardService {
@Override
public List<Map> dropdownList(Map whereJson) {
Assert.isNull(whereJson,"参数不能为空");
QueryWrapper<MdPbClassstandard> query = new QueryWrapper<MdPbClassstandard>()
.eq("parent_class_id", "0")
.eq("is_delete",false);
if (whereJson.get("class_code") !=null) {
query.eq("class_code",whereJson.get("class_code"));
}
List<MdPbClassstandard> list = this.list(query);
return getMaps(list);
}
@Override
public List<Map> loadClass(JSONObject whereJson) {
List<MdPbClassstandard> list = this.list(new QueryWrapper<MdPbClassstandard>()
.eq("is_delete", false)
.eq("parent_class_id", whereJson.getString("pid") == null ? "0":whereJson.getString("pid")));
List<Map> result = getMaps(list);
return result;
}
@NotNull
private List<Map> getMaps(List<MdPbClassstandard> list) {
List<Map> result = new ArrayList<>();
for (MdPbClassstandard classstandard : list) {
Map item = new HashMap<>();
if (classstandard.getSub_count() > 0) {
item.put("hasChildren", true);
item.put("leaf", false);
} else {
item.put("hasChildren", false);
item.put("leaf", true);
}
item.put("id", classstandard.getClass_id());
item.put("label", classstandard.getClass_name());
item.put("create_user_name", classstandard.getCreate_name());
item.put("update_user_name", classstandard.getUpdate_name());
result.add(item);
}
return result;
}
@Override
public List<Map> queryClassBycode(JSONObject whereJson) {
MdPbClassstandard classstandard = null;
if (!StrUtil.isEmpty(whereJson.getString("parent_class_code"))) {
classstandard = this.getOne(new QueryWrapper<MdPbClassstandard>().eq("class_code", whereJson.getString("parent_class_code")));
if (classstandard == null) {
throw new BadRequestException("请输入正确的父节点编号!");
}
}
QueryWrapper<MdPbClassstandard> query = new QueryWrapper<MdPbClassstandard>().eq("is_detele",false);
if (!StrUtil.isEmpty(whereJson.getString("class_code"))) {
query.in("class_code",whereJson.getString("class_code"));
}
if (StrUtil.isNotEmpty(whereJson.getString("parent_class_code"))&&!whereJson.getString("parent_class_code").equals("0")){
query.eq("class_id",classstandard.getClass_id());
}
if (StrUtil.isEmpty(whereJson.getString("parent_class_code")) || whereJson.getString("parent_class_code").equals("0")){
query.eq("parent_class_id","0").or().isNull("parent_class_id");
}
return getMaps(this.list(query));
}
@Override
public List<Map> queryClassById(JSONObject whereJson) {
QueryWrapper<MdPbClassstandard> query = new QueryWrapper<>();
if (!StrUtil.isEmpty(whereJson.getString("whereStr"))) {
query.last(whereJson.getString("whereStr"));
}
if (StrUtil.isNotEmpty(whereJson.getString("class_idStr"))) {
query.in("class_id",whereJson.getString("class_idStr"));
//"('1','2','3')"
}
if (!StrUtil.isEmpty(whereJson.getString("parent_class_id"))) {
query.eq("parent_class_id",whereJson.getString("parent_class_id"));
}
List<MdPbClassstandard> list = this.list(query);
return getMaps(list);
}
@Override
@Transactional
public String create(JSONObject form) {
MdPbClassstandard one = this.getOne(new QueryWrapper<MdPbClassstandard>().eq("class_code", form.getString("class_code")));
if (one != null) {
throw new BadRequestException(form.getString("class_code")+"存在相同的基础类别编号");
}
MdPbClassstandard classstandard = form.toJavaObject(MdPbClassstandard.class);
classstandard.setClass_id(IdUtil.getStringId());
classstandard.setCreate_id(SecurityUtils.getCurrentUserId());
classstandard.setCreate_name(SecurityUtils.getCurrentNickName());
classstandard.setCreate_time(DateUtil.now());
classstandard.setIs_leaf(true);
classstandard.setClass_level(Math.ceil(classstandard.getClass_code().length() / 2.0) + "");
classstandard.setSub_count(0);
classstandard.setLong_class_code(classstandard.getClass_code());
this.save(classstandard);
///更新节点
if (classstandard.getParent_class_id() != null) {
updateSubCnt(classstandard.getClass_id());
}
return classstandard.getClass_id();
}
public void updateSubCnt(String class_id) {
if (!StringUtils.isEmpty(class_id)){
MdPbClassstandard one = this.getOne(new QueryWrapper<MdPbClassstandard>().eq("class_id", class_id).eq("is_delete",false));
if (one == null){
throw new BadRequestException(class_id+"没有对应分类数据");
}
int count = this.count(new QueryWrapper<MdPbClassstandard>()
.eq("parent_class_id", class_id));
one.setSub_count( count);
one.setIs_leaf(count > 0?false:true);
this.updateById(one);
}
}
@Override
@Transactional
public String updateForm(JSONObject form) {
checkParam(form);
MdPbClassstandard dto = form.toJavaObject(MdPbClassstandard.class);
dto.setUpdate_time(DateUtil.now());
dto.setUpdate_id(SecurityUtils.getCurrentUserId());
dto.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(dto);
//更新父节点中子节点数目
String oldPid = this.getOne(new QueryWrapper<MdPbClassstandard>().eq("class_id", form.getString("class_id"))).getParent_class_id();
updateSubCnt(oldPid);
updateSubCnt(form.getString("parent_class_id"));
return null;
}
private void checkParam(JSONObject form) {
Assert.notNull(form,"参数不能为空");
MdPbClassstandard onebyid = this.getOne(new QueryWrapper<MdPbClassstandard>().eq("class_id", form.getString("class_id")));
if (onebyid == null) {
throw new BadRequestException(form.getString("class_id")+"被删除或无权限,操作失败!");
}
MdPbClassstandard onebycode = this.getOne(new QueryWrapper<MdPbClassstandard>().eq("class_code", form.getString("class_code")));
if (onebycode != null) {
throw new BadRequestException("存在相同的供应商编号");
}
if (form.getString("parent_class_id") != null && form.getString("class_id").equals(form.getString("parent_class_id"))) {
throw new BadRequestException("上级不能为自己");
}
}
@Override
public void deleteAll(String[] ids) {
final String TOP_PARENT_ID = "0";
if (ids == null || ids.length==0){
return;
}
List<MdPbClassstandardTree> list = CopyUtil.copyList(this.list(), MdPbClassstandardTree.class);
Map<String, List<MdPbClassstandardTree>> collect = list.stream().collect(Collectors.groupingBy(MdPbClassstandardTree::getParent_class_id));
Set<String> removeCollect = new HashSet<>();
for (String id : ids) {
removeCollect.add(id);
List<MdPbClassstandardTree> top_parent = collect.remove(id);
this.getChildTree(top_parent, collect, removeCollect);
}
if (!CollectionUtils.isEmpty(removeCollect)){
this.update(new UpdateWrapper<MdPbClassstandard>()
.set("is_delete",true)
.set("update_id",SecurityUtils.getCurrentUserId())
.set("update_name",SecurityUtils.getCurrentNickName()).set("update_time",DateUtil.now()).in("class_id",removeCollect));
}
}
private List<MdPbClassstandardTree> getChildTree(List<MdPbClassstandardTree> top_parent, Map<String, List<MdPbClassstandardTree>> collect,Set<String> removeCollect){
removeCollect.addAll(top_parent.stream().map(MdPbClassstandardTree::getClass_id).collect(Collectors.toList()));
if (CollectionUtils.isEmpty(collect)){
return top_parent;
}
for (MdPbClassstandardTree parent : top_parent) {
List<MdPbClassstandardTree> child = collect.remove(parent.getClass_id());
if (CollectionUtils.isEmpty(child)){
continue;
}
List<MdPbClassstandardTree> childMenuTree = getChildTree(child, collect,removeCollect);
if (!CollectionUtils.isEmpty(childMenuTree)){
parent.setItemClassstrandard(childMenuTree);
}
}
return top_parent;
}
}

View File

@@ -1,16 +0,0 @@
package org.nl.wms.masterdata_manage.service.master;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.masterdata_manage.service.master.dao.MdPbClassstandard;
/**
* <p>
* 基础数据分类标准表 服务类
* </p>
*
* @author generator
* @since 2023-05-05
*/
public interface IMdPbClassstandardService extends IService<MdPbClassstandard> {
}

View File

@@ -1,7 +1,7 @@
package org.nl.wms.masterdata_manage.service.master.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.masterdata_manage.service.master.dao.MdPbClassstandard;
import org.nl.wms.masterdata_manage.master.service.classstandard.dao.MdPbClassstandard;
/**
* <p>

View File

@@ -1,20 +0,0 @@
package org.nl.wms.masterdata_manage.service.master.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.masterdata_manage.service.master.IMdPbClassstandardService;
import org.nl.wms.masterdata_manage.service.master.dao.MdPbClassstandard;
import org.nl.wms.masterdata_manage.service.master.dao.mapper.MdPbClassstandardMapper;
import org.springframework.stereotype.Service;
/**
* <p>
* 基础数据分类标准表 服务实现类
* </p>
*
* @author generator
* @since 2023-05-05
*/
@Service
public class MdPbClassstandardServiceImpl extends ServiceImpl<MdPbClassstandardMapper, MdPbClassstandard> implements IMdPbClassstandardService {
}

View File

@@ -36,8 +36,8 @@
<if test="query.product_series != null and query.product_series != ''">
and ShiftOrder.materialprocess_series in ${query.product_series}
</if>
<if test="query.begin_time != null and query.begin_time != ''">
and ShiftOrder.realproducestart_date >= #{query.begin_time}
<if test="query.start_time != null and query.start_time != ''">
and ShiftOrder.realproducestart_date >= #{query.start_time}
</if>
<if test="query.end_time != null and query.end_time != ''">
and #{query.end_time} >= ShiftOrder.realproducestart_date