From cc9f55ace05edc477e358b58f7a393c1a4254483 Mon Sep 17 00:00:00 2001 From: zhangzhiqiang Date: Mon, 15 May 2023 19:47:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?add:=E5=9F=BA=E7=A1=80=E7=AE=A1=E7=90=86/?= =?UTF-8?q?=E7=89=A9=E6=96=99=E5=88=86=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/DatazhuazhuaInterceptor.java | 2 +- .../master/MdPbClassstandardController.java | 20 -- .../master/MdPbMeasureunitController.java | 20 -- .../ClassstandardController.java | 39 +-- .../MdPbMeasureunitController.java} | 4 +- .../IMdPbClassstandardService.java | 58 +++++ .../classstandard}/dao/MdPbClassstandard.java | 12 +- .../dto/MdPbClassstandardTree.java | 121 +++++++++ .../impl/MdPbClassstandardServiceImpl.java | 241 ++++++++++++++++++ .../org/nl/wms/masterdata_manage/mdpb.xls | Bin 192512 -> 192512 bytes .../master/IMdPbClassstandardService.java | 16 -- .../dao/mapper/MdPbClassstandardMapper.java | 2 +- .../impl/MdPbClassstandardServiceImpl.java | 20 -- .../dao/mapper/PdmProduceWorkorderMapper.xml | 4 +- .../java/org/nl/wms/storage_manage/stivt.xls | Bin 403456 -> 403456 bytes 15 files changed, 457 insertions(+), 102 deletions(-) delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbClassstandardController.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbMeasureunitController.java rename mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/{备份master/rest => master/controller/classstandard}/ClassstandardController.java (74%) rename mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/{备份master/rest/UnitController.java => master/controller/measureunit/MdPbMeasureunitController.java} (95%) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java rename mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/{service/master => master/service/classstandard}/dao/MdPbClassstandard.java (85%) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dto/MdPbClassstandardTree.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/IMdPbClassstandardService.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/impl/MdPbClassstandardServiceImpl.java diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java index adc69443..e6401faa 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java @@ -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 { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbClassstandardController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbClassstandardController.java deleted file mode 100644 index 35633865..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbClassstandardController.java +++ /dev/null @@ -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; - -/** - *

- * 基础数据分类标准表 前端控制器 - *

- * - * @author generator - * @since 2023-05-05 - */ -@RestController -@RequestMapping("/mdPbClassstandard") -public class MdPbClassstandardController { - -} - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbMeasureunitController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbMeasureunitController.java deleted file mode 100644 index 3668e397..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/controller/master/MdPbMeasureunitController.java +++ /dev/null @@ -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; - -/** - *

- * 计量单位表 前端控制器 - *

- * - * @author generator - * @since 2023-05-05 - */ -@RestController -@RequestMapping("/mdPbMeasureunit") -public class MdPbMeasureunitController { - -} - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/rest/ClassstandardController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java similarity index 74% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/rest/ClassstandardController.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java index 85f7549b..4091997a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/rest/ClassstandardController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java @@ -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 query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(ClassstandardService.queryAll(whereJson, page), HttpStatus.OK); + public ResponseEntity queryList(@RequestParam Map whereJson) { + return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.dropdownList(whereJson)), HttpStatus.OK); } @PostMapping @Log("新增基础类别") @ApiOperation("新增基础类别") //@PreAuthorize("@el.check('Classstandard:add')") - public ResponseEntity create(@Validated @RequestBody ClassstandardDto dto) { - ClassstandardService.create(dto); + public ResponseEntity 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 update(@Validated @RequestBody ClassstandardDto dto) { - ClassstandardService.update(dto); + public ResponseEntity 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 delete(@RequestBody Long[] ids) { - ClassstandardService.deleteAll(ids); + public ResponseEntity 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 query(@RequestParam Map whereJson) { - return new ResponseEntity<>(ClassstandardService.loadClass(whereJson), HttpStatus.OK); + public ResponseEntity 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 queryClassBycode(@RequestParam Map whereJson) { - return new ResponseEntity<>(ClassstandardService.queryClassBycode(whereJson), HttpStatus.OK); + public ResponseEntity 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 queryClassById(@RequestParam Map whereJson) { - return new ResponseEntity<>(ClassstandardService.queryClassById(whereJson), HttpStatus.OK); + public ResponseEntity queryClassById(@RequestParam JSONObject whereJson) { + return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.queryClassById(whereJson)), HttpStatus.OK); } @GetMapping("/getClassTable") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/rest/UnitController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/measureunit/MdPbMeasureunitController.java similarity index 95% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/rest/UnitController.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/measureunit/MdPbMeasureunitController.java index a8aa427d..ef19c703 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份master/rest/UnitController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/measureunit/MdPbMeasureunitController.java @@ -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 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java new file mode 100644 index 00000000..033abf25 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java @@ -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; + +/** + *

+ * 基础数据分类标准表 服务类 + *

+ * + * @author generator + * @since 2023-05-05 + */ +public interface IMdPbClassstandardService extends IService { + + /** + * 物料类型下拉选 + * @param json + * @return + */ + List dropdownList(Map json); + + /** + * 家在物料列表 + * @param whereJson + */ + List loadClass(JSONObject whereJson); + + + List queryClassBycode(JSONObject whereJson); + + List queryClassById(JSONObject whereJson); + + + /** + * 创建 + * @param form + * @return + */ + String create(JSONObject form); + + /** + * 修改 + * @param form + * @return + */ + String updateForm(JSONObject form); + + /** + * 删除当前及子集 + * @param ids + */ + void deleteAll(String[] ids); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/MdPbClassstandard.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dao/MdPbClassstandard.java similarity index 85% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/MdPbClassstandard.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dao/MdPbClassstandard.java index adb46f7a..d32729b5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/MdPbClassstandard.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dao/MdPbClassstandard.java @@ -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; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dto/MdPbClassstandardTree.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dto/MdPbClassstandardTree.java new file mode 100644 index 00000000..9131b4bd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/dto/MdPbClassstandardTree.java @@ -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; + +/** + *

+ * 基础数据分类标准表 + *

+ * + * @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 itemClassstrandard; + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java new file mode 100644 index 00000000..45201dd3 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java @@ -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; + +/** + *

+ * 基础数据分类标准表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-05 + */ +@Service +public class MdPbClassstandardServiceImpl extends ServiceImpl implements IMdPbClassstandardService { + + + @Override + public List dropdownList(Map whereJson) { + Assert.isNull(whereJson,"参数不能为空"); + QueryWrapper query = new QueryWrapper() + .eq("parent_class_id", "0") + .eq("is_delete",false); + if (whereJson.get("class_code") !=null) { + query.eq("class_code",whereJson.get("class_code")); + } + List list = this.list(query); + return getMaps(list); + } + + @Override + public List loadClass(JSONObject whereJson) { + List list = this.list(new QueryWrapper() + .eq("is_delete", false) + .eq("parent_class_id", whereJson.getString("pid") == null ? "0":whereJson.getString("pid"))); + List result = getMaps(list); + return result; + } + + @NotNull + private List getMaps(List list) { + List 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 queryClassBycode(JSONObject whereJson) { + MdPbClassstandard classstandard = null; + if (!StrUtil.isEmpty(whereJson.getString("parent_class_code"))) { + classstandard = this.getOne(new QueryWrapper().eq("class_code", whereJson.getString("parent_class_code"))); + if (classstandard == null) { + throw new BadRequestException("请输入正确的父节点编号!"); + } + } + QueryWrapper query = new QueryWrapper().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 queryClassById(JSONObject whereJson) { + + QueryWrapper 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 list = this.list(query); + return getMaps(list); + } + + @Override + @Transactional + public String create(JSONObject form) { + MdPbClassstandard one = this.getOne(new QueryWrapper().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().eq("class_id", class_id).eq("is_delete",false)); + if (one == null){ + throw new BadRequestException(class_id+"没有对应分类数据"); + } + int count = this.count(new QueryWrapper() + .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().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().eq("class_id", form.getString("class_id"))); + if (onebyid == null) { + throw new BadRequestException(form.getString("class_id")+"被删除或无权限,操作失败!"); + } + MdPbClassstandard onebycode = this.getOne(new QueryWrapper().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 list = CopyUtil.copyList(this.list(), MdPbClassstandardTree.class); + Map> collect = list.stream().collect(Collectors.groupingBy(MdPbClassstandardTree::getParent_class_id)); + + Set removeCollect = new HashSet<>(); + for (String id : ids) { + removeCollect.add(id); + List top_parent = collect.remove(id); + this.getChildTree(top_parent, collect, removeCollect); + } + if (!CollectionUtils.isEmpty(removeCollect)){ + this.update(new UpdateWrapper() + .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 getChildTree(List top_parent, Map> collect,Set 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 child = collect.remove(parent.getClass_id()); + if (CollectionUtils.isEmpty(child)){ + continue; + } + List childMenuTree = getChildTree(child, collect,removeCollect); + if (!CollectionUtils.isEmpty(childMenuTree)){ + parent.setItemClassstrandard(childMenuTree); + } + } + return top_parent; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/mdpb.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/mdpb.xls index 5160d33169f373b43cf524f44aa64941559631df..f433010b2b41602d074895b76e25a0162a7453bc 100644 GIT binary patch delta 29 lcmZp8z}@hGdqWNj8$&Vo*57T-MJ(+_ER5TWSeW`=0|2gf3s3+6 delta 29 lcmZp8z}@hGdqWNjn}OPT?Uzl>MJ(+_ER5TWSeW`=0|2d?3pW4& diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/IMdPbClassstandardService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/IMdPbClassstandardService.java deleted file mode 100644 index 39999858..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/IMdPbClassstandardService.java +++ /dev/null @@ -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; - -/** - *

- * 基础数据分类标准表 服务类 - *

- * - * @author generator - * @since 2023-05-05 - */ -public interface IMdPbClassstandardService extends IService { - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/mapper/MdPbClassstandardMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/mapper/MdPbClassstandardMapper.java index ce3b9dcd..04738145 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/mapper/MdPbClassstandardMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/dao/mapper/MdPbClassstandardMapper.java @@ -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; /** *

diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/impl/MdPbClassstandardServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/impl/MdPbClassstandardServiceImpl.java deleted file mode 100644 index 99d482f7..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/master/impl/MdPbClassstandardServiceImpl.java +++ /dev/null @@ -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; - -/** - *

- * 基础数据分类标准表 服务实现类 - *

- * - * @author generator - * @since 2023-05-05 - */ -@Service -public class MdPbClassstandardServiceImpl extends ServiceImpl implements IMdPbClassstandardService { - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml index 22749a8f..4548c3c4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml @@ -36,8 +36,8 @@ and ShiftOrder.materialprocess_series in ${query.product_series} - - and ShiftOrder.realproducestart_date >= #{query.begin_time} + + and ShiftOrder.realproducestart_date >= #{query.start_time} and #{query.end_time} >= ShiftOrder.realproducestart_date diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/stivt.xls index fc8218a14c3eddcef76d6341cffe540360c495b1..682be249aff07a760c72ff6645422cc1421adde6 100644 GIT binary patch delta 238 zcmZp;AklC^VnYrK>xPXpSO4Bz$WqM6E0Er|`ghw+Mu^Zy*3VMB4*Ju;LJTZ3R{w7P zsL=jVfpPms1*Xi|eB2C73=9m64BSA-#5CPUjLE8f(Ho&nFPBSzldY1uqq&8dtC^vx zqnQx|17+NuZI#T-%}mXWEln(3%$&`g%v?a&!eo24BwHZU_5;#vcUV{(wB&&{E>vKP GX9oa|qE96N delta 238 zcmZp;AklC^VnYrKD?|4BX_}i0S&A8X8}gP+(`>uR2od_o`dNzi!Rj?&p#=@=rfD{R zRA~RGz_|UR0#oK}K4AtH1_lO324Ns%VVUkD#$?sLXb%$*GXpWp_CqCpSx1H&aIw zb5kb>2FkcQ+bWqF0X3N!8(TUXn}D#H@%DU4wm_!I1}rSw4@k4!0eUQ{2x#L%1-5v0 E0N Date: Mon, 15 May 2023 20:39:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?add:=E7=89=A9=E6=96=99=E5=9F=BA=E7=A1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClassstandardController.java | 6 +- .../IMdPbClassstandardService.java | 6 +- .../impl/MdPbClassstandardServiceImpl.java | 65 ++-- .../impl/StIvtBsrealstorattrServiceImpl.java | 8 +- .../备份st/IvtChangeTypeEnum.java | 31 -- .../备份st/StoreIvtServiceImpl.java | 298 ------------------ .../service/MaterialsafeivtService.java | 67 ---- .../service/StructrelamaterialService.java | 69 ---- .../service/StructrelavehicletypeService.java | 73 ----- .../service/dto/MaterialsafeivtDto.java | 40 --- .../备份st/service/dto/SectattrDto.java | 116 ------- .../备份st/service/dto/StorattrDto.java | 107 ------- .../备份st/service/dto/StructattrDto.java | 146 --------- .../备份st/service/dto/StructivtDto.java | 66 ---- .../service/dto/StructrelamaterialDto.java | 32 -- .../service/dto/StructrelavehicletypeDto.java | 64 ---- .../impl/MaterialsafeivtServiceImpl.java | 157 --------- .../impl/StructrelamaterialServiceImpl.java | 177 ----------- .../StructrelavehicletypeServiceImpl.java | 187 ----------- .../masterdata_manage/备份st/wql/QLK01.wql | 226 ------------- .../备份st/wql/QST_IVT_MATERIALSAFE.wql | 85 ----- .../备份st/wql/QST_IVT_MATERIALSET.wql | 78 ----- .../备份st/wql/QST_SECT_ATTR.wql | 90 ------ .../备份st/wql/QST_STOR_ATTR.wql | 108 ------- .../备份st/wql/QST_STRUCTIVT001.wql | 107 ------- .../备份st/wql/QST_STRUCT_ATTR.wql | 79 ----- .../wql/ST_Structrelavehicletype_01.wql | 86 ----- .../masterdata_manage/备份st/wql/stivt.xls | Bin 225792 -> 0 bytes .../PdmProduceWorkorderController.java | 12 +- .../sch/tasks/CallMaterialTask.java | 10 +- .../sch/tasks/SendMaterialTask.java | 6 +- .../service/device/dao/PdmBiDevice.java | 12 +- .../wql/ST_WorkprocedureiosOut_01.wql | 101 ------ 33 files changed, 62 insertions(+), 2653 deletions(-) delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_SECT_ATTR.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STOR_ATTR.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCTIVT001.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCT_ATTR.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/stivt.xls delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/wql/ST_WorkprocedureiosOut_01.wql diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java index 4091997a..0033725e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/controller/classstandard/ClassstandardController.java @@ -80,7 +80,7 @@ public class ClassstandardController { @Log("查询基础类型") @ApiOperation("查询基础类型") //@PreAuthorize("@el.check('materialtype:list')") - public ResponseEntity query(@RequestParam JSONObject whereJson) { + public ResponseEntity query(@RequestParam Map whereJson) { return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.loadClass(whereJson)), HttpStatus.OK); } @@ -88,7 +88,7 @@ public class ClassstandardController { @Log("查询基础类型") @ApiOperation("查询基础类型") //@PreAuthorize("@el.check('materialtype:list')") - public ResponseEntity queryClassBycode(@RequestParam JSONObject whereJson) { + public ResponseEntity queryClassBycode(@RequestParam Map whereJson) { return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.queryClassBycode(whereJson)), HttpStatus.OK); } @@ -97,7 +97,7 @@ public class ClassstandardController { @Log("查询分类基础列表") @ApiOperation("查询分类基础列表") //@PreAuthorize("@el.check('materialtype:list')") - public ResponseEntity queryClassById(@RequestParam JSONObject whereJson) { + public ResponseEntity queryClassById(@RequestParam Map whereJson) { return new ResponseEntity<>(TableDataInfo.build(mdPbClassstandardService.queryClassById(whereJson)), HttpStatus.OK); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java index 033abf25..5fa55979 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/IMdPbClassstandardService.java @@ -28,12 +28,12 @@ public interface IMdPbClassstandardService extends IService { * 家在物料列表 * @param whereJson */ - List loadClass(JSONObject whereJson); + List loadClass(Map whereJson); - List queryClassBycode(JSONObject whereJson); + List queryClassBycode(Map whereJson); - List queryClassById(JSONObject whereJson); + List queryClassById(Map whereJson); /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java index 45201dd3..3437713f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/master/service/classstandard/impl/MdPbClassstandardServiceImpl.java @@ -3,7 +3,9 @@ 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.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -42,42 +44,41 @@ public class MdPbClassstandardServiceImpl extends ServiceImpl dropdownList(Map whereJson) { - Assert.isNull(whereJson,"参数不能为空"); + Assert.notNull(whereJson,"参数不能为空"); QueryWrapper query = new QueryWrapper() .eq("parent_class_id", "0") .eq("is_delete",false); if (whereJson.get("class_code") !=null) { query.eq("class_code",whereJson.get("class_code")); } - List list = this.list(query); - return getMaps(list); + return getMaps(this.listMaps(query)); } @Override - public List loadClass(JSONObject whereJson) { - List list = this.list(new QueryWrapper() + public List loadClass(Map whereJson) { + List> list = this.listMaps(new QueryWrapper() .eq("is_delete", false) - .eq("parent_class_id", whereJson.getString("pid") == null ? "0":whereJson.getString("pid"))); + .eq("parent_class_id", whereJson.get("pid") == null ? "0":whereJson.get("pid"))); List result = getMaps(list); return result; } @NotNull - private List getMaps(List list) { + private List getMaps(List> list) { List result = new ArrayList<>(); - for (MdPbClassstandard classstandard : list) { - Map item = new HashMap<>(); - if (classstandard.getSub_count() > 0) { + for (int i = 0; i < list.size(); i++) { + Map item = list.get(i); + if ((int)item.get("sub_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()); + item.put("id", item.get("class_id")); + item.put("label", item.get("class_name")); + item.put("create_user_name", item.get("create_name")); + item.put("update_user_name", item.get("update_name")); result.add(item); } return result; @@ -85,44 +86,42 @@ public class MdPbClassstandardServiceImpl extends ServiceImpl queryClassBycode(JSONObject whereJson) { + public List queryClassBycode(Map whereJson) { MdPbClassstandard classstandard = null; - if (!StrUtil.isEmpty(whereJson.getString("parent_class_code"))) { - classstandard = this.getOne(new QueryWrapper().eq("class_code", whereJson.getString("parent_class_code"))); + if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_code"))) { + classstandard = this.getOne(new QueryWrapper().eq("class_code", whereJson.get("parent_class_code"))); if (classstandard == null) { throw new BadRequestException("请输入正确的父节点编号!"); } } - QueryWrapper query = new QueryWrapper().eq("is_detele",false); - if (!StrUtil.isEmpty(whereJson.getString("class_code"))) { - query.in("class_code",whereJson.getString("class_code")); + QueryWrapper query = new QueryWrapper().eq("is_delete",false); + if (ObjectUtil.isNotEmpty(whereJson.get("class_code"))) { + query.in("class_code",whereJson.get("class_code")); } - if (StrUtil.isNotEmpty(whereJson.getString("parent_class_code"))&&!whereJson.getString("parent_class_code").equals("0")){ + if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_code"))&&!whereJson.get("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")){ + if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_code")) || whereJson.get("parent_class_code").equals("0")){ query.eq("parent_class_id","0").or().isNull("parent_class_id"); } - return getMaps(this.list(query)); + return getMaps(this.listMaps(query)); } @Override - public List queryClassById(JSONObject whereJson) { + public List queryClassById(Map whereJson) { QueryWrapper query = new QueryWrapper<>(); - if (!StrUtil.isEmpty(whereJson.getString("whereStr"))) { - query.last(whereJson.getString("whereStr")); + if (ObjectUtil.isNotEmpty(whereJson.get("whereStr"))) { + query.last((String) whereJson.get("whereStr")); } - if (StrUtil.isNotEmpty(whereJson.getString("class_idStr"))) { - query.in("class_id",whereJson.getString("class_idStr")); - //"('1','2','3')" + if (ObjectUtil.isNotEmpty(whereJson.get("class_idStr"))) { + query.in("class_id",whereJson.get("class_idStr")); } - if (!StrUtil.isEmpty(whereJson.getString("parent_class_id"))) { - query.eq("parent_class_id",whereJson.getString("parent_class_id")); + if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_id"))) { + query.eq("parent_class_id",whereJson.get("parent_class_id")); } - List list = this.list(query); - return getMaps(list); + return getMaps(this.listMaps(query)); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/storage/service/storage/impl/StIvtBsrealstorattrServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/storage/service/storage/impl/StIvtBsrealstorattrServiceImpl.java index 13fad520..c130a298 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/storage/service/storage/impl/StIvtBsrealstorattrServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/storage/service/storage/impl/StIvtBsrealstorattrServiceImpl.java @@ -1,9 +1,6 @@ package org.nl.wms.masterdata_manage.storage.service.storage.impl; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -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; @@ -11,8 +8,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; @@ -20,7 +15,6 @@ import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstora import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr; import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; import org.nl.wms.masterdata_manage.storage.service.storage.dao.mapper.StIvtBsrealstorattrMapper; -import org.nl.wms.masterdata_manage.备份st.service.dto.StorattrDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java deleted file mode 100644 index 99dc952f..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/IvtChangeTypeEnum.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st; - -/** - * // 11-扣减可用; 12-增加可用; - * // 21-减库存; 22-加库存; 23-同时加; 24-同时减 - */ -public enum IvtChangeTypeEnum { - SUB_CAN_USE("扣减可用数", 11), - ADD_CAN_USE("增加用数", 12), - - SUB_IVT("扣减库存", 21), - ADD_IVT("增加库存", 22), - ADD_IVT_AND_CAN_USE("同时加库存和可用", 23), - SUB_IVT_AND_CAN_USE("同时减库存和可用", 24); - - private final String name; - private final int index; - - IvtChangeTypeEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public String getName() { - return name; - } - - public int getIndex() { - return index; - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java deleted file mode 100644 index 6405a5d4..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/StoreIvtServiceImpl.java +++ /dev/null @@ -1,298 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import org.nl.modules.common.exception.BadRequestException; - import org.nl.common.utils.SecurityUtils; -import org.nl.modules.wql.core.bean.WQLObject; - - -import java.math.BigDecimal; - -/** - * Title: Test.java Description: 一、入库 单据审核,可用数、库存数加上。 取消审核,可用数、库存数减掉 二、出库 - * 单据分配,可用数减掉 取消分配,可用数加回 单据审核,库存数减掉 取消审核,库存数加回 - * - * @author ldjun - * @created 2020年7月23日 下午2:23:04 - */ -public class StoreIvtServiceImpl { - /** - * @discription 添加仓储变动记录 - * @author ldjun - * @created 2020年5月12日 下午12:54:42 - */ - public void addIvtFlow(JSONObject disObj, IvtChangeTypeEnum changeType) { - String struct_id = disObj.getString("struct_id"); - JSONObject pointObj = WQLObject.getWQLObject("sch_base_point").query("point_id ='" + struct_id + "'").uniqueResult(0); - String vehicle_code = disObj.getString("vehicle_code"); - if (StrUtil.isEmpty(struct_id)) { - throw new BadRequestException("仓位标识不能为空!"); - } - String change_qty = disObj.getString("change_qty"); - if (StrUtil.isEmpty(change_qty)) { - change_qty = "0"; - } - if (StrUtil.equals("0", change_qty)) { - throw new BadRequestException("变动量不能都为0!"); - } - JSONObject param = new JSONObject(); - param.put("change_id", IdUtil.getSnowflake(1, 1).nextId()); - param.put("struct_id", struct_id); - param.put("struct_code",pointObj.getString("point_code")); - param.put("struct_name",pointObj.getString("point_name")); - param.put("material_id", disObj.getString("material_id")); - param.put("pcsn", disObj.getString("pcsn")); - //先默认写死,只有一个仓库 - param.put("stor_id", "1528627995269533696"); - param.put("change_type_scode",changeType.getIndex()); - - param.put("inv_id", disObj.getString("bill_id")); - param.put("bill_code", disObj.getString("bill_code")); - param.put("bill_type_scode", disObj.getString("bill_type_scode")); - param.put("qty_unit_id", disObj.getString("qty_unit_id")); - param.put("change_time", DateUtil.now()); - param.put("change_qty", change_qty); - param.put("change_person_id", SecurityUtils.getCurrentUserId()); - param.put("change_person_name", SecurityUtils.getCurrentNickName()); - - - param.put("change_type", changeType.getIndex()); - param.put("workprocedure_id", disObj.getString("workprocedure_id")); - param.put("is_full", disObj.getString("is_full")); - - - // 仓位库存变动记录表【ST_IVT_StructIvtFlow】 - WQLObject ivtFlowTab = WQLObject.getWQLObject("ST_IVT_StructIvtFlow"); - ivtFlowTab.insert(param); - // 根据变动记录改变仓位库存 - param.put("vehicle_code", vehicle_code); - param.put("stewing_time", disObj.getString("stewing_time")); - param.put("producetask_id", disObj.getString("producetask_id")); - this.changeInventory(param, changeType); - } - - /** - * @param param - * @discription 扣减可用数 - * @author ldjun - * @created 2020年5月12日 上午8:52:44 - */ - private void changeInventory(JSONObject param, IvtChangeTypeEnum changeType) { - WQLObject stackIvtTab = WQLObject.getWQLObject("ST_IVT_StructIvt"); - String struct_id = param.getString("struct_id"); - String vehicle_code = param.getString("vehicle_code"); - String stewing_time = param.getString("stewing_time"); - String producetask_id = param.getString("producetask_id"); - String struct_name = param.getString("struct_name"); - String struct_code = param.getString("struct_code"); - if (StrUtil.isEmpty(struct_id)) { - throw new BadRequestException("仓位标识不能为空!"); - } - - String material_id = param.getString("material_id"); - // 拼接查询条件参数 - String whereArgs = "struct_id = '" + struct_id + "' and material_id = '" + material_id + "'"; - JSONObject stackIvtObj = stackIvtTab.query(whereArgs).uniqueResult(0); - - // 需变动的数量 - String change_qty = param.getString("change_qty"); - - // 变动类型 - // 11-扣减可用; 12-增加可用; 13-刷新可用 - // 21-减库存; 22-加库存; 23-同时加; 24-同时减 - // 31-加待入; 32-减待入 33减库存可用数可以为0 34同时减(库存和数量) 考虑负数 35 加库存 考虑负数 - if (stackIvtObj == null) {// 说明该货位上还没有该物料,直接插入记录即可 - JSONObject json = new JSONObject(); - json.put("stockrecord_id", IdUtil.getSnowflake(1, 1).nextId()); - json.put("struct_id", param.getString("struct_id")); - json.put("struct_name", param.getString("struct_name")); - json.put("material_id", param.getString("material_id")); - - json.put("pcsn", param.getString("pcsn")); - json.put("qty_unit_id", param.getString("qty_unit_id")); - json.put("instorage_time", DateUtil.now()); - - json.put("canuse_qty", "0"); - json.put("frozen_qty", "0"); - json.put("ivt_qty", "0"); - json.put("warehousing_qty", "0"); - json.put("qc_qty", "0"); - - // 11-扣减可用; 12-增加可用; - // 21-减库存; 22-加库存; 23-同时加(可用和库存); 24-同时减(可用和库存) - // 31-加待入; 32-减待入 - switch (changeType.getIndex()) { - case 11: // 扣减可用重量和数量 - break; - - case 12: - break; - case 13: - break; - case 21: - break; - case 22: - json.put("ivt_qty", change_qty); - break; - case 23: - json.put("ivt_qty", change_qty); - json.put("canuse_qty", change_qty); - break; - case 24:// 同时减 - // 语句 - break; - case 31:// 加待入 - // 语句 - break; - case 32:// 减待入 - // 语句 - break; - default: // 可选 - throw new BadRequestException("变动类型不正确!"); - } - json.put("vehicle_code", vehicle_code); - json.put("stewing_time", stewing_time); - json.put("producetask_id", producetask_id); - json.put("struct_code", struct_code); - json.put("struct_name", struct_name); - json.put("barcode", param.getString("barcode")); - json.put("workprocedure_id", param.getString("workprocedure_id")); - String is_full = param.getString("is_full"); - if (StrUtil.isEmpty(is_full)) { - is_full = "1"; - } - json.put("is_full", is_full); - - stackIvtTab.insert(json); - } - // 对应的货位上有物料,需判断数量重量相关字段是否符合实际逻辑,符合时更新相应记录 - if (stackIvtObj != null) { - // 变动前可用数量 - String before_canuse_qty = stackIvtObj.getString("canuse_qty"); - // 变动前冻结数量 - String before_frozen_qty = stackIvtObj.getString("frozen_qty"); - // 变动前库存数量 - String before_ivt_qty = stackIvtObj.getString("ivt_qty"); - // 变动前待入数量 - String before_warehousing_qty = stackIvtObj.getString("warehousing_qty"); - // 变动前待检数量 - String before_qc_qty = stackIvtObj.getString("qc_qty"); - - // 变动后可用数量 - BigDecimal after_canuse_qty = new BigDecimal(0); - // 变动后冻结数量 - BigDecimal after_frozen_qty = new BigDecimal(0); - // 变动后库存数量 - BigDecimal after_ivt_qty = new BigDecimal(0); - // 变动后待入数量 - BigDecimal after_warehousing_qty = new BigDecimal(0); - // 变动后待检数量 - BigDecimal after_qc_qty = new BigDecimal(0); - - // 判断是否减为0 - boolean is_sub0 = false; - switch (changeType.getIndex()) { - case 11: // 扣减可用重量和数量 - // 变动后可用数量 - after_canuse_qty = NumberUtil.sub(before_canuse_qty, change_qty); - if (after_canuse_qty.doubleValue() < 0) { - throw new BadRequestException("可用数量不足,无法操作!"); - } - stackIvtObj.put("canuse_qty", after_canuse_qty); - break; - case 12:// 12-增加可用重量和数量; - // 变动后可用数量 - after_canuse_qty = NumberUtil.add(before_canuse_qty, change_qty); - stackIvtObj.put("canuse_qty", after_canuse_qty); - break; - case 13:// 刷新可用数量和重量 - // 语句 - break; - case 21:// 减库存 - // 变动后库存数量 - after_ivt_qty = NumberUtil.sub(before_ivt_qty, change_qty); - if (after_ivt_qty.doubleValue() < 0) { - throw new BadRequestException("可用数量不足,无法操作!"); - } - if (after_ivt_qty.doubleValue() <= 0) { - is_sub0 = true; - } - stackIvtObj.put("ivt_qty", after_ivt_qty); - break; - case 33:// 减库存 - after_ivt_qty = NumberUtil.sub(before_ivt_qty, change_qty); - if (after_ivt_qty.doubleValue() < 0) { - throw new BadRequestException("库存数量不足,无法操作!"); - } - if (after_ivt_qty.doubleValue() <= 0) { - is_sub0 = true; - } - stackIvtObj.put("ivt_qty", after_ivt_qty); - break; - case 22:// 加库存重量和数量 - // 变动后库存数量 - after_ivt_qty = NumberUtil.add(before_ivt_qty, change_qty); - stackIvtObj.put("ivt_qty", after_ivt_qty); - break; - case 23:// 同时加(可用和库存) - // 变动后可用数量 - after_canuse_qty = NumberUtil.add(before_canuse_qty, change_qty); - stackIvtObj.put("canuse_qty", after_canuse_qty); - - // 变动后库存数量 - after_ivt_qty = NumberUtil.add(before_ivt_qty, change_qty); - stackIvtObj.put("ivt_qty", after_ivt_qty); - // 语句 - break; - case 24:// 同时减(库存和数量) - // 变动后可用数量 - after_canuse_qty = NumberUtil.sub(before_canuse_qty, change_qty); - if (after_canuse_qty.doubleValue() < 0) { - throw new BadRequestException("可用数量不足,无法操作!"); - } - stackIvtObj.put("canuse_qty", after_canuse_qty); - - // 变动后库存数量 - after_ivt_qty = NumberUtil.sub(before_ivt_qty, change_qty); - if (after_ivt_qty.doubleValue() < 0) { - throw new BadRequestException("可用数量不足,无法操作!"); - } - if (after_ivt_qty.doubleValue() <= 0) { - is_sub0 = true; - } - stackIvtObj.put("ivt_qty", after_ivt_qty); - // 语句 - - break; - case 31:// 加待入 - // 语句 - break; - case 32:// 减待入 - // 语句 - break; - default: // 可选 - throw new BadRequestException("变动类型不正确!"); - } - - - // 库存减为0,删除该记录 - if (is_sub0) { - // 出完货以后更新载具号为空 - JSONObject structObj = new JSONObject(); - structObj.put("storagevehicle_code", ""); - structObj.put("struct_id", stackIvtObj.getString("struct_id")); - stackIvtTab.delete(whereArgs); - - } else {//更新 - stackIvtObj.put("vehicle_code", vehicle_code); - stackIvtTab.update(stackIvtObj, whereArgs); - } - - } - - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java deleted file mode 100644 index dfe421d1..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/MaterialsafeivtService.java +++ /dev/null @@ -1,67 +0,0 @@ - -package org.nl.wms.masterdata_manage.备份st.service; - -import org.nl.wms.masterdata_manage.备份st.service.dto.MaterialsafeivtDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** -* @description 服务接口 -* @author zhouz -* @date 2021-12-10 -**/ -public interface MaterialsafeivtService { - - /** - * 查询数据分页 - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * @param material_id ID - * @return Materialsafeivt - */ - MaterialsafeivtDto findById(Long material_id); - - /** - * 根据编码查询 - * @param code code - * @return Materialsafeivt - */ - MaterialsafeivtDto findByCode(String code); - - - /** - * 创建 - * @param dto / - */ - void create(MaterialsafeivtDto dto); - - /** - * 编辑 - * @param dto / - */ - void update(MaterialsafeivtDto dto); - - /** - * 多选删除 - * @param ids / - */ - void deleteAll(Long[] ids); - - void insertSafe(Map whereJson); - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java deleted file mode 100644 index 94ed18ef..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelamaterialService.java +++ /dev/null @@ -1,69 +0,0 @@ - -package org.nl.wms.masterdata_manage.备份st.service; - -import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelamaterialDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** -* @description 服务接口 -* @author zhouz -* @date 2021-12-09 -**/ -public interface StructrelamaterialService { - - /** - * 查询数据分页 - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * @param material_type_id ID - * @return Structrelamaterial - */ - StructrelamaterialDto findById(Long material_type_id); - - /** - * 根据编码查询 - * @param code code - * @return Structrelamaterial - */ - StructrelamaterialDto findByCode(String code); - - - /** - * 创建 - * @param dto / - */ - void create(StructrelamaterialDto dto); - - /** - * 编辑 - * @param dto / - */ - void update(StructrelamaterialDto dto); - - /** - * 多选删除 - * @param ids / - */ - void deleteAll(Long[] ids); - - void insertSet(Map whereJson); - - void delSet(Map whereJson); - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java deleted file mode 100644 index 7989f745..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/StructrelavehicletypeService.java +++ /dev/null @@ -1,73 +0,0 @@ - -package org.nl.wms.masterdata_manage.备份st.service; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelavehicletypeDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** -* @description 服务接口 -* @author geng by -* @date 2022-04-27 -**/ -public interface StructrelavehicletypeService { - - /** - * 查询数据分页 - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * @param relation_id ID - * @return Structrelavehicletype - */ - StructrelavehicletypeDto findById(String relation_id); - - /** - * 根据编码查询 - * @param code code - * @return Structrelavehicletype - */ - StructrelavehicletypeDto findByCode(String code); - - - /** - * 创建 - * @param param / - */ - void create(JSONObject param); - - /** - * 编辑 - * @param param / - */ - void update(JSONObject param); - - /** - * 多选删除 - * @param ids / - */ - void deleteAll(String[] ids); - - /** - * 查询仓位 - * @return - */ - JSONArray getStruct(); - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java deleted file mode 100644 index c14f7dbd..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/MaterialsafeivtDto.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; - - -import java.io.Serializable; -import java.math.BigDecimal; - -/** -* @description / -* @author zhouz -* @date 2021-12-10 -**/ -@Data -public class MaterialsafeivtDto implements Serializable { - - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long stor_id; - - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long material_id; - - private BigDecimal safe_ivt_down; - - private BigDecimal safe_ivt_up; - - private Long qty_unit_id; - - private String qty_unit_name; - - private Long set_id; - - private String set_name; - - private String set_time; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java deleted file mode 100644 index fca16eb6..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/SectattrDto.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; - - -import java.io.Serializable; -import java.math.BigDecimal; - -/** -* @description / -* @author zhouz -* @date 2021-12-09 -**/ -@Data -public class SectattrDto implements Serializable { - - /** 库区标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long sect_id; - - /** 库区编码 */ - private String sect_code; - - /** 库区名称 */ - private String sect_name; - - /** 库区简称 */ - private String simple_name; - - /** 库区类型 */ - private String sect_type_attr; - - /** 仓库标识 */ - private Long stor_id; - - /** 仓库名称 */ - private String stor_name; - - /** 仓库类型 */ - private String stor_type; - - /** 容量 */ - private BigDecimal capacity; - - /** 宽度 */ - private BigDecimal width; - - /** 高度 */ - private BigDecimal height; - - /** 深度 */ - private BigDecimal zdepth; - - /** 起始X坐标 */ - private BigDecimal xqty; - - /** 起始Y坐标 */ - private BigDecimal yqty; - - /** 起始Z坐标 */ - private BigDecimal zqty; - - /** 负责人 */ - private String sect_manager_name; - - /** 负责人电话 */ - private String mobile_no; - - /** 备注 */ - 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; - - /** 是否删除 */ - private String is_delete; - - /** 背景色 */ - private String back_ground_color; - - /** 前景色 */ - private String front_ground_color; - - /** 背景图片 */ - private String back_ground_pic; - - /** 字体显示方向 */ - private String font_direction_scode; - - /** 所在楼层 */ - private BigDecimal floor_no; - - /** 是否启用 */ - private String is_used; - - /** 外部标识 */ - private String ext_id; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java deleted file mode 100644 index 1c9e06a8..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StorattrDto.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; - - -import java.io.Serializable; -import java.math.BigDecimal; - -/** -* @description / -* @author zhouz -* @date 2021-12-08 -**/ -@Data -public class StorattrDto implements Serializable { - - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long stor_id; - - /** 仓库编码 */ - private String stor_code; - - /** 仓库名称 */ - private String stor_name; - - /** 简称 */ - private String simple_name; - - /** 容量 */ - private BigDecimal stor_capacity; - - /** 总面积(㎡) */ - private BigDecimal total_area; - - /** 仓库性质 */ - private String stor_type_scode; - - private String is_virtualstore; - - private String is_semi_finished; - - private String is_materialstore; - - private String is_productstore; - - private String is_reversed; - - private String is_mvout_auto_cfm; - - private String is_mvin_auto_cfm; - - private String area; - - /** 地址 */ - private String storea_ddress; - - /** 负责人 */ - private String principal; - - /** 联系电话 */ - private String office_phone; - - private String mobile_no; - - /** 备注 */ - private String remark; - - private BigDecimal order_index; - - private String whstate_scode; - - /** 是否启用 */ - private String is_used; - - private String base_class_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 Long sysownerid; - - private Long sysdeptid; - - private Long syscompanyid; - - private String is_delete; - - private String ext_id; - - private String depart_name; - - private String company_name; - - private String is_attachment; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java deleted file mode 100644 index 9f67aeb4..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructattrDto.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; - - -import java.io.Serializable; -import java.math.BigDecimal; - -/** -* @description / -* @author zhouz -* @date 2021-12-09 -**/ -@Data -public class StructattrDto implements Serializable { - - /** 仓位标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long struct_id; - - /** 仓位编码 */ - private String struct_code; - - /** 仓位名称 */ - private String struct_name; - - /** 仓位简称 */ - private String simple_name; - - /** 库区标识 */ - private Long sect_id; - - /** 库区编码 */ - private String sect_code; - - /** 库区名称 */ - private String sect_name; - - /** 仓库标识 */ - private Long stor_id; - - /** 仓库编码 */ - private String stor_code; - - /** 仓库名称 */ - private String stor_name; - - /** 仓库类型 */ - private String stor_type; - - /** 容量 */ - private BigDecimal capacity; - - /** 宽度 */ - private BigDecimal width; - - /** 高度 */ - private BigDecimal height; - - /** 深度 */ - private BigDecimal zdepth; - - /** 承受重量 */ - private BigDecimal weight; - - /** 起始X坐标 */ - private BigDecimal xqty; - - /** 起始Y坐标 */ - private BigDecimal yqty; - - /** 起始Z坐标 */ - private BigDecimal zqty; - - /** 是否临时仓位 */ - private String is_tempstruct; - - /** 创建人 */ - 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 String is_delete; - - /** 背景色 */ - private String back_ground_color; - - /** 前景色 */ - private String front_ground_color; - - /** 背景图片 */ - private String back_ground_pic; - - /** 字体显示方向 */ - private String font_direction_scode; - - /** 是否启用 */ - private String is_used; - - /** 是否判断高度 */ - private String is_zdepth; - - /** 存储载具标识 */ - private Long storagevehicle_id; - - /** 存储载具号 */ - private String storagevehicle_code; - - /** 存储载具类型 */ - private String storagevehicle_type; - - /** 是否空载具 */ - private String is_emptyvehicle; - - /** 载具数量 */ - private BigDecimal storagevehicle_qty; - - /** 锁定类型 */ - private String lock_type; - - /** 物料高度类型 */ - private String material_height_type; - - /** 外部标识 */ - private String ext_id; - - /** 备注 */ - private String remark; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java deleted file mode 100644 index 5ea1bfc1..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructivtDto.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; -import java.util.Date; - - -import java.io.Serializable; -import java.math.BigDecimal; - -/** -* @description / -* @author geng by -* @date 2022-06-02 -**/ -@Data -public class StructivtDto implements Serializable { - - /** 库存记录标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long stockrecord_id; - - /** 仓位标识 */ - private Long struct_id; - - /** 仓位编码 */ - private String struct_code; - - /** 仓位名称 */ - private String struct_name; - - /** 工序标识 */ - private Long workprocedure_id; - - /** 物料标识 */ - private Long material_id; - - /** 品质类型 */ - private String quality_scode; - - /** 批次 */ - private String pcsn; - - /** 可用数 */ - private BigDecimal canuse_qty; - - /** 冻结数 */ - private BigDecimal frozen_qty; - - /** 库存数 */ - private BigDecimal ivt_qty; - - /** 待入数 */ - private BigDecimal warehousing_qty; - - /** 计量单位标识 */ - private Long qty_unit_id; - - /** 入库时间 */ - private Date instorage_time; - - /** 销售单标识 */ - private Long sale_id; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java deleted file mode 100644 index bb21ad08..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelamaterialDto.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; -import java.util.Date; - - -import java.io.Serializable; - -/** -* @description / -* @author zhouz -* @date 2021-12-09 -**/ -@Data -public class StructrelamaterialDto implements Serializable { - - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long sect_id; - - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long material_type_id; - - private Long set_id; - - private String set_name; - - private Date set_time; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java deleted file mode 100644 index c848b4d3..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/dto/StructrelavehicletypeDto.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.nl.wms.masterdata_manage.备份st.service.dto; - -import lombok.Data; - -import java.io.Serializable; - -/** - * @author geng by - * @description / - * @date 2022-04-27 - **/ -@Data -public class StructrelavehicletypeDto implements Serializable { - - /** - * 关系标识 - */ - private String relation_id; - - /** - * 仓位标识 - */ - private String struct_id; - - /** - * 载具类型 - */ - private String vehicle_type; - - /** - * 创建人 - */ - 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 String is_delete; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java deleted file mode 100644 index aad7705b..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/MaterialsafeivtServiceImpl.java +++ /dev/null @@ -1,157 +0,0 @@ - -package org.nl.wms.masterdata_manage.备份st.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.common.exception.BadRequestException; - import org.nl.common.utils.SecurityUtils; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; -import org.nl.wms.masterdata_manage.备份master.service.ClassstandardService; -import org.nl.wms.masterdata_manage.备份st.service.MaterialsafeivtService; -import org.nl.wms.masterdata_manage.备份st.service.dto.MaterialsafeivtDto; - -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author zhouz - * @description 服务实现 - * @date 2021-12-10 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class MaterialsafeivtServiceImpl implements MaterialsafeivtService { - private final ClassstandardService classstandardService; - - @Override - public Map queryAll(Map whereJson, Pageable page) { - String search = (String) whereJson.get("search"); - String class_idStr = (String) whereJson.get("class_idStr"); - HashMap map = new HashMap<>(); - if (!StrUtil.isEmpty(search)) { - //处理转义字符 - if (search.contains("\\")) search = search.replace("\\", "\\\\\\"); - map.put("search", "%" + search + "%"); - } - String material_type_id = (String) whereJson.get("material_type_id"); - //处理物料当前节点的所有子节点 - if (!StrUtil.isEmpty(material_type_id)) { - map.put("material_type_id", material_type_id); - String classIds = classstandardService.getChildIdStr(material_type_id); - map.put("classIds", classIds); - } else if (ObjectUtil.isNotEmpty(class_idStr)) { - String classIds = classstandardService.getAllChildIdStr(class_idStr); - map.put("classIds", classIds); - } - - map.put("flag", "1"); - map.put("stor_id", MapUtil.getStr(whereJson, "stor_id")); - JSONObject jo = WQL.getWO("QST_IVT_MATERIALSAFE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "set_time desc"); - return jo; - } - - @Override - public void insertSafe(Map whereJson) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - String stor_id = (String) whereJson.get("stor_id"); - ArrayList rows = (ArrayList) whereJson.get("rows"); - for (int i = 0; i < rows.size(); i++) { - HashMap row = rows.get(i); - WQLObject.getWQLObject("ST_IVT_MaterialSafeIvt").delete("stor_id = '" + stor_id + "' AND material_id = '" + row.get("material_id") + "'"); - JSONObject jo = new JSONObject(); - jo.put("stor_id", stor_id); - jo.put("safe_ivt_down", row.get("safe_ivt_down")); - jo.put("material_id", row.get("material_id")); - jo.put("safe_ivt_up", "999999"); - jo.put("qty_unit_id", row.get("qty_unit_id")); - jo.put("qty_unit_name", row.get("qty_unit_name")); - jo.put("set_id", currentUserId + ""); - jo.put("set_name", nickName); - jo.put("set_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_MaterialSafeIvt").insert(jo); - } - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(MaterialsafeivtDto.class); - return list; - } - - @Override - public MaterialsafeivtDto findById(Long material_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); - JSONObject json = wo.query("material_id =" + material_id + "").uniqueResult(0); - final MaterialsafeivtDto obj = json.toJavaObject(MaterialsafeivtDto.class); - return obj; - } - - @Override - public MaterialsafeivtDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - final MaterialsafeivtDto obj = json.toJavaObject(MaterialsafeivtDto.class); - return obj; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(MaterialsafeivtDto dto) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(MaterialsafeivtDto dto) { - MaterialsafeivtDto entity = this.findById(dto.getMaterial_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - - WQLObject wo = WQLObject.getWQLObject("st_ivt_materialsafeivt"); - for (Long material_id : ids) { - JSONObject param = new JSONObject(); - param.put("material_id", String.valueOf(material_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", DateUtil.now()); - wo.update(param); - } - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java deleted file mode 100644 index 49e1cf03..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelamaterialServiceImpl.java +++ /dev/null @@ -1,177 +0,0 @@ - -package org.nl.wms.masterdata_manage.备份st.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.common.exception.BadRequestException; - import org.nl.common.utils.SecurityUtils; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; -import org.nl.wms.masterdata_manage.备份master.service.ClassstandardService; -import org.nl.wms.masterdata_manage.备份st.service.StructrelamaterialService; -import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelamaterialDto; - -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Date; -/** - * @author zhouz - * @description 服务实现 - * @date 2021-12-09 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class StructrelamaterialServiceImpl implements StructrelamaterialService { - private final ClassstandardService classstandardService; - - @Override - public Map queryAll(Map whereJson, Pageable page) { - String search = (String) whereJson.get("search"); - HashMap map = new HashMap<>(); - if (!StrUtil.isEmpty(search)) { - map.put("search", "%" + search + "%"); - } - map.put("flag", "1"); - map.put("stor_id", (String) whereJson.get("stor_id")); - map.put("sect_id", (String) whereJson.get("sect_id")); - String material_type_id = (String) whereJson.get("material_type_id"); - String class_idStr = (String) whereJson.get("class_idStr"); - //处理物料当前节点的所有子节点 - if (!StrUtil.isEmpty(material_type_id)) { - map.put("material_type_id", material_type_id); - String classIds = classstandardService.getChildIdStr(material_type_id); - map.put("classIds", classIds); - } else if (ObjectUtil.isNotEmpty(class_idStr)) { - String classIds = classstandardService.getAllChildIdStr(class_idStr); - map.put("classIds", classIds); - } - JSONObject jo = WQL.getWO("QST_IVT_MATERIALSET").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "set_time desc"); - return jo; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(StructrelamaterialDto.class); - return list; - } - - @Override - public StructrelamaterialDto findById(Long material_type_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); - JSONObject json = wo.query("material_type_id =" + material_type_id + "").uniqueResult(0); - final StructrelamaterialDto obj = json.toJavaObject(StructrelamaterialDto.class); - return obj; - } - - @Override - public StructrelamaterialDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - final StructrelamaterialDto obj = json.toJavaObject(StructrelamaterialDto.class); - return obj; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(StructrelamaterialDto dto) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - - dto.setMaterial_type_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setSet_name(nickName); - dto.setSet_time(new Date()); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(StructrelamaterialDto dto) { - StructrelamaterialDto entity = this.findById(dto.getMaterial_type_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelamaterial"); - for (Long material_type_id : ids) { - JSONObject param = new JSONObject(); - param.put("material_type_id", String.valueOf(material_type_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", DateUtil.now()); - wo.update(param); - } - } - - @Override - public void insertSet(Map whereJson) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - WQLObject mater = WQLObject.getWQLObject("ST_IVT_StructRelaMaterial"); - String sect_id = (String) whereJson.get("sect_id"); - ArrayList class_rows = (ArrayList) whereJson.get("class_rows"); - for (int i = 0; i < class_rows.size(); i++) { - HashMap class_row = class_rows.get(i); - JSONObject material_set = mater.query("sect_id = '" + sect_id + "' AND material_type_id = '" + class_row.get("class_id") + "'") - .uniqueResult(0); - if (material_set != null) { - HashMap update_map = new HashMap<>(); - update_map.put("set_id", currentUserId + ""); - update_map.put("set_name", nickName); - update_map.put("set_time", DateUtil.now()); - mater.update(update_map, "sect_id = '" + sect_id + "' AND material_type_id = '" + class_row.get("class_id") + "'"); - } else { - JSONObject jo = new JSONObject(); - jo.put("sect_id", sect_id); - jo.put("material_type_id", class_row.get("class_id")); - jo.put("set_id", currentUserId + ""); - jo.put("set_name", nickName); - jo.put("set_time", DateUtil.now()); - mater.insert(jo); - } - } - } - - @Override - public void delSet(Map whereJson) { - String sect_id = (String) whereJson.get("sect_id"); - String material_type_id = (String) whereJson.get("material_type_id"); - WQLObject.getWQLObject("ST_IVT_StructRelaMaterial").delete("sect_id = '" + sect_id + "' AND material_type_id = '" + material_type_id + "'"); - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java deleted file mode 100644 index 2cbeafe1..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/service/impl/StructrelavehicletypeServiceImpl.java +++ /dev/null @@ -1,187 +0,0 @@ - -package org.nl.wms.masterdata_manage.备份st.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - import org.nl.common.utils.SecurityUtils; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; -import org.nl.wms.masterdata_manage.备份st.service.StructrelavehicletypeService; -import org.nl.wms.masterdata_manage.备份st.service.dto.StructrelavehicletypeDto; - -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; - -/** - * @author geng by - * @description 服务实现 - * @date 2022-04-27 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class StructrelavehicletypeServiceImpl implements StructrelavehicletypeService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - String search = MapUtil.getStr(whereJson, "search"); - JSONObject map = new JSONObject(); - map.put("flag", "2"); - if (ObjectUtil.isNotEmpty(search)) { - map.put("search", "%" + search + "%"); - } - JSONObject json = WQL.getWO("ST_Structrelavehicletype_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "view_vehicleType.struct_code"); - WQLObject wo = WQLObject.getWQLObject("sys_dict_detail"); - JSONArray content = json.getJSONArray("content"); - JSONArray newContent = new JSONArray(); - for (int i = 0; i < content.size(); i++) { - JSONObject jsonObject = content.getJSONObject(i); - String vehicle_type = jsonObject.getString("vehicle_type"); - String[] vehicle_types = new String[0]; - if (StrUtil.isNotEmpty(vehicle_type)){ - vehicle_types = vehicle_type.split(","); - } - String typeNames = ""; - if (vehicle_types.length > 0){ - for (int j = 0; j < vehicle_types.length; j++) { - JSONObject type = wo.query("value = '" + vehicle_types[j] + "' and name = 'storagevehicle_type'").uniqueResult(0); - String typeName = type.getString("label"); - if (vehicle_types.length - 1 != j) { - typeNames = typeNames + typeName + ","; - } - if (vehicle_types.length - 1 == j) { - typeNames = typeNames + typeName; - } - } - } - jsonObject.put("is_edit","0"); - jsonObject.put("vehicle_type_name", typeNames); - jsonObject.put("vehicle_type", vehicle_types); - newContent.add(jsonObject); - } - json.put("content", newContent); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(StructrelavehicletypeDto.class); - return null; - } - - @Override - public StructrelavehicletypeDto findById(String relation_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); - JSONObject json = wo.query("relation_id = '" + relation_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(StructrelavehicletypeDto.class); - } - return null; - } - - @Override - public StructrelavehicletypeDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(StructrelavehicletypeDto.class); - } - return null; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(JSONObject param) { - String struct_id = param.getString("struct_id"); - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); - JSONArray vehicle_types = param.getJSONArray("vehicle_type"); - for (int i = 0; i < vehicle_types.size(); i++) { - param.put("relation_id", String.valueOf(IdUtil.getSnowflake(1, 1).nextId())); - param.put("struct_id", struct_id); - param.put("vehicle_type", vehicle_types.get(i)); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", DateUtil.now()); - param.put("create_id", currentUserId); - param.put("create_name", nickName); - param.put("create_time", DateUtil.now()); - wo.insert(param); - } - - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(JSONObject param) { - String struct_id = param.getString("struct_id"); - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); - - wo.delete("struct_id = '" + struct_id + "'"); - JSONArray vehicle_types = param.getJSONArray("vehicle_type"); - if (vehicle_types.size() == 0){ - param.put("relation_id", String.valueOf(IdUtil.getSnowflake(1, 1).nextId())); - param.put("struct_id", struct_id); - param.put("vehicle_type", null); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", DateUtil.now()); - param.put("create_id", currentUserId); - param.put("create_name", nickName); - param.put("create_time", DateUtil.now()); - wo.insert(param); - return; - } - for (int i = 0; i < vehicle_types.size(); i++) { - param.put("relation_id", String.valueOf(IdUtil.getSnowflake(1, 1).nextId())); - param.put("struct_id", struct_id); - param.put("vehicle_type", vehicle_types.get(i)); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", DateUtil.now()); - param.put("create_id", currentUserId); - param.put("create_name", nickName); - param.put("create_time", DateUtil.now()); - wo.insert(param); - } - - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(String[] ids) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_structrelavehicletype"); - for (String struct_id : ids) { - wo.delete("struct_id = '" + struct_id + "'"); - } - } - - @Override - public JSONArray getStruct() { - JSONObject map = new JSONObject(); - map.put("flag", "1"); - JSONArray json = WQL.getWO("ST_Structrelavehicletype_01").addParamMap(map).process().getResultJSONArray(0); - return json; - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql deleted file mode 100644 index 2ba88dab..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QLK01.wql +++ /dev/null @@ -1,226 +0,0 @@ -[交易说明] - 交易名: 将海亮的物料导入mysql - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.material_code TYPEAS s_string - 输入.processroute_uuid TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - * - FROM - MD_PB_BaseData_ClassInfo classinfot - LEFT JOIN MD_PB_BaseData_ClassStandard standard ON classinfot.class_uuid = standard.class_uuid - LEFT JOIN MD_ME_MaterialBase material ON material.material_uuid = classinfot.base_data_uuid - left join MD_ME_MaterialExt ext on ext.material_uuid = material.material_uuid - - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - * - FROM - MD_PB_BaseData_ClassStandard class - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "3" - QUERY - SELECT - * - FROM - ST_IVT_BSREALSTORATTR - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "4" - QUERY - SELECT - * - FROM - ST_IVT_SECTATTR - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "5" - QUERY - SELECT - * - FROM - ST_IVT_STRUCTATTR - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "6" - QUERY - SELECT - * - FROM - ST_IVT_StorageVehicleInfo - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "7" - QUERY - SELECT - * - FROM - wdk_sysparam - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "8" - QUERY - SELECT - * - FROM - IF_CacheLine_Position - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "9" - QUERY - SELECT - * - FROM - st_cacheline_position - ENDSELECT - ENDQUERY - ENDIF - -IF 输入.flag = "10" - QUERY - SELECT - mb.*, - class.class_code, - class.class_name - FROM - md_me_materialbase mb - LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id - WHERE - mb.is_delete = '0' - AND 1 = 1 - AND class.class_id IN ( '1528555445302726656', '1528555443906023424', '1528555445080428544' ) - ENDSELECT - ENDQUERY -ENDIF - -IF 输入.flag = "11" - QUERY - SELECT - mb.*, - class.class_code, - class.class_name - FROM - md_me_materialbase mb - LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id - WHERE - mb.is_delete = '0' - AND 1 = 1 - AND class.class_id IN ( '1528555444031852544', '1528555444778438656', '1528555444291899392' ) - ENDSELECT - ENDQUERY -ENDIF - - -IF 输入.flag = "12" - QUERY - SELECT - * - FROM - PDM_BI_WorkshopMaterialCorr - ENDSELECT - ENDQUERY -ENDIF - -IF 输入.flag = "13" - QUERY - SELECT - * - FROM - PDM_BI_SemiMaterialCorr - ENDSELECT - ENDQUERY -ENDIF - -IF 输入.flag = "14" - QUERY - SELECT - * - FROM - PDM_BI_WorkshopMaterialCorr corr - LEFT JOIN PF_PB_SysDicInfo sys ON sys.sysdic_code = corr.materialprocess_series - AND sys.sysdic_type = 'IF_WCS_DEVICESERIES' - ENDSELECT - ENDQUERY -ENDIF - - - -IF 输入.flag = "15" - QUERY - SELECT - * - FROM - PDM_BI_ProduceProcessRoute route - ENDSELECT - ENDQUERY -ENDIF - -IF 输入.flag = "16" - QUERY - SELECT - * - FROM - PDM_BI_ProduceProcessRoute route - LEFT JOIN PDM_BI_ProduceProcessRouteDtl dtl ON route.processroute_uuid = dtl.processroute_uuid - route.processroute_uuid = 输入.processroute_uuid - order by workprocedure_number - ENDSELECT - ENDQUERY -ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql deleted file mode 100644 index 0dd25798..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSAFE.wql +++ /dev/null @@ -1,85 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.classIds TYPEAS f_string - 输入.stor_id TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - (case when stor.stor_id is null THEN '' else stor.stor_id end) AS stor_id, - (case when stor.stor_code is null then 'yclk01' else stor.stor_code end) stor_code, - (case when stor.stor_name is null then '原料库' else stor.stor_name end) stor_name, - (case when safe.safe_ivt_down is null then 0 else safe.safe_ivt_down end) safe_ivt_down, - mb.material_code, - mb.material_name, - mb.base_unit_id, - mb.material_id, - mb.base_unit_id AS qty_unit_id, - safe.set_name, - safe.set_time, - unit.unit_name AS qty_unit_name - FROM - md_me_materialbase mb - LEFT JOIN st_ivt_materialsafeivt safe ON safe.material_id = mb.material_id - LEFT JOIN st_ivt_bsrealstorattr stor ON stor.stor_id = safe.stor_id - LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mb.base_unit_id - LEFT JOIN md_pb_classstandard class ON class.class_id =mb.material_type_id - WHERE - 1=1 - OPTION 输入.classIds <> "" - mb.material_type_id in 输入.classIds - ENDOPTION - OPTION 输入.stor_id <> "" - stor.stor_id = 输入.stor_id - ENDOPTION - OPTION 输入.search <> "" - ( - mb.material_code like 输入.search - OR - mb.material_name like 输入.search - ) - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql deleted file mode 100644 index 3eff3c77..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_IVT_MATERIALSET.wql +++ /dev/null @@ -1,78 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.stor_id TYPEAS s_string - 输入.sect_id TYPEAS s_string - 输入.classIds TYPEAS f_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - se.sect_code, - se.sect_name, - class.class_code, - class.class_name, - sm.* - FROM - st_ivt_structrelamaterial sm - INNER JOIN st_ivt_sectattr se ON se.sect_id = sm.sect_id - INNER JOIN md_pb_classstandard class ON class.class_id = sm.material_type_id - OPTION 输入.search <> "" - ( - class.class_code like 输入.search - OR - class.class_name like 输入.search - ) - ENDOPTION - OPTION 输入.stor_id <> "" - se.stor_id = 输入.stor_id - ENDOPTION - OPTION 输入.sect_id <> "" - se.sect_id = 输入.sect_id - ENDOPTION - OPTION 输入.classIds <> "" - class.class_id in 输入.classIds - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_SECT_ATTR.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_SECT_ATTR.wql deleted file mode 100644 index cae0762f..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_SECT_ATTR.wql +++ /dev/null @@ -1,90 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.stor_id TYPEAS s_string - 输入.sect_type_attr TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - sect.*, - stor.stor_name - FROM - ST_IVT_SectAttr sect - left join ST_IVT_BSRealStorAttr stor on sect.stor_id = stor.stor_id - WHERE - sect.is_delete = '0' - OPTION 输入.search <> "" - ( - sect.sect_code like 输入.search - OR - sect.sect_name like 输入.search - ) - ENDOPTION - OPTION 输入.stor_id <> "" - sect.stor_id = 输入.stor_id - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - sect.sect_id, - sect.sect_name - FROM - st_ivt_sectattr sect - WHERE - sect.is_delete = '0' - AND - sect.is_used = '1' - OPTION 输入.stor_id <> "" - sect.stor_id = 输入.stor_id - ENDOPTION - OPTION 输入.sect_type_attr <> "" - sect.sect_type_attr = 输入.sect_type_attr - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STOR_ATTR.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STOR_ATTR.wql deleted file mode 100644 index ee205356..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STOR_ATTR.wql +++ /dev/null @@ -1,108 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.is_materialstore TYPEAS s_string - 输入.is_virtualstore TYPEAS s_string - 输入.is_semi_finished TYPEAS s_string - 输入.is_productstore TYPEAS s_string - 输入.is_attachment TYPEAS s_string - 输入.is_reversed TYPEAS s_string - 输入.stor_id TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - stor.*, - detail.label - FROM - st_ivt_bsrealstorattr stor - LEFT JOIN sys_dict_detail detail ON detail.value = stor.stor_type_scode AND detail.dict_id = '30' - WHERE - stor.is_delete = '0' - OPTION 输入.search <> "" - ( - stor.stor_code like 输入.search - OR - stor.stor_name like 输入.search - ) - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - stor.stor_id, - stor.stor_code, - stor.stor_name - FROM - st_ivt_bsrealstorattr stor - WHERE - stor.is_delete = '0' - AND - stor.is_used = '1' - OPTION 输入.is_virtualstore <> "" - stor.is_virtualstore = 输入.is_virtualstore - ENDOPTION - OPTION 输入.is_semi_finished <> "" - stor.is_semi_finished = 输入.is_semi_finished - ENDOPTION - OPTION 输入.is_materialstore <> "" - stor.is_materialstore = 输入.is_materialstore - ENDOPTION - OPTION 输入.is_productstore <> "" - stor.is_productstore = 输入.is_productstore - ENDOPTION - OPTION 输入.is_attachment <> "" - stor.is_attachment = 输入.is_attachment - ENDOPTION - OPTION 输入.is_reversed <> "" - stor.is_reversed = 输入.is_reversed - ENDOPTION - OPTION 输入.stor_id <> "" - stor.stor_id = 输入.stor_id - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCTIVT001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCTIVT001.wql deleted file mode 100644 index ef7b9db8..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCTIVT001.wql +++ /dev/null @@ -1,107 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.stor_id TYPEAS s_string - 输入.sect_id TYPEAS s_string - 输入.workprocedure_id TYPEAS s_string - 输入.struct TYPEAS s_string - 输入.material TYPEAS s_string - 输入.sale_code TYPEAS s_string - 输入.product_series TYPEAS f_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - ivt.*, - sect.sect_name, - bsrealstorattr.stor_name, - workprocedure.workprocedure_code, - workprocedure.workprocedure_name, - material.material_code, - material.material_name, - material.material_spec, - material.product_series, - unit.unit_name, - saleorder.sale_code, - classstandard.class_name - FROM - ST_IVT_StructIvt ivt - left join st_ivt_structattr structattr on ivt.struct_id = structattr.struct_id - left join st_ivt_sectattr sect on structattr.sect_id = sect.sect_id - left join st_ivt_bsrealstorattr bsrealstorattr on sect.stor_id = bsrealstorattr.stor_id - left join pdm_bi_workprocedure workprocedure on ivt.workprocedure_id = workprocedure.workprocedure_id - left join md_me_materialbase material on ivt.material_id = material.material_id - left join md_pb_measureunit unit on ivt.qty_unit_id = unit.measure_unit_id - left join pcs_sale_order saleorder on ivt.sale_id = saleorder.sale_id - left join md_pb_classstandard classstandard on material.product_series = classstandard.class_id - WHERE - 1 = 1 - OPTION 输入.stor_id <> "" - bsrealstorattr.stor_id = 输入.stor_id - ENDOPTION - OPTION 输入.sect_id <> "" - sect.sect_id = 输入.sect_id - ENDOPTION - OPTION 输入.workprocedure_id <> "" - ivt.workprocedure_id = 输入.workprocedure_id - ENDOPTION - OPTION 输入.struct <> "" - ( - ivt.struct_code like 输入.struct or - ivt.struct_name like 输入.struct - ) - ENDOPTION - OPTION 输入.material <> "" - ( - material.material_code like 输入.material or - material.material_name like 输入.material or - material.material_spec like 输入.material - ) - ENDOPTION - OPTION 输入.sale_code <> "" - saleorder.sale_code like 输入.sale_code - ENDOPTION - OPTION 输入.product_series <> "" - material.product_series in 输入.product_series - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCT_ATTR.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCT_ATTR.wql deleted file mode 100644 index 2f75599d..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/QST_STRUCT_ATTR.wql +++ /dev/null @@ -1,79 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.stor_id TYPEAS s_string - 输入.sect_id TYPEAS s_string - 输入.lock_type TYPEAS s_string - 输入.storagevehicle_type TYPEAS s_string - 输入.is_used TYPEAS s_string - 输入.is_delete TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - struct.* - FROM - st_ivt_structattr struct - WHERE - struct.is_delete = '0' - OPTION 输入.search <> "" - ( - struct.struct_code like 输入.search - OR - struct.struct_name like 输入.search - ) - ENDOPTION - OPTION 输入.stor_id <> "" - struct.stor_id = 输入.stor_id - ENDOPTION - OPTION 输入.sect_id <> "" - struct.sect_id = 输入.sect_id - ENDOPTION - OPTION 输入.lock_type <> "" - struct.lock_type = 输入.lock_type - ENDOPTION - OPTION 输入.lock_type = "00" - (struct.storagevehicle_code is null or struct.storagevehicle_code = '') - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql deleted file mode 100644 index d7e77197..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/ST_Structrelavehicletype_01.wql +++ /dev/null @@ -1,86 +0,0 @@ -[交易说明] - 交易名: 仓位载具类型查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - * - FROM - st_ivt_structattr - WHERE - is_delete = '0' and struct_id not in( - select distinct struct_id from st_ivt_structrelavehicletype - ) - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "2" - PAGEQUERY - SELECT - * - FROM - ( - SELECT - any_value ( vehicleType.struct_id ) AS struct_id, - any_value ( vehicleType.create_id ) AS create_id, - any_value ( vehicleType.create_name ) AS create_name, - any_value ( vehicleType.create_time ) AS create_time, - any_value ( vehicleType.update_optname ) AS update_optname, - any_value ( struct.struct_code ) AS struct_code, - any_value ( vehicleType.update_time ) AS update_time, - any_value ( struct.struct_name ) AS struct_name, - any_value ( GROUP_CONCAT( vehicleType.vehicle_type ) ) AS vehicle_type - FROM - ST_IVT_StructRelaVehicleType vehicleType - LEFT JOIN st_ivt_structattr struct ON vehicleType.struct_id = struct.struct_id - GROUP BY - vehicleType.struct_id - ) AS view_vehicleType - WHERE - 1 = 1 - OPTION 输入.search <> "" - (view_vehicleType.struct_code like 输入.search or - view_vehicleType.struct_name like 输入.search) - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/备份st/wql/stivt.xls deleted file mode 100644 index 60278aafb1d86c3ff281b8895bc17adbb2d5914d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225792 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 AQ2+n{ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java index 5f9787d0..6ebe7421 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java @@ -2,15 +2,20 @@ package org.nl.wms.product_manage.controller.workorder; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.common.domain.query.PageQuery; import org.nl.wms.mps.service.ProduceWorkorderService; import org.nl.wms.mps.service.dto.ProduceWorkorderDto; +import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; +import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -38,6 +43,8 @@ import java.util.Map; public class PdmProduceWorkorderController { private final ProduceWorkorderService produceWorkorderService; private final IPdmProduceWorkorderService iPdmProduceWorkorderService; + @Autowired + private IPdmBiDeviceService deviceService; @GetMapping @Log("查询工单管理") @@ -93,7 +100,10 @@ public class PdmProduceWorkorderController { @ApiOperation("根据工序查询没有工单的设备") //@PreAuthorize("@el.check('WorkProcedure:add')") public ResponseEntity getNotWorkDeviceByWorkproceduceId(@RequestBody JSONObject param) { - return new ResponseEntity<>(produceWorkorderService.getNotWorkDeviceByWorkproceduceId(param),HttpStatus.CREATED); + List list = deviceService.list(new QueryWrapper() + .eq("workprocedure_id", param.getString("workprocedure_id")) + .eq("is_delete", false)); + return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.CREATED); } @PostMapping("/getDtl") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/CallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/CallMaterialTask.java index 244b903b..ec6c2692 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/CallMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/CallMaterialTask.java @@ -11,8 +11,6 @@ import org.nl.modules.system.util.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; -import org.nl.wms.masterdata_manage.备份st.IvtChangeTypeEnum; -import org.nl.wms.masterdata_manage.备份st.StoreIvtServiceImpl; import org.nl.common.StructFindUtil; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; @@ -63,7 +61,7 @@ public class CallMaterialTask extends AbstractAcsTask { WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); //审核 加库存可和用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + //StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); mstObj.put("bill_status", "50"); mstObj.put("confirm_optid", SecurityUtils.getCurrentUserId()); mstObj.put("confirm_optname", SecurityUtils.getCurrentNickName()); @@ -91,7 +89,7 @@ public class CallMaterialTask extends AbstractAcsTask { throw new BadRequestException("未找到可用点位:" + start_point_code); } param.put("struct_id", startPointDto.getPoint_id()); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); + //ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); //解锁仓位,托盘信息,回写到点位上去 String vehicle_code = jsonTask.getString("vehicle_code"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); @@ -345,7 +343,7 @@ public class CallMaterialTask extends AbstractAcsTask { } //减少库存可用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + //StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); JSONObject param = new JSONObject(); param.put("material_id", material_id); param.put("bill_id", iostorinv_id); @@ -355,7 +353,7 @@ public class CallMaterialTask extends AbstractAcsTask { param.put("vehicle_code", startPoint.getVehicle_code()); param.put("workprocedure_id", ivt_workprocedure_id); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); + //ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); JSONObject taskObj = new JSONObject(); taskObj.put("task_id", task_id); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SendMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SendMaterialTask.java index f23ce340..d28a4798 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SendMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SendMaterialTask.java @@ -13,8 +13,6 @@ import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; -import org.nl.wms.masterdata_manage.备份st.IvtChangeTypeEnum; -import org.nl.wms.masterdata_manage.备份st.StoreIvtServiceImpl; import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; @@ -68,7 +66,7 @@ public class SendMaterialTask extends AbstractAcsTask { WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); //审核 加库存可和用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + //StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); mstObj.put("bill_status", "50"); mstObj.put("confirm_optid", SecurityUtils.getCurrentUserId()); mstObj.put("confirm_optname", SecurityUtils.getCurrentNickName()); @@ -104,7 +102,7 @@ public class SendMaterialTask extends AbstractAcsTask { throw new BadRequestException("未找到可用点位:" + start_point_code); } param.put("struct_id", nextPointDto.getPoint_id()); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.ADD_IVT_AND_CAN_USE); + //ivtService.addIvtFlow(param, IvtChangeTypeEnum.ADD_IVT_AND_CAN_USE); //解锁仓位,托盘信息,回写到点位上去 String vehicle_code = jsonTask.getString("vehicle_code"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java index 123dd0ed..690c0017 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java @@ -49,7 +49,7 @@ public class PdmBiDevice implements Serializable { /** * 物料标识 */ - private Long material_id; + private String material_id; /** * 工单编号 @@ -99,7 +99,7 @@ public class PdmBiDevice implements Serializable { /** * 是否人工 */ - private String is_artificial; + private Boolean is_artificial; /** * 备注 @@ -114,7 +114,7 @@ public class PdmBiDevice implements Serializable { /** * 创建人 */ - private Long create_id; + private String create_id; /** * 创建人 @@ -129,7 +129,7 @@ public class PdmBiDevice implements Serializable { /** * 修改人 */ - private Long update_id; + private String update_id; /** * 修改人 @@ -144,12 +144,12 @@ public class PdmBiDevice implements Serializable { /** * 是否删除 */ - private String is_delete; + private Boolean is_delete; /** * 是否在用 */ - private String is_used; + private Boolean is_used; /** * 设备图标 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/wql/ST_WorkprocedureiosOut_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/wql/ST_WorkprocedureiosOut_01.wql deleted file mode 100644 index 39898087..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/wql/ST_WorkprocedureiosOut_01.wql +++ /dev/null @@ -1,101 +0,0 @@ -[交易说明] - 交易名: 工序出库单分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.is_full TYPEAS s_string - 输入.ivt_workprocedure_id TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - a.*, - b.workprocedure_name, - c.material_name, - p1.point_name AS start_point_name, - p2.point_name AS end_point_name, - unit.unit_name - FROM - ST_IVT_workProcedureIOS a - LEFT JOIN pdm_bi_workprocedure b ON a.workprocedure_id = b.workprocedure_id - LEFT JOIN md_me_materialbase c ON c.material_id = a.material_id - LEFT JOIN sch_base_point p1 ON a.start_point_code = p1.point_code - LEFT JOIN sch_base_point p2 ON a.end_point_code = p2.point_code - LEFT JOIN md_pb_measureunit unit ON a.qty_unit_id = unit.measure_unit_id - - WHERE - a.is_delete = '0' - AND a.io_type = '1' - OPTION 输入.search <> "" - a.bill_code like 输入.search - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "2" - PAGEQUERY - SELECT - point.*, - material.material_id, - material.material_name, - point.vehicle_code AS vehicle_code111, - structivt.pcsn, - structivt.canuse_qty, - structivt.frozen_qty, - structivt.ivt_qty, - structivt.warehousing_qty, - structivt.qty_unit_id, - structivt.instorage_time, - unit.unit_name - FROM - st_ivt_structivt structivt - LEFT JOIN sch_base_point point ON point.point_id = structivt.struct_id - LEFT JOIN md_me_materialbase material ON structivt.material_id = material.material_id - LEFT JOIN md_pb_measureunit unit ON structivt.qty_unit_id = unit.measure_unit_id - WHERE - point.is_delete = '0' - AND point.lock_type = '00' - AND structivt.canuse_qty > 0 - AND point.is_used = '1' - and structivt.workprocedure_id = 输入.ivt_workprocedure_id - and structivt.material_id = 输入.material_id - ENDSELECT - ENDPAGEQUERY - ENDIF -