diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml index 066992b1d..62cc48878 100644 --- a/nladmin-system/pom.xml +++ b/nladmin-system/pom.xml @@ -15,7 +15,7 @@ 0.11.1 - 5.5.0 + 5.9.0 1.9 diff --git a/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java b/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java index 4e40be1b4..f679d3b82 100644 --- a/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java +++ b/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java @@ -1,19 +1,13 @@ package org.nl.config; -import cn.hutool.core.util.StrUtil; import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; -import org.nl.modules.mnt.util.DataTypeEnum; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; -import java.sql.DriverManager; -import java.sql.SQLException; @Configuration @Slf4j diff --git a/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java b/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java index 62c7dd6ba..0f7083a76 100644 --- a/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java +++ b/nladmin-system/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java @@ -20,6 +20,7 @@ import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; diff --git a/nladmin-system/src/main/java/org/nl/modules/common/utils/SecurityUtils.java b/nladmin-system/src/main/java/org/nl/modules/common/utils/SecurityUtils.java index 56e2a13ab..d68991b99 100644 --- a/nladmin-system/src/main/java/org/nl/modules/common/utils/SecurityUtils.java +++ b/nladmin-system/src/main/java/org/nl/modules/common/utils/SecurityUtils.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.utils.dto.CurrentUser; import org.nl.modules.system.service.dto.UserDto; import java.util.List; @@ -22,14 +23,14 @@ public class SecurityUtils { * * @return 系统用户 */ - public static UserDto getCurrentUser() { + public static CurrentUser getCurrentUser() { try { JSONObject json = (JSONObject) StpUtil.getExtra("loginInfo"); if (ObjectUtil.isNotEmpty(json)) { - return json.toBean(UserDto.class); + return json.toBean(CurrentUser.class); } } catch (Exception e) { - return new UserDto(); + return new CurrentUser(); } return null; } @@ -61,6 +62,15 @@ public class SecurityUtils { return getCurrentUser().getId(); } + /** + * 获取系统用户Id + * + * @return 系统用户Id + */ + public static Long getDeptId() { + return getCurrentUser().getUser().getDept().getId(); + } + /** * 获取当前用户权限 * diff --git a/nladmin-system/src/main/java/org/nl/modules/mnt/util/ExecuteShellUtil.java b/nladmin-system/src/main/java/org/nl/modules/mnt/util/ExecuteShellUtil.java index 58401437d..504171164 100644 --- a/nladmin-system/src/main/java/org/nl/modules/mnt/util/ExecuteShellUtil.java +++ b/nladmin-system/src/main/java/org/nl/modules/mnt/util/ExecuteShellUtil.java @@ -21,7 +21,9 @@ import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import lombok.extern.slf4j.Slf4j; -import java.io.*; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; import java.util.Vector; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzJob.java b/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzJob.java index ae1359d17..bce16045d 100644 --- a/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzJob.java +++ b/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzJob.java @@ -19,6 +19,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.nl.modules.common.base.BaseEntity; + import javax.persistence.*; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; diff --git a/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzLog.java b/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzLog.java index 047bb9212..fbdb2d1e4 100644 --- a/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzLog.java +++ b/nladmin-system/src/main/java/org/nl/modules/quartz/domain/QuartzLog.java @@ -18,6 +18,7 @@ package org.nl.modules.quartz.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.hibernate.annotations.CreationTimestamp; + import javax.persistence.*; import java.io.Serializable; import java.sql.Timestamp; diff --git a/nladmin-system/src/main/java/org/nl/modules/quartz/repository/QuartzJobRepository.java b/nladmin-system/src/main/java/org/nl/modules/quartz/repository/QuartzJobRepository.java index 4d3d542a7..a63fcf291 100644 --- a/nladmin-system/src/main/java/org/nl/modules/quartz/repository/QuartzJobRepository.java +++ b/nladmin-system/src/main/java/org/nl/modules/quartz/repository/QuartzJobRepository.java @@ -18,6 +18,7 @@ package org.nl.modules.quartz.repository; import org.nl.modules.quartz.domain.QuartzJob; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + import java.util.List; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/quartz/service/QuartzJobService.java b/nladmin-system/src/main/java/org/nl/modules/quartz/service/QuartzJobService.java index 171fe3d11..0f6658226 100644 --- a/nladmin-system/src/main/java/org/nl/modules/quartz/service/QuartzJobService.java +++ b/nladmin-system/src/main/java/org/nl/modules/quartz/service/QuartzJobService.java @@ -19,6 +19,7 @@ import org.nl.modules.quartz.domain.QuartzJob; import org.nl.modules.quartz.domain.QuartzLog; import org.nl.modules.quartz.service.dto.JobQueryCriteria; import org.springframework.data.domain.Pageable; + import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; diff --git a/nladmin-system/src/main/java/org/nl/modules/quartz/service/dto/JobQueryCriteria.java b/nladmin-system/src/main/java/org/nl/modules/quartz/service/dto/JobQueryCriteria.java index 6b2a8ed6c..2279effc9 100644 --- a/nladmin-system/src/main/java/org/nl/modules/quartz/service/dto/JobQueryCriteria.java +++ b/nladmin-system/src/main/java/org/nl/modules/quartz/service/dto/JobQueryCriteria.java @@ -17,6 +17,7 @@ package org.nl.modules.quartz.service.dto; import lombok.Data; import org.nl.modules.common.annotation.Query; + import java.sql.Timestamp; import java.util.List; diff --git a/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java b/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java index 191ac680b..389c4eb7b 100644 --- a/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java +++ b/nladmin-system/src/main/java/org/nl/modules/security/rest/AuthorizationController.java @@ -128,10 +128,10 @@ public class AuthorizationController { @ApiOperation("获取用户信息") @GetMapping(value = "/info") public ResponseEntity getUserInfo() { - UserDto currentUser = (UserDto) SecurityUtils.getCurrentUser(); + CurrentUser currentUser = SecurityUtils.getCurrentUser(); JSONObject jsonObject = new JSONObject(); jsonObject.put("roles", SecurityUtils.getCurrentUserPermissions()); - jsonObject.put("user", currentUser); + jsonObject.put("user", currentUser.getUser()); return ResponseEntity.ok(jsonObject); } diff --git a/nladmin-system/src/main/java/org/nl/modules/security/service/dto/AuthUserDto.java b/nladmin-system/src/main/java/org/nl/modules/security/service/dto/AuthUserDto.java index f678dbbe9..61d9bed5b 100644 --- a/nladmin-system/src/main/java/org/nl/modules/security/service/dto/AuthUserDto.java +++ b/nladmin-system/src/main/java/org/nl/modules/security/service/dto/AuthUserDto.java @@ -17,6 +17,7 @@ package org.nl.modules.security.service.dto; import lombok.Getter; import lombok.Setter; + import javax.validation.constraints.NotBlank; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/security/service/dto/OnlineUserDto.java b/nladmin-system/src/main/java/org/nl/modules/security/service/dto/OnlineUserDto.java index 703703216..e5468d669 100644 --- a/nladmin-system/src/main/java/org/nl/modules/security/service/dto/OnlineUserDto.java +++ b/nladmin-system/src/main/java/org/nl/modules/security/service/dto/OnlineUserDto.java @@ -18,6 +18,7 @@ package org.nl.modules.security.service.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; + import java.util.Date; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/domain/Dept.java b/nladmin-system/src/main/java/org/nl/modules/system/domain/Dept.java index 5c5695721..9a68cb5a9 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/domain/Dept.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/domain/Dept.java @@ -20,6 +20,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.nl.modules.common.base.BaseEntity; + import javax.persistence.*; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/domain/User.java b/nladmin-system/src/main/java/org/nl/modules/system/domain/User.java index 22179b1e3..b7d8d0770 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/domain/User.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/domain/User.java @@ -23,7 +23,6 @@ import org.hibernate.annotations.NotFoundAction; import org.nl.modules.common.base.BaseEntity; import javax.persistence.*; -import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/domain/vo/MenuMetaVo.java b/nladmin-system/src/main/java/org/nl/modules/system/domain/vo/MenuMetaVo.java index e7a803199..72b475c0f 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/domain/vo/MenuMetaVo.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/domain/vo/MenuMetaVo.java @@ -17,6 +17,7 @@ package org.nl.modules.system.domain.vo; import lombok.AllArgsConstructor; import lombok.Data; + import java.io.Serializable; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/repository/DeptRepository.java b/nladmin-system/src/main/java/org/nl/modules/system/repository/DeptRepository.java index a9d673191..65c58c8b5 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/repository/DeptRepository.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/repository/DeptRepository.java @@ -20,6 +20,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; + import java.util.List; import java.util.Set; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/repository/UserRepository.java b/nladmin-system/src/main/java/org/nl/modules/system/repository/UserRepository.java index 76fac5cfb..cf873aafd 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/repository/UserRepository.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/repository/UserRepository.java @@ -20,6 +20,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; + import java.util.Date; import java.util.List; import java.util.Set; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/GenCodeController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/GenCodeController.java index 853fa30c8..39ea3e8b7 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/rest/GenCodeController.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/GenCodeController.java @@ -1,15 +1,15 @@ package org.nl.modules.system.rest; +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import com.alibaba.fastjson.JSONObject; import org.nl.modules.logging.annotation.Log; import org.nl.modules.system.service.GenCodeService; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/MonitorController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/MonitorController.java index 13d726076..3852b66c2 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/rest/MonitorController.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/MonitorController.java @@ -15,14 +15,16 @@ */ package org.nl.modules.system.rest; +import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.nl.modules.system.service.MonitorService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * @author Zheng Jie diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/CodeDetailService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/CodeDetailService.java index cec92f896..8d70039fa 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/CodeDetailService.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/CodeDetailService.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject; import org.springframework.data.domain.Pageable; import java.util.Map; -import java.util.Set; public interface CodeDetailService { /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/DictDetailService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/DictDetailService.java index f15bd4236..1bc51e89b 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/DictDetailService.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/DictDetailService.java @@ -19,6 +19,7 @@ import org.nl.modules.system.domain.DictDetail; import org.nl.modules.system.service.dto.DictDetailDto; import org.nl.modules.system.service.dto.DictDetailQueryCriteria; import org.springframework.data.domain.Pageable; + import java.util.List; import java.util.Map; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/DictService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/DictService.java index 9ba30f022..76a0011b4 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/DictService.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/DictService.java @@ -19,6 +19,7 @@ import org.nl.modules.system.domain.Dict; import org.nl.modules.system.service.dto.DictDto; import org.nl.modules.system.service.dto.DictQueryCriteria; import org.springframework.data.domain.Pageable; + import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/UserService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/UserService.java index f5e276215..40ba27eea 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/UserService.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/UserService.java @@ -20,6 +20,7 @@ import org.nl.modules.system.service.dto.UserDto; import org.nl.modules.system.service.dto.UserQueryCriteria; import org.springframework.data.domain.Pageable; import org.springframework.web.multipart.MultipartFile; + import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java b/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java index 7ec348876..d03c81500 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java @@ -3,12 +3,9 @@ package org.nl.modules.system.service.convert; import cn.hutool.core.util.StrUtil; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; -import org.nl.modules.system.service.entity.RedisKeyDefine; -import org.nl.modules.system.service.vo.RedisKeyDefineRespVO; import org.nl.modules.system.service.vo.RedisMonitorRespVO; import java.util.ArrayList; -import java.util.List; import java.util.Properties; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DeptSmallDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DeptSmallDto.java index c27bbc5df..4ff0a37c1 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DeptSmallDto.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DeptSmallDto.java @@ -16,6 +16,7 @@ package org.nl.modules.system.service.dto; import lombok.Data; + import java.io.Serializable; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DictSmallDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DictSmallDto.java index e737bf6d6..ea42f8a94 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DictSmallDto.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/DictSmallDto.java @@ -17,6 +17,7 @@ package org.nl.modules.system.service.dto; import lombok.Getter; import lombok.Setter; + import java.io.Serializable; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/ParamDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/ParamDto.java index 4c4a961ad..86da40182 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/ParamDto.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/ParamDto.java @@ -1,6 +1,7 @@ package org.nl.modules.system.service.dto; import lombok.Data; + import java.io.Serializable; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/RoleSmallDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/RoleSmallDto.java index eac81ca38..150b19135 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/RoleSmallDto.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/RoleSmallDto.java @@ -16,6 +16,7 @@ package org.nl.modules.system.service.dto; import lombok.Data; + import java.io.Serializable; /** diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/ParamServiceImpl.java b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/ParamServiceImpl.java index e942c7b6d..1ebae3afb 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/ParamServiceImpl.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/ParamServiceImpl.java @@ -12,9 +12,9 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.FileUtil; import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.common.utils.dto.CurrentUser; import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.dto.ParamDto; -import org.nl.modules.system.service.dto.UserDto; import org.nl.modules.wql.core.bean.ResultBean; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; @@ -74,7 +74,7 @@ public class ParamServiceImpl implements ParamService { @Override @Transactional(rollbackFor = Exception.class) public void create(ParamDto dto) { - UserDto currentUsername = SecurityUtils.getCurrentUser(); + CurrentUser currentUsername = SecurityUtils.getCurrentUser(); Long currentId = StpUtil.getLoginIdAsLong(); String now = DateUtil.now(); @@ -98,7 +98,7 @@ public class ParamServiceImpl implements ParamService { ParamDto entity = this.findById(dto.getId()); if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - UserDto currentUsername = SecurityUtils.getCurrentUser(); + CurrentUser currentUsername = SecurityUtils.getCurrentUser(); String now = DateUtil.now(); dto.setUpdate_optid(StpUtil.getLoginIdAsLong()); diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java index 18b06affa..1d5f9d63c 100644 --- a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java @@ -8,7 +8,6 @@ import org.nl.modules.system.service.RedisService; import org.nl.modules.system.service.convert.RedisConvert; import org.nl.modules.system.service.entity.RedisKeyDefine; import org.nl.modules.system.service.entity.RedisKeyRegistry; -//import org.nl.modules.system.service.vo.IdempotentRedisDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.connection.RedisServerCommands; diff --git a/nladmin-system/src/main/java/org/nl/modules/tools/config/MultipartConfig.java b/nladmin-system/src/main/java/org/nl/modules/tools/config/MultipartConfig.java index ec352f61e..853d7f85a 100644 --- a/nladmin-system/src/main/java/org/nl/modules/tools/config/MultipartConfig.java +++ b/nladmin-system/src/main/java/org/nl/modules/tools/config/MultipartConfig.java @@ -18,6 +18,7 @@ package org.nl.modules.tools.config; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; + import javax.servlet.MultipartConfigElement; import java.io.File; diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/constant/MaterOptTypeEnum.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/constant/MaterOptTypeEnum.java new file mode 100644 index 000000000..cc20467ea --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/constant/MaterOptTypeEnum.java @@ -0,0 +1,92 @@ +package org.nl.wms.basedata.master.constant; + +import com.alibaba.fastjson.JSONObject; + +/** + * 获取物料操作类型 + */ +public enum MaterOptTypeEnum { + QBWL(1, "00", "全部物料", "('1')", ""), + BCP(2, "01", "管件半成品", "('1528555443906023424')", ""), + YCL(3, "02", "管件原材料", "('1503644349995552768')", ""), + CP(4, "03", "关键成品", "('1528555444031852544')", ""); + + + + //顺序号 + private int index; + //编码 + private String code; + //名字 + private String name; + //分类标识串 + private String class_idStr; + //描述 + private String desc; + + public static JSONObject getObj(String code) { + for (MaterOptTypeEnum item : values()) { + if (item.getCode().equals(code)) { + JSONObject json=new JSONObject(); + json.put("index",item.getIndex()); + json.put("code",item.getCode()); + json.put("name",item.getName()); + json.put("class_idStr",item.getClass_idStr()); + json.put("desc",item.getDesc()); + return json; + } + } + + return null; + + } + + + private MaterOptTypeEnum(int index, String code, String name, String class_idStr, String desc) { + this.index = index; + this.code = code; + this.name = name; + this.class_idStr = class_idStr; + this.desc = desc; + } + + public String getClass_idStr() { + return class_idStr; + } + + public void setClass_idStr(String class_idStr) { + this.class_idStr = class_idStr; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/eum/BusinessCodeEnum.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/eum/BusinessCodeEnum.java new file mode 100644 index 000000000..02a13c814 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/eum/BusinessCodeEnum.java @@ -0,0 +1,27 @@ +package org.nl.wms.basedata.master.eum; + +public enum BusinessCodeEnum { + STOCK_IN(1,"10","入库"), + STOCK_OUT(2,"20","出库"), + QUALITY_INSPECTOR(3,"30","质检"), + CHEMISTRY(4,"40","理化"); + + + private int index; + private String name; + private String code; + + private BusinessCodeEnum(int index, String code, String name) { + this.index = index; + this.code = code; + this.name = name; + } + + public String getName() { + return name; + } + + public String getCode() { + return code; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/eum/RecordStatusEnum.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/eum/RecordStatusEnum.java new file mode 100644 index 000000000..bedc36a75 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/eum/RecordStatusEnum.java @@ -0,0 +1,28 @@ +package org.nl.wms.basedata.master.eum; + +public enum RecordStatusEnum { + CREATE(1,"01","生成"), + SET_TRAY(2,"02","组盘"), + STOCK_IN(3,"03","入库"), + STOCK_OUT(4,"04","出库"), + STOCK_STATE_IN(5,"05","入立库"); + + + private int index; + private String name; + private String code; + + private RecordStatusEnum(int index, String code, String name) { + this.index = index; + this.code = code; + this.name = name; + } + + public String getName() { + return name; + } + + public String getCode() { + return code; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/manage/AbstructMaterialType.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/manage/AbstructMaterialType.java new file mode 100644 index 000000000..83f07f1c8 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/manage/AbstructMaterialType.java @@ -0,0 +1,8 @@ +package org.nl.wms.basedata.master.manage; + +import java.util.HashSet; +import java.util.Set; + +public class AbstructMaterialType { + private Set materialTypeIds = new HashSet<>(); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/ClassstandardController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/ClassstandardController.java new file mode 100644 index 000000000..7ab7de4b6 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/ClassstandardController.java @@ -0,0 +1,124 @@ + +package org.nl.wms.basedata.master.rest; + + +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.master.service.dto.ClassstandardDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author zhouz + * @date 2021-12-07 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "基础类别管理") +@RequestMapping("/api/Classstandard") +@Slf4j +public class ClassstandardController { + + private final ClassstandardService ClassstandardService; + + @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); + } + + @PostMapping + @Log("新增基础类别") + @ApiOperation("新增基础类别") + //@PreAuthorize("@el.check('Classstandard:add')") + public ResponseEntity create(@Validated @RequestBody ClassstandardDto dto) { + ClassstandardService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改基础类别") + @ApiOperation("修改基础类别") + //@PreAuthorize("@el.check('Classstandard:edit')") + public ResponseEntity update(@Validated @RequestBody ClassstandardDto dto) { + ClassstandardService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除基础类别") + @ApiOperation("删除基础类别") + //@PreAuthorize("@el.check('Classstandard:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + ClassstandardService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/loadClass") + @Log("查询基础类型") + @ApiOperation("查询基础类型") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity query(@RequestParam Map whereJson) { + return new ResponseEntity<>(ClassstandardService.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); + } + + + @GetMapping("/queryClassById") + @Log("查询分类基础列表") + @ApiOperation("查询分类基础列表") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity queryClassById(@RequestParam Map whereJson) { + return new ResponseEntity<>(ClassstandardService.queryClassById(whereJson), HttpStatus.OK); + } + + @GetMapping("/getClassTable") + @Log("查询物料基础类型") + @ApiOperation("查询物料基础类型") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity queryClassTable(@RequestParam Map whereJson,Pageable page) { + return new ResponseEntity<>(ClassstandardService.queryClassTable(whereJson,page), HttpStatus.OK); + } + + @ApiOperation("查询类别:根据ID获取同级与上级数据") + @PostMapping("/superior") + //@PreAuthorize("@el.check('user:list','dept:list')") + public ResponseEntity getSuperior(@RequestBody Long id) { + JSONObject jo = WQLObject.getWQLObject("MD_PB_ClassStandard").query("class_id = '" + id + "'").uniqueResult(0); + JSONArray maters = ClassstandardService.getSuperior(jo, new JSONArray()); + return new ResponseEntity<>(ClassstandardService.buildTree(maters), HttpStatus.OK); + } + + @GetMapping("/getType") + @Log("获取分类类型") + @ApiOperation("获取分类类型") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity getType(@RequestParam Map whereJson) { + String type_id = MapUtil.getStr(whereJson, "type_id"); + int level = MapUtil.getInt(whereJson, "level"); + return new ResponseEntity<>(ClassstandardService.getType(type_id,level), HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/CustomerbaseController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/CustomerbaseController.java new file mode 100644 index 000000000..dd5f04b87 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/CustomerbaseController.java @@ -0,0 +1,67 @@ + +package org.nl.wms.basedata.master.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.master.service.CustomerbaseService; +import org.nl.wms.basedata.master.service.dto.CustomerbaseDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author ldjun + * @date 2021-12-06 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "客户基础表管理") +@RequestMapping("/api/customerbase") +@Slf4j +public class CustomerbaseController { + + private final CustomerbaseService customerbaseService; + + @GetMapping + @Log("查询客户基础表") + @ApiOperation("查询客户基础表") + //@PreAuthorize("@el.check('customerbase:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(customerbaseService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增客户基础表") + @ApiOperation("新增客户基础表") + //@PreAuthorize("@el.check('customerbase:add')") + public ResponseEntity create(@Validated @RequestBody CustomerbaseDto dto) { + customerbaseService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改客户基础表") + @ApiOperation("修改客户基础表") + //@PreAuthorize("@el.check('customerbase:edit')") + public ResponseEntity update(@Validated @RequestBody CustomerbaseDto dto) { + customerbaseService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除客户基础表") + @ApiOperation("删除客户基础表") + //@PreAuthorize("@el.check('customerbase:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + customerbaseService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java new file mode 100644 index 000000000..b25d5516b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java @@ -0,0 +1,104 @@ + +package org.nl.wms.basedata.master.rest; + + +import cn.hutool.core.map.MapUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; +import org.nl.wms.basedata.master.service.MaterialbaseService; +import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author zhouz + * @date 2021-12-07 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "物料管理") +@RequestMapping("/api/Materialbase") +@Slf4j +public class MaterialbaseController { + + private final MaterialbaseService materialBaseService; + + @GetMapping + @Log("查询物料") + @ApiOperation("查询物料") + //@PreAuthorize("@el.check('Materialbase:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(materialBaseService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增物料") + @ApiOperation("新增物料") + //@PreAuthorize("@el.check('Materialbase:add')") + public ResponseEntity create(@Validated @RequestBody MaterialbaseDto dto) { + materialBaseService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改物料") + @ApiOperation("修改物料") + //@PreAuthorize("@el.check('Materialbase:edit')") + public ResponseEntity update(@Validated @RequestBody MaterialbaseDto dto) { + materialBaseService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除物料") + @ApiOperation("删除物料") + //@PreAuthorize("@el.check('Materialbase:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + materialBaseService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @Log("判断物料操作类型") + @ApiOperation("判断物料操作类型") + @PostMapping("/isAlongMaterType") + public ResponseEntity isAlongMaterType(@RequestBody Map map) { + String materOpt_code = MapUtil.getStr(map, "materOpt_code"); + String material_id = MapUtil.getStr(map, "material_id"); + String material_type_id = MapUtil.getStr(map, "material_type_id"); + return new ResponseEntity<>(materialBaseService.isAlongMaterType(materOpt_code, material_id, material_type_id), HttpStatus.OK); + } + + @Log("查询物料操作类型") + @ApiOperation("查询物料操作类型") + @PostMapping("/getMaterOptType") + public ResponseEntity getMaterOptType(@RequestBody Map map) { + String materOpt_code = MapUtil.getStr(map, "materOpt_code"); + return new ResponseEntity<>(MaterOptTypeEnum.getObj(materOpt_code), HttpStatus.OK); + } + + @PostMapping("/synchronize") + @Log("物料同步") + @ApiOperation("物料同步") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity synchronize(@RequestBody Map whereJson) { + materialBaseService.synchronize(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("查询产品系列类型") + @ApiOperation("查询产品系列类型") + @GetMapping("/getProductSeries") + public ResponseEntity getProductSeries() { + return new ResponseEntity<>(materialBaseService.getProductSeries("1527572574832300032"), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/StoragevehicleinfoController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/StoragevehicleinfoController.java new file mode 100644 index 000000000..84bf5d9f3 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/StoragevehicleinfoController.java @@ -0,0 +1,85 @@ + +package org.nl.wms.basedata.master.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.master.service.StoragevehicleinfoService; +import org.nl.wms.basedata.master.service.dto.StoragevehicleinfoDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author ldjun +* @date 2021-12-09 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "载具管理") +@RequestMapping("/api/storagevehicleinfo") +@Slf4j +public class StoragevehicleinfoController { + + private final StoragevehicleinfoService storagevehicleinfoService; + + @GetMapping + @Log("查询载具") + @ApiOperation("查询载具") + //@PreAuthorize("@el.check('mdPbStoragevehicleinfo:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(storagevehicleinfoService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增载具") + @ApiOperation("新增载具") + //@PreAuthorize("@el.check('mdPbStoragevehicleinfo:add')") + public ResponseEntity create(@RequestBody Map map){ + return new ResponseEntity<>(storagevehicleinfoService.create(map),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改载具") + @ApiOperation("修改载具") + //@PreAuthorize("@el.check('mdPbStoragevehicleinfo:edit')") + public ResponseEntity update(@Validated @RequestBody StoragevehicleinfoDto dto){ + storagevehicleinfoService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除载具") + @ApiOperation("删除载具") + //@PreAuthorize("@el.check('mdPbStoragevehicleinfo:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + storagevehicleinfoService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + //@PreAuthorize("@el.check('store:edit')") + public ResponseEntity changeActive(@RequestBody JSONObject json) { + storagevehicleinfoService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @GetMapping("/getVehicle/{code}") + @Log("获取起始载具号") + @ApiOperation("获取起始载具号") + //@PreAuthorize("@el.check('store:edit')") + public ResponseEntity getVehicle(@PathVariable String code) { + JSONObject json = storagevehicleinfoService.getVehicle(code); + return new ResponseEntity<>(json,HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/SupplierbaseController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/SupplierbaseController.java new file mode 100644 index 000000000..59d7f48cf --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/SupplierbaseController.java @@ -0,0 +1,64 @@ + +package org.nl.wms.basedata.master.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.master.service.SupplierbaseService; +import org.nl.wms.basedata.master.service.dto.SupplierbaseDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author zhouz + * @date 2021-12-06 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "供应商管理") +@RequestMapping("/api/supplierbase") +@Slf4j +public class SupplierbaseController { + + private final SupplierbaseService supplierbaseService; + + @GetMapping + @Log("查询供应商") + @ApiOperation("查询供应商") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(supplierbaseService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增供应商") + @ApiOperation("新增供应商") + public ResponseEntity create(@Validated @RequestBody SupplierbaseDto dto) { + supplierbaseService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改供应商") + @ApiOperation("修改供应商") + public ResponseEntity update(@Validated @RequestBody SupplierbaseDto dto) { + supplierbaseService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除供应商") + @ApiOperation("删除供应商") + //@PreAuthorize("@el.check('mdCsSupplierbase:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + supplierbaseService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/UnitController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/UnitController.java new file mode 100644 index 000000000..d53b421cc --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/UnitController.java @@ -0,0 +1,74 @@ + +package org.nl.wms.basedata.master.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.master.service.UnitService; +import org.nl.wms.basedata.master.service.dto.UnitDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author loujf +* @date 2021-12-07 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "计量单位管理") +@RequestMapping("/api/mdPbMeasureunit") +@Slf4j +public class UnitController { + private final UnitService unitService; + + @GetMapping + @Log("查询计量单位") + @ApiOperation("查询计量单位") + //@PreAuthorize("@el.check('Unit:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(unitService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增计量单位") + @ApiOperation("新增计量单位") + //@PreAuthorize("@el.check('Unit:add')") + public ResponseEntity create(@Validated @RequestBody UnitDto dto){ + unitService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改计量单位") + @ApiOperation("修改计量单位") + //@PreAuthorize("@el.check('Unit:edit')") + public ResponseEntity update(@Validated @RequestBody UnitDto dto){ + unitService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除计量单位") + @ApiOperation("删除计量单位") + //@PreAuthorize("@el.check('Unit:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + unitService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getUnit") + @Log("查询单位下拉框") + @ApiOperation("查询仓库下拉框") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity queryUnit(@RequestParam Map whereJson) { + return new ResponseEntity<>(unitService.getUnit(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/ClassstandardService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/ClassstandardService.java new file mode 100644 index 000000000..6960a8550 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/ClassstandardService.java @@ -0,0 +1,127 @@ + +package org.nl.wms.basedata.master.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.master.service.dto.ClassstandardDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author zhouz + * @description 服务接口 + * @date 2021-12-07 + **/ +public interface ClassstandardService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param class_id ID + * @return Classstandard + */ + ClassstandardDto findById(String class_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Classstandard + */ + ClassstandardDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(ClassstandardDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(ClassstandardDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + JSONObject loadClass(Map whereJson); + + JSONArray getSuperior(JSONObject jo, JSONArray ja); + + JSONObject buildTree(JSONArray ja); + + @SuppressWarnings("unchecked") + JSONObject queryClassBycode(Map whereJson); + + JSONObject queryClassById(Map whereJson); + + JSONObject queryClassTable(Map whereJson, Pageable page); + + /** + * @param type_id 类型标识 + * @param level 级别 + * @return + */ + JSONObject getType(String type_id, int level); + + /** + * 获取当前节点的所有子类节点集合数据 + * + * @param class_id + * @return + */ + Set getChildIdSet(String class_id); + + /** + * 获取查询条件的所有子节点集合 + * + * @param class_idStr + * @return + */ + Set getAllChildIdSet(String class_idStr); + + /** + * 获取当前节点的所有子类节点集合串,用于拼接SQL(in) + * + * @param class_id + * @return + */ + String getChildIdStr(String class_id); + + /** + * 获取所有节点的子节点的ID串 + * + * @param class_idStr + * @return + */ + String getAllChildIdStr(String class_idStr); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/CustomerbaseService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/CustomerbaseService.java new file mode 100644 index 000000000..67bf4c284 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/CustomerbaseService.java @@ -0,0 +1,64 @@ + +package org.nl.wms.basedata.master.service; + +import org.nl.wms.basedata.master.service.dto.CustomerbaseDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @description 服务接口 + * @author ldjun + * @date 2021-12-06 + **/ +public interface CustomerbaseService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param cust_id ID + * @return Customerbase + */ + CustomerbaseDto findById(Long cust_id); + + /** + * 根据编码查询 + * @param code code + * @return Customerbase + */ + CustomerbaseDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(CustomerbaseDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(CustomerbaseDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java new file mode 100644 index 000000000..2f01466b0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java @@ -0,0 +1,97 @@ + +package org.nl.wms.basedata.master.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author zhouz + * @description 服务接口 + * @date 2021-12-07 + **/ +public interface MaterialbaseService { + + /** + * 查询数据分页 + * + * @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 Materialbase + */ + MaterialbaseDto findById(Long material_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Materialbase + */ + MaterialbaseDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(MaterialbaseDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(MaterialbaseDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 根据物料标识或类型判断物料类型:对应MaterOptTypeEnum类定义的类型 + * + * @param material_id + * @param material_type_id + * @param materOpt_code + * @return + */ + boolean isAlongMaterType(String materOpt_code, String material_id, String material_type_id); + + /** + * 根据编码获取物料操作类型 + * + * @param materOpt_code MaterOptTypeEnum + * @return + */ + JSONObject getMaterOptType(String materOpt_code); + + void synchronize(Map whereJson); + + JSONArray getProductSeries(String parent_class_id); + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/StoragevehicleinfoService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/StoragevehicleinfoService.java new file mode 100644 index 000000000..61ace9d97 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/StoragevehicleinfoService.java @@ -0,0 +1,78 @@ + +package org.nl.wms.basedata.master.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.master.service.dto.StoragevehicleinfoDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author ldjun +* @date 2021-12-09 +**/ +public interface StoragevehicleinfoService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param storagevehicle_id ID + * @return MdPbStoragevehicleinfo + */ + StoragevehicleinfoDto findById(Long storagevehicle_id); + + /** + * 根据编码查询 + * @param code code + * @return MdPbStoragevehicleinfo + */ + StoragevehicleinfoDto findByCode(String code); + + + /** + * 创建 + * @param map / + */ + JSONArray create(Map map); + + /** + * 编辑 + * @param dto / + */ + void update(StoragevehicleinfoDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 多修改启用状态 + * @param json / + */ + void changeActive(JSONObject json); + + /** + * 获取起始载具号 + * @param code / + */ + JSONObject getVehicle(String code); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/SupplierbaseService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/SupplierbaseService.java new file mode 100644 index 000000000..4160412bb --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/SupplierbaseService.java @@ -0,0 +1,64 @@ + +package org.nl.wms.basedata.master.service; + +import org.nl.wms.basedata.master.service.dto.SupplierbaseDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author zhouz +* @date 2021-12-06 +**/ +public interface SupplierbaseService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param supp_id ID + * @return MdCsSupplierbase + */ + SupplierbaseDto findById(Long supp_id); + + /** + * 根据编码查询 + * @param code code + * @return MdCsSupplierbase + */ + SupplierbaseDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(SupplierbaseDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(SupplierbaseDto dto); + + /**c + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/UnitService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/UnitService.java new file mode 100644 index 000000000..a326fc5fe --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/UnitService.java @@ -0,0 +1,68 @@ + +package org.nl.wms.basedata.master.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.master.service.dto.UnitDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author loujf +* @date 2021-12-07 +**/ +public interface UnitService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param measure_unit_id ID + * @return Unit + */ + UnitDto findById(Long measure_unit_id); + + /** + * 根据编码查询 + * @param code code + * @return Unit + */ + UnitDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(UnitDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(UnitDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(String[] ids); + + JSONObject getUnit(Map whereJson); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/BusinesstypematerialDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/BusinesstypematerialDto.java new file mode 100644 index 000000000..1d25b2e80 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/BusinesstypematerialDto.java @@ -0,0 +1,69 @@ +package org.nl.wms.basedata.master.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author Liuxy +* @date 2022-01-19 +**/ +@Data +public class BusinesstypematerialDto implements Serializable { + + /** 业务明细标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long business_id; + + /** 业务类型编码 */ + private String business_type_code; + + /** 业务类型名称 */ + private String business_type_name; + + /** 单据类型编码 */ + private String inv_type_code; + + /** 单据类型名称 */ + private String inv_type_name; + + /** 物料分类标识 */ + private String material_type_id; + + /** 物料分类编码 */ + private String material_type_code; + + /** 说明 */ + private String remark; + + /** 是否启用 */ + private String is_used; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; + + /** 是否删除 */ + private String is_delete; + + /** 外部标识 */ + private String ext_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/ClassstandardDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/ClassstandardDto.java new file mode 100644 index 000000000..50141143b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/ClassstandardDto.java @@ -0,0 +1,61 @@ +package org.nl.wms.basedata.master.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-07 + **/ +@Data +public class ClassstandardDto implements Serializable { + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long class_id; + + private String base_data_type; + + private String path_code; + + private String class_code; + + private String long_class_code; + + private String class_name; + + private String class_desc; + + private Long parent_class_id; + + private String is_leaf; + + private BigDecimal sub_count; + + private String is_modify; + + private String is_delete; + + private String class_level; + + private String ext_id; + + private String ext_parent_id; + + private Long create_id; + + private String create_name; + + private String create_time; + + private Long update_optid; + + private String update_optname; + + private String update_time; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/CustomerbaseDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/CustomerbaseDto.java new file mode 100644 index 000000000..3c84156fa --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/CustomerbaseDto.java @@ -0,0 +1,192 @@ +package org.nl.wms.basedata.master.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author ldjun + * @description / + * @date 2021-12-06 + **/ +@Data +public class CustomerbaseDto implements Serializable { + /** 客户标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long cust_id; + + /** + * 客户编码 + */ + private String cust_code; + + /** + * 客户名称 + */ + private String cust_name; + + /** + * 客户简称 + */ + private String cust_simple_name; + + /** + * 国家 + */ + private String country; + + /** + * 省份 + */ + private String state; + + /** + * 城市 + */ + private String city; + + /** + * 传真 + */ + private String faxnumber; + + /** + * 邮箱 + */ + private String webSite; + + /** + * 法人代表 + */ + private String jurid_name; + + /** + * 税务登记号 + */ + private String tax_no; + + /** + * 工商注册号 + */ + private String register_no; + + /** + * 经营许可证号 + */ + private String manage_lice_no; + + /** + * 营业执照 + */ + private String busi_char_name; + + /** + * 行政区划 + */ + private Long area_id; + + /** + * 邮政编码 + */ + private String zip_code; + + /** + * 公司电话 + */ + private String corp_tele_no; + + /** + * 公司地址 + */ + private String corp_address; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 启用时间 + */ + private String is_used_time; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 外部标识 + */ + private String ext_id; + + /** + * 备注 + */ + private String remark; + + /** + * 分类标识 + */ + private Long class_id; + + /** + * 分类编码 + */ + private String class_code; + + /** + * 分类名称 + */ + private String class_name; + + /** + * 子卷打印模板号 + */ + private String zj_print_no; + + /** + * 包装打印模板号 + */ + private String bz_print_no; + + /** + * 送货单打印模板号 + */ + private String shd_print_no; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/EndrealsemimaterialDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/EndrealsemimaterialDto.java new file mode 100644 index 000000000..221b61122 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/EndrealsemimaterialDto.java @@ -0,0 +1,45 @@ +package org.nl.wms.basedata.master.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author geng by +* @date 2022-05-31 +**/ +@Data +public class EndrealsemimaterialDto implements Serializable { + + /** 关系标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long relation_id; + + /** 成品标识 */ + private Long end_material_id; + + /** 半成品标识 */ + private Long semi_material_id; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/MaterialParametersDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/MaterialParametersDto.java new file mode 100644 index 000000000..6ebacb2b1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/MaterialParametersDto.java @@ -0,0 +1,86 @@ +package org.nl.wms.basedata.master.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-07 +**/ +@Data + +public class MaterialParametersDto implements Serializable { + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long material_id; + + /** 物料编码 */ + private String material_code; + + /** 物料名称 */ + private String material_name; + + private String material_spec; + + private String material_model; + + private String english_name; + + private Long base_unit_id; + + private String approve_fileno; + + private String print_no; + + /** 物料分类 */ + private Long material_type_id; + + + private Long len_unit_id; + + private BigDecimal length; + + private BigDecimal width; + + private BigDecimal height; + + /** 计量单位 */ + private Long weight_unit_id; + + private BigDecimal gross_weight; + + private BigDecimal net_weight; + + private Long cubage_unit_id; + + private BigDecimal cubage; + + private Long create_id; + + private String create_name; + + private String create_time; + + private Long update_optid; + + private String update_optname; + + private String update_time; + + private String is_used_time; + + /** 是否启用 */ + private String is_used; + + private String is_delete; + + private String ext_id; + + private String material_height_type; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/MaterialbaseDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/MaterialbaseDto.java new file mode 100644 index 000000000..ce3519244 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/MaterialbaseDto.java @@ -0,0 +1,105 @@ +package org.nl.wms.basedata.master.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; + +/** + * @author zhouz + * @description / + * @date 2021-12-07 + **/ +@Data +public class MaterialbaseDto implements Serializable { + + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long material_id; + + /** + * 物料编码 + */ + private String material_code; + + /** + * 物料名称 + */ + private String material_name; + + private String material_spec; + + private String material_model; + + private String english_name; + + private long base_unit_id; + + private long assist_unit_id; + private String base_unit_name; + + private String approve_fileno; + + private String print_no; + + /** + * 物料分类 + */ + private Long material_type_id; + + private Long len_unit_id; + + private BigDecimal length; + + private BigDecimal width; + + private BigDecimal height; + + /** + * 计量单位 + */ + private Long weight_unit_id; + + private BigDecimal gross_weight; + + private BigDecimal net_weight; + + private Long cubage_unit_id; + + private BigDecimal cubage; + + private Long create_id; + + private String create_name; + + private String create_time; + + private Long update_optid; + + private String update_optname; + + private String update_time; + + private String is_used_time; + + /** + * 是否启用 + */ + private String is_used; + + private String is_delete; + + private String ext_id; + + private String material_height_type; + + private Long ass_unit_id; + + private Long product_series; + + private Integer standing_time; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/SemirealrawmaterialDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/SemirealrawmaterialDto.java new file mode 100644 index 000000000..316588d90 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/SemirealrawmaterialDto.java @@ -0,0 +1,45 @@ +package org.nl.wms.basedata.master.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author geng by +* @date 2022-05-31 +**/ +@Data +public class SemirealrawmaterialDto implements Serializable { + + /** 关系标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long relation_id; + + /** 半成品标识 */ + private Long semi_material_id; + + /** 原材料标识 */ + private Long raw_material_id; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/StoragevehicleinfoDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/StoragevehicleinfoDto.java new file mode 100644 index 000000000..171d9149c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/StoragevehicleinfoDto.java @@ -0,0 +1,61 @@ +package org.nl.wms.basedata.master.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 ldjun +* @date 2021-12-09 +**/ +@Data +public class StoragevehicleinfoDto implements Serializable { + + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long storagevehicle_id; + + private String storagevehicle_code; + + private String storagevehicle_name; + + private String one_code; + + private String two_code; + + private String rfid_code; + + private Long create_id; + + private String create_name; + + private String create_time; + + private Long update_optid; + + private String update_optname; + + private String update_time; + + private String is_delete; + + private String is_used; + + private String storagevehicle_type; + + private BigDecimal vehicle_width; + + private BigDecimal vehicle_long; + + private BigDecimal vehicle_height; + + private String overstruct_type; + + private BigDecimal occupystruct_qty; + + private String ext_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/SupplierbaseDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/SupplierbaseDto.java new file mode 100644 index 000000000..57fb0b233 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/SupplierbaseDto.java @@ -0,0 +1,102 @@ +package org.nl.wms.basedata.master.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; + +/** + * @author zhouz + * @description / + * @date 2021-12-06 + **/ +@Data +public class SupplierbaseDto implements Serializable { + /** 供应商标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long supp_id; + + /** 供应商编码 */ + private String supp_code; + + /** 供应商名称 */ + private String supp_name; + + /** 法人代表 */ + private String jurid_name; + + /** 税务登记号 */ + private String tax_no; + + /** 工商注册号 */ + private String register_no; + + /** 经营许可证号 */ + private String manage_lice_no; + + /** 营业执照 */ + private String busi_char_name; + + /** 行政区划 */ + private Long area_id; + + /** 邮政编码 */ + private String zip_code; + + /** 公司电话 */ + private String corp_tele_no; + + /** 公司地址 */ + private String corp_address; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; + + /** 启用时间 */ + private String is_used_time; + + /** 是否启用 */ + private String is_used; + + /** 是否删除 */ + private String is_delete; + + /** 外部标识 */ + private String ext_id; + + /** 条码打印起始值 */ + private String barcode_print; + + /** 备注 */ + private String remark; + + /** 分类标识 */ + private Long class_id; + + /** 分类编码 */ + private String class_code; + + /** 分类名称 */ + private String class_name; + + /** 资金计划履约天数 */ + private BigDecimal honour_days; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/UnitDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/UnitDto.java new file mode 100644 index 000000000..7168b6ec4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/dto/UnitDto.java @@ -0,0 +1,41 @@ +package org.nl.wms.basedata.master.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author loujf +* @date 2021-12-07 +**/ +@Data +public class UnitDto implements Serializable { + + private Long measure_unit_id; + + private String unit_code; + + private String unit_name; + + private BigDecimal qty_precision; + + private String is_used; + + private String create_id; + + private String create_name; + + private String create_time; + + private String update_optid; + + private String update_optname; + + private String update_time; + + private String is_delete; + + private String ext_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java new file mode 100644 index 000000000..6578e4e90 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/ClassstandardServiceImpl.java @@ -0,0 +1,555 @@ + +package org.nl.wms.basedata.master.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 cn.hutool.db.Db; +import cn.hutool.db.Entity; +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.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.master.service.dto.ClassstandardDto; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.sql.DataSource; +import java.math.BigDecimal; +import java.sql.SQLException; +import java.util.*; + +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-07 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class ClassstandardServiceImpl implements ClassstandardService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + String base_data_type = (String) whereJson.get("base_data_type"); + String where = ""; + if (!StrUtil.isEmpty(base_data_type)) { + where = "AND base_data_type = '" + base_data_type + "'"; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "(parent_class_id is null OR parent_class_id = '0') AND is_delete = '0'" + where + "", "update_time desc"); + final JSONObject json = rb.pageResult(); + JSONArray ja = json.getJSONArray("content"); + JSONArray new_ja = new JSONArray(); + for (int i = 0; i < ja.size(); i++) { + JSONObject mater_jo = ja.getJSONObject(i); + if (mater_jo.getInteger("sub_count") > 0) { + mater_jo.put("hasChildren", true); + mater_jo.put("leaf", false); + } else { + mater_jo.put("hasChildren", false); + mater_jo.put("leaf", true); + } + mater_jo.put("id", mater_jo.getString("class_id")); + mater_jo.put("label", mater_jo.getString("class_name")); + new_ja.add(mater_jo); + } + json.put("content", new_ja); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(ClassstandardDto.class); + return list; + } + + @Override + public ClassstandardDto findById(String class_id) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONObject json = wo.query("class_id = '" + class_id + "'").uniqueResult(0); + final ClassstandardDto obj = json.toJavaObject(ClassstandardDto.class); + return obj; + } + + @Override + public ClassstandardDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONObject json = wo.query("class_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final ClassstandardDto obj = json.toJavaObject(ClassstandardDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(ClassstandardDto dto) { + String class_code = dto.getClass_code(); + ClassstandardDto classstandardDto = this.findByCode(class_code); + if (classstandardDto != null && classstandardDto.getIs_delete().equals("0") && dto.getBase_data_type().equals(classstandardDto.getBase_data_type())) { + throw new BadRequestException("存在相同的基础类别编号"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setClass_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setIs_leaf("1"); + dto.setClass_level(Math.ceil(dto.getClass_code().length() / 2.0) + ""); + dto.setSub_count(new BigDecimal(0)); + dto.setPath_code(dto.getClass_code()); + dto.setLong_class_code(dto.getClass_code()); + + if (StrUtil.equals(dto.getBase_data_type(), "03")) { + dto.setIs_modify("0"); + } + + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + + ///更新节点 + if (dto.getParent_class_id() != null) { + updateSubCnt(dto.getParent_class_id()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(ClassstandardDto dto) { + ClassstandardDto entity = this.findById(dto.getClass_id() + ""); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String class_code = dto.getClass_code(); + ClassstandardDto classstandardDto = this.findByCode(class_code); + if (classstandardDto != null && !dto.getClass_id().equals(classstandardDto.getClass_id()) && classstandardDto.getIs_delete().equals("0") && dto.getBase_data_type().equals(classstandardDto.getBase_data_type())) { + throw new BadRequestException("存在相同的供应商编号"); + } + + Long oldPid = findById(dto.getClass_id() + "").getParent_class_id(); + Long newPid = dto.getParent_class_id(); + + if (dto.getParent_class_id() != null && dto.getClass_id().equals(dto.getParent_class_id())) { + throw new BadRequestException("上级不能为自己"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + + //更新父节点中子节点数目 + updateSubCnt(oldPid); + updateSubCnt(newPid); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + for (Long class_id : ids) { + JSONObject param = new JSONObject(); + param.put("class_id", String.valueOf(class_id)); + ClassstandardDto classstandardDto = findById(class_id + ""); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + + JSONArray child_rows = wo.query("parent_class_id = '" + String.valueOf(class_id) + "'").getResultJSONArray(0); + if (child_rows.size() > 0) { + Long[] child_ids = new Long[child_rows.size()]; + for (int i = 0; i < child_rows.size(); i++) { + JSONObject child_row = child_rows.getJSONObject(i); + Long id = child_row.getLong + ("class_id"); + child_ids[i] = id; + } + this.deleteAll(child_ids); + } + updateSubCnt(classstandardDto.getParent_class_id()); + } + } + + @Override + public JSONObject loadClass(Map whereJson) { + JSONObject jo = new JSONObject(); + JSONArray ja = new JSONArray(); + String pid = (String) whereJson.get("pid"); + String base_data_type = (String) whereJson.get("base_data_type"); + String where = ""; + if (!StrUtil.isEmpty(base_data_type)) { + where = "AND base_data_type = '" + base_data_type + "'"; + } + if (pid == null || pid.equals("0")) { + ja = WQLObject.getWQLObject("MD_PB_ClassStandard").query("(parent_class_id = '0' OR parent_class_id is null) and is_delete = '0' " + where + " order by class_id").getResultJSONArray(0); + } else { + ja = WQLObject.getWQLObject("MD_PB_ClassStandard").query("parent_class_id = '" + pid + "' AND is_delete = '0'" + where + " order by class_id").getResultJSONArray(0); + } + for (int i = 0; i < ja.size(); i++) { + JSONObject mater_jo = ja.getJSONObject(i); + if (mater_jo.getInteger("sub_count") > 0) { + mater_jo.put("hasChildren", true); + mater_jo.put("leaf", false); + } else { + mater_jo.put("hasChildren", false); + mater_jo.put("leaf", true); + } + mater_jo.put("id", mater_jo.get("class_id")); + mater_jo.put("label", mater_jo.getString("class_name")); + mater_jo.put("create_user_name", mater_jo.getString("create_name")); + mater_jo.put("update_user_name", mater_jo.getString("update_optname")); + } + jo.put("content", ja); + return jo; + } + + @Override + public JSONArray getSuperior(JSONObject jo, JSONArray ja) { + String base_data_type=jo.getString("base_data_type"); + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + if (StrUtil.isEmpty(jo.getString("parent_class_id")) || jo.getString("parent_class_id").equals("0")) { + JSONArray null_pids = new JSONArray(); + if (jo.getString("base_data_type").equals(base_data_type)) { + null_pids = wo.query("(parent_class_id = '0' OR parent_class_id is null) and is_delete = '0' and base_data_type = '"+base_data_type+"'").getResultJSONArray(0); + } else { + null_pids = wo.query("(parent_class_id = '0' OR parent_class_id is null) and is_delete = '0'").getResultJSONArray(0); + } + + for (int m = 0; m < null_pids.size(); m++) { + JSONObject null_pid = null_pids.getJSONObject(m); + ja.add(null_pid); + } + return ja; + } + JSONArray pid_rows = wo.query("parent_class_id = '" + jo.getString("parent_class_id") + "'").getResultJSONArray(0); + for (int n = 0; n < pid_rows.size(); n++) { + JSONObject pid_row = pid_rows.getJSONObject(n); + ja.add(pid_row); + } + JSONObject id_row = wo.query("class_id = '" + jo.getString("parent_class_id") + "'").uniqueResult(0); + return getSuperior(id_row, ja); + } + + @Override + public JSONObject buildTree(JSONArray ja) { + Set trees = new LinkedHashSet<>(); + Set maters = new LinkedHashSet<>(); + List mater_name = new LinkedList<>(); + for (int i = 0; i < ja.size(); i++) { + JSONObject jo = ja.getJSONObject(i); + mater_name.add(jo.getString("class_name")); + } + boolean isChild; + for (int m = 0; m < ja.size(); m++) { + JSONObject jo1 = ja.getJSONObject(m); + isChild = false; + if (jo1.getString("parent_class_id").equals("0") || StrUtil.isEmpty(jo1.getString("parent_class_id"))) { + jo1.put("id", jo1.getString("class_id")); + jo1.put("label", jo1.getString("class_name")); + if (jo1.getInteger("sub_count") > 0) { + jo1.put("hasChildren", true); + jo1.put("leaf", false); + } else { + jo1.put("hasChildren", false); + jo1.put("leaf", true); + } + trees.add(jo1); + } + for (int n = 0; n < ja.size(); n++) { + JSONObject jo2 = ja.getJSONObject(n); + if (!jo2.getString("class_id").equals("0") && jo1.getString("class_id").equals(jo2.getString("parent_class_id"))) { + isChild = true; + if (jo1.getJSONArray("children") == null) { + jo1.put("children", new JSONArray()); + } + JSONArray child_ja = jo1.getJSONArray("children"); + jo2.put("id", jo2.getString("class_id")); + jo2.put("label", jo2.getString("class_name")); + if (jo2.getInteger("sub_count") > 0) { + jo2.put("hasChildren", true); + jo2.put("leaf", false); + } else { + jo2.put("hasChildren", false); + jo2.put("leaf", true); + } + child_ja.add(jo2); + } + } + if (isChild) { + jo1.put("id", jo1.getString("class_id")); + jo1.put("label", jo1.getString("class_name")); + if (jo1.getInteger("sub_count") > 0) { + jo1.put("hasChildren", true); + jo1.put("leaf", false); + } else { + jo1.put("hasChildren", false); + jo1.put("leaf", true); + } + maters.add(jo1); + } else if (!jo1.getString("class_id").equals("0") && !mater_name.contains(jo1.getString("material_type_name"))) { + jo1.put("id", jo1.getString("class_id")); + jo1.put("label", jo1.getString("class_name")); + if (jo1.getInteger("sub_count") > 0) { + jo1.put("hasChildren", true); + jo1.put("leaf", false); + } else { + jo1.put("hasChildren", false); + jo1.put("leaf", true); + } + maters.add(jo1); + } + } + if (maters.size() == 0) { + maters = trees; + } + JSONObject jo = new JSONObject(); + jo.put("totalElements", ja.size()); + jo.put("content", maters.size() == 0 ? ja : trees); + return jo; + } + + @Override + public JSONObject queryClassBycode(Map whereJson) { + String parent_class_code = (String) whereJson.get("parent_class_code"); + String class_code = (String) whereJson.get("class_code"); + JSONObject jo = new JSONObject(); + JSONArray ja = new JSONArray(); + String where = ""; + ClassstandardDto classstandardDto = null; + if (!StrUtil.isEmpty(parent_class_code)) { + classstandardDto = this.findByCode(parent_class_code); + if (classstandardDto == null) { + throw new BadRequestException("请输入正确的父节点编号!"); + } + } + if (!StrUtil.isEmpty(class_code)) { + where = " AND class_code IN ('" + class_code + "')"; + } + //parent_class_code不为空,查出 id等于classstandardDto.getClass_id() + if (StrUtil.isNotEmpty(parent_class_code)) { + ja = WQLObject.getWQLObject("MD_PB_ClassStandard").query("class_id = '" + classstandardDto.getClass_id() + "' order by class_id").getResultJSONArray(0); + } else if (StrUtil.isNotEmpty(where)) { + ja = WQLObject.getWQLObject("MD_PB_ClassStandard").query("1=1 " + where + " order by class_id").getResultJSONArray(0); + } else if (StrUtil.isEmpty(parent_class_code) || parent_class_code.equals("0")) { + ja = WQLObject.getWQLObject("MD_PB_ClassStandard").query("(parent_class_id = '0' OR parent_class_id is null) and is_delete = '0' order by class_id").getResultJSONArray(0); + } + for (int i = 0; i < ja.size(); i++) { + JSONObject mater_jo = ja.getJSONObject(i); + if (mater_jo.getInteger("sub_count") > 0) { + mater_jo.put("hasChildren", true); + mater_jo.put("leaf", false); + } else { + mater_jo.put("hasChildren", false); + mater_jo.put("leaf", true); + } + mater_jo.put("id", mater_jo.getString("class_id")); + mater_jo.put("label", mater_jo.getString("class_name")); + mater_jo.put("create_user_name", mater_jo.getString("create_name")); + mater_jo.put("update_user_name", mater_jo.getString("update_optname")); + } + jo.put("content", ja); + return jo; + } + + @Override + public JSONObject queryClassById(Map whereJson) { + String parent_class_id = (String) whereJson.get("parent_class_id"); + + /*where条件*/ + String class_idStr = (String) whereJson.get("class_idStr"); + String whereStr = (String) whereJson.get("whereStr"); + + JSONObject jo = new JSONObject(); + JSONArray ja = new JSONArray(); + String where = "1=1"; + + if (!StrUtil.isEmpty(whereStr)) { + where += whereStr; + } + if (StrUtil.isNotEmpty(class_idStr)) { + where += " AND class_id IN " + class_idStr; + //"('1','2','3')" + } + if (!StrUtil.isEmpty(parent_class_id)) { + where = " AND parent_class_id = " + parent_class_id; + } + + ja = WQLObject.getWQLObject("MD_PB_ClassStandard").query(where + " order by class_id").getResultJSONArray(0); + for (int i = 0; i < ja.size(); i++) { + JSONObject mater_jo = ja.getJSONObject(i); + if (mater_jo.getInteger("sub_count") > 0) { + mater_jo.put("hasChildren", true); + mater_jo.put("leaf", false); + } else { + mater_jo.put("hasChildren", false); + mater_jo.put("leaf", true); + } + mater_jo.put("id", mater_jo.getString("class_id")); + mater_jo.put("label", mater_jo.getString("class_name")); + mater_jo.put("create_user_name", mater_jo.getString("create_name")); + mater_jo.put("update_user_name", mater_jo.getString("update_optname")); + } + jo.put("content", ja); + return jo; + } + + @Override + public JSONObject queryClassTable(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(); + map.put("flag", "1"); + 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 = this.getChildIdStr(material_type_id); + map.put("classIds", classIds); + } else if (ObjectUtil.isNotEmpty(class_idStr)) { + String classIds = this.getAllChildIdStr(class_idStr); + map.put("classIds", classIds); + } + JSONObject jo = WQL.getWO("QMD_PB_CLASSBASE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); + JSONArray content = jo.getJSONArray("content"); + JSONArray jsonArr = new JSONArray(); + for (int i = 0; i < content.size(); i++) { + JSONObject json = content.getJSONObject(i); + JSONObject jsonParent = WQLObject.getWQLObject("md_pb_classstandard").query("class_id = '" + json.getString("parent_class_id") + "'").uniqueResult(0); + json.put("address", jsonParent.getString("class_name")); + jsonArr.add(json); + } + jo.put("content", jsonArr); + return jo; + } + + @Override + public JSONObject getType(String type_id, int level) { + WQLObject classTab = WQLObject.getWQLObject("md_pb_classstandard"); + JSONObject json = classTab.query("class_id= " + type_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) { + return null; + } + String class_code = json.getString("class_code"); + if (class_code.length() / 2 == level) { + return json; + } else { + return getType(json.getString("parent_class_id"), level); + } + + } + + @Override + public Set getChildIdSet(String class_id) { + String sql = "select DISTINCT class_id from (\n" + + " select t1.class_id,\n" + + " if(find_in_set(parent_class_id, @pids) > 0, @pids := concat(@pids, ',', class_id), 0) as ischild\n" + + " from (\n" + + " select class_id,parent_class_id from md_pb_classstandard t where t.is_delete = '0' order by class_code\n" + + " ) t1,\n" + + " (select @pids := '" + class_id + "') t2\n" + + " ) t3 where ischild != 0"; + Set set = new HashSet<>(); + //添加本级 + set.add(class_id); + + //添加子节点 + try { + List list = Db.use((DataSource) SpringContextHolder.getBean("dataSource")).query(sql); + list.forEach(item -> { + set.add(item.getStr("class_id")); + }); + } catch (SQLException e) { + e.printStackTrace(); + } + return set; + } + + @Override + public Set getAllChildIdSet(String class_idStr) { + JSONArray arr = WQLObject.getWQLObject("md_pb_classstandard").query("class_id IN " + class_idStr).getResultJSONArray(0); + Set set = new HashSet<>(); + for (int i = 0; i < arr.size(); i++) { + set.addAll(this.getChildIdSet(arr.getJSONObject(i).getString("class_id"))); + } + return set; + } + + @Override + public String getChildIdStr(String class_id) { + Set set = this.getChildIdSet(class_id); + StringBuilder sb = new StringBuilder(); + set.forEach(item -> { + sb.append(",'" + item + "'"); + }); + String str = sb.toString(); + if (StrUtil.isNotEmpty(str)) { + str = "(" + str.substring(1) + ")"; + } + return str; + } + + @Override + public String getAllChildIdStr(String class_idStr) { + Set set = this.getAllChildIdSet(class_idStr); + StringBuilder sb = new StringBuilder(); + set.forEach(item -> { + sb.append(",'" + item + "'"); + }); + String str = sb.toString(); + if (StrUtil.isNotEmpty(str)) { + str = "(" + str.substring(1) + ")"; + } + return str; + } + + + public void updateSubCnt(Long Id) { + if (Id != null && Id != 0) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + int count = wo.query("parent_class_id = '" + Id + "' AND is_delete = '0'").getResultJSONArray(0).size(); + JSONObject pid = wo.query("class_id = '" + Id + "'").uniqueResult(0); + pid.put("sub_count", count); + if (count > 0) { + pid.put("is_leaf", "0"); + } else { + pid.put("is_leaf", "1"); + } + wo.update(pid); + } + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/CustomerbaseServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/CustomerbaseServiceImpl.java new file mode 100644 index 000000000..3336b46c0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/CustomerbaseServiceImpl.java @@ -0,0 +1,156 @@ + +package org.nl.wms.basedata.master.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.master.service.CustomerbaseService; +import org.nl.wms.basedata.master.service.dto.ClassstandardDto; +import org.nl.wms.basedata.master.service.dto.CustomerbaseDto; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.beans.factory.annotation.Autowired; +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 ldjun + * @description 服务实现 + * @date 2021-12-06 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class CustomerbaseServiceImpl implements CustomerbaseService { + @Autowired + private ClassstandardService classstandardService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String where = ""; + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + String search = (String) whereJson.get("search"); + if (!StrUtil.isEmpty(search)) { + where = "AND (cust_code like '%" + search + "%' OR cust_name like '%" + search + "%')"; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete = '0'" + where, "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(CustomerbaseDto.class); + return list; + } + + @Override + public CustomerbaseDto findById(Long cust_id) { + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + JSONObject json = wo.query("cust_id =" + cust_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final CustomerbaseDto obj = json.toJavaObject(CustomerbaseDto.class); + return obj; + } + + @Override + public CustomerbaseDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + JSONObject json = wo.query("cust_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final CustomerbaseDto obj = json.toJavaObject(CustomerbaseDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(CustomerbaseDto dto) { + String cust_code = dto.getCust_code(); + CustomerbaseDto customerbaseDto = this.findByCode(cust_code); + if (customerbaseDto != null && customerbaseDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的客户编号"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + ClassstandardDto classDto = classstandardService.findById(dto.getClass_id() + ""); + dto.setClass_code(classDto.getClass_code()); + dto.setClass_name(classDto.getClass_name()); + dto.setCust_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(CustomerbaseDto dto) { + CustomerbaseDto entity = this.findById(dto.getCust_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String cust_code = dto.getCust_code(); + CustomerbaseDto customerbaseDto = this.findByCode(cust_code); + if (customerbaseDto != null && !customerbaseDto.getCust_id().equals(dto.getCust_id()) && customerbaseDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的客户编号"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + for (Long cust_id : ids) { + JSONObject param = new JSONObject(); + param.put("cust_id", String.valueOf(cust_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java new file mode 100644 index 000000000..77310aef8 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java @@ -0,0 +1,239 @@ + +package org.nl.wms.basedata.master.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.master.service.MaterialbaseService; +import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-07 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class MaterialbaseServiceImpl implements MaterialbaseService { + private final ClassstandardService classstandardService; + //private final WmsToErpService wmsToErpService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = MapUtil.getStr(whereJson, "search"); + //物料限制的时候使用,初始化页面 + String class_idStr = MapUtil.getStr(whereJson, "class_idStr"); + String material_type_id = MapUtil.getStr(whereJson, "material_type_id"); + String class_code = MapUtil.getStr(whereJson, "class_code"); + String ids = MapUtil.getStr(whereJson, "ids"); + + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + + if (!StrUtil.isEmpty(search)) { + //处理转义字符 + if (search.contains("\\")) { + search = search.replace("\\", "\\\\\\"); + } + map.put("search", "%" + search + "%"); + } + + //处理物料当前节点的所有子节点 + 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); + } + + if (!StrUtil.isEmpty(class_code)) { + map.put("class_code", class_code + "%"); + } + + StringBuffer where = new StringBuffer(); + if (StrUtil.isNotEmpty(ids)) { + ids = ids.replaceAll("\'", ""); + String[] strs = ids.split(","); + where.append("("); + for (int i = 0; i < strs.length; ) { + where.append("class.class_code like '" + strs[i] + "%'"); + i++; + if (i < strs.length) { + where.append(" or "); + } + } + where.append(")"); + map.put("idssql", where.toString()); + } else { + map.put("idssql", "1=1"); + } + + JSONObject jo = WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id"); + return jo; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(MaterialbaseDto.class); + return list; + } + + @Override + public MaterialbaseDto findById(Long material_id) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject json = wo.query("material_id =" + material_id + "").uniqueResult(0); + String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); + json.put("base_unit_name", unit_name); + final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); + return obj; + } + + @Override + public MaterialbaseDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + if (StrUtil.isNotEmpty(code) && code.contains("\\")) { + code = code.replace("\\", "\\\\"); + } + JSONObject json = wo.query("material_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); + json.put("base_unit_name", unit_name); + final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(MaterialbaseDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(MaterialbaseDto dto) { + MaterialbaseDto entity = this.findById(dto.getMaterial_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + 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", now); + wo.update(param); + } + } + + @Override + public boolean isAlongMaterType(String materOpt_code, String material_id, String material_type_id) { + if (ObjectUtil.isNotEmpty(material_id)) { + Long long_mater = Long.parseLong(material_id); + material_type_id = this.findById(long_mater).getMaterial_type_id() + ""; + } + if (ObjectUtil.isEmpty(material_type_id)) { + throw new BadRequestException("物料类型不能为空!"); + } + String class_idStr = MaterOptTypeEnum.getObj(materOpt_code).getString("class_idStr"); + + Set set = classstandardService.getAllChildIdSet(class_idStr); + if (ObjectUtil.isNotEmpty(set)) { + return set.contains(material_type_id); + } + + return false; + } + + @Override + public JSONObject getMaterOptType(String materOpt_code) { + return MaterOptTypeEnum.getObj(materOpt_code); + } + + @Override + public void synchronize(Map whereJson) { + /* wmsToErpService.getClassInfo(null); + wmsToErpService.getMaterialInfo(null);*/ + } + + @Override + public JSONArray getProductSeries(String parent_class_id) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONArray parentArray = wo.query("is_delete = '0' and parent_class_id = '" + parent_class_id + "'").getResultJSONArray(0); + JSONArray newParentArray = new JSONArray(); + for (int i = 0; i < parentArray.size(); i++) { + JSONObject parentMap = parentArray.getJSONObject(i); + JSONObject newParentMap = new JSONObject(); + JSONArray children = this.getProductSeries(parentMap.getString("class_id")); + newParentMap.put("children", children); + newParentMap.put("label", parentMap.getString("class_name")); + newParentMap.put("id", parentMap.getString("class_id")); + newParentArray.add(newParentMap); + } + return newParentArray; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java new file mode 100644 index 000000000..1efb7731a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/StoragevehicleinfoServiceImpl.java @@ -0,0 +1,226 @@ + +package org.nl.wms.basedata.master.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.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.modules.system.service.impl.GenCodeServiceImpl; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.StoragevehicleinfoService; +import org.nl.wms.basedata.master.service.dto.StoragevehicleinfoDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务实现 + * @date 2021-12-09 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class StoragevehicleinfoServiceImpl implements StoragevehicleinfoService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + + String storagevehicle_code_begin = (String) whereJson.get("storagevehicle_code_begin"); + String storagevehicle_code_end = (String) whereJson.get("storagevehicle_code_end"); + String storagevehicle_type = (String) whereJson.get("storagevehicle_type"); + + HashMap map = new HashMap(); + map.put("storagevehicle_code_begin", storagevehicle_code_begin); + map.put("storagevehicle_code_end", storagevehicle_code_end); + map.put("storagevehicle_type", storagevehicle_type); + map.put("flag", "1"); + JSONObject json = WQL.getWO("QMD_PB_STORAGEVEHICLEINFO").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "s.storagevehicle_code ASC"); + JSONArray content = json.getJSONArray("content"); + for (int i = 0; i < content.size(); i++) { + JSONObject jsonObject = content.getJSONObject(i); + JSONObject jsonTask = taskTab.query("vehicle_code = '" + jsonObject.getString("storagevehicle_code") + "' and task_status <> '99' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTask)) { + jsonObject.put("start_point_code", jsonTask.getString("start_point_code")); + jsonObject.put("next_point_code", jsonTask.getString("next_point_code")); + jsonObject.put("is_task", "1"); + jsonObject.put("point_code", ""); + } else { + jsonObject.put("is_task", "0"); + } + } + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(StoragevehicleinfoDto.class); + return list; + } + + @Override + public StoragevehicleinfoDto findById(Long storagevehicle_id) { + WQLObject wo = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONObject json = wo.query("storagevehicle_id =" + storagevehicle_id + "").uniqueResult(0); + final StoragevehicleinfoDto obj = json.toJavaObject(StoragevehicleinfoDto.class); + return obj; + } + + @Override + public StoragevehicleinfoDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONObject json = wo.query("storagevehicle_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)){ + throw new BadRequestException("请输入正确的载具号!"); + } + final StoragevehicleinfoDto obj = json.toJavaObject(StoragevehicleinfoDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONArray create(Map map) { + WQLObject wo = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONObject jsonObject = wo.query("storagevehicle_code = '" + map.get("storagevehicle_code") + "' and is_delete = '0'").uniqueResult(0); + if (!ObjectUtil.isEmpty(jsonObject)) { + throw new BadRequestException("此载具已存在"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String storagevehicle_type = (String) map.get("storagevehicle_type"); + String code = ""; + switch (storagevehicle_type) { + case "00": + code = "VEHICCLE_CODE_MTP"; + break; + case "01": + code = "VEHICCLE_CODE_TTP"; + break; + } + JSONArray resultCodeArr = new JSONArray(); + int num = MapUtil.getInt(map, "num"); + for (int i = 0; i < num; i++) { + StoragevehicleinfoDto dto = new StoragevehicleinfoDto(); + dto.setStoragevehicle_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setStoragevehicle_code(CodeUtil.getNewCode(code)); + dto.setCreate_id(currentUserId); + dto.setStoragevehicle_name(dto.getStoragevehicle_code()); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setStoragevehicle_type((String) map.get("storagevehicle_type")); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + resultCodeArr.add(dto.getStoragevehicle_code()); + } + return resultCodeArr; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StoragevehicleinfoDto dto) { + WQLObject wo = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONObject jsonObject = wo.query("storagevehicle_code = '" + dto.getStoragevehicle_code() + "' and is_delete = '0'").uniqueResult(0); + if (!ObjectUtil.isEmpty(jsonObject)) { + throw new BadRequestException("此载具已存在"); + } + StoragevehicleinfoDto entity = this.findById(dto.getStoragevehicle_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + for (Long storagevehicle_id : ids) { + JSONObject param = new JSONObject(); + param.put("storagevehicle_id", String.valueOf(storagevehicle_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(JSONObject json) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("md_pb_storagevehicleinfo").update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject getVehicle(String code) { + String term = ""; + switch (code) { + case "00": + term = "VEHICCLE_CODE_MTP"; + break; + case "01": + term = "VEHICCLE_CODE_TTP"; + break; + } + + HashMap map = new HashMap<>(); + map.put("code", term); + map.put("flag", "0"); + GenCodeServiceImpl genCodeService = new GenCodeServiceImpl(); + String value = genCodeService.codeDemo(map); + + JSONObject json = new JSONObject(); + json.put("value", value); + return json; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/SupplierbaseServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/SupplierbaseServiceImpl.java new file mode 100644 index 000000000..91676ab26 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/SupplierbaseServiceImpl.java @@ -0,0 +1,162 @@ + +package org.nl.wms.basedata.master.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.master.service.SupplierbaseService; +import org.nl.wms.basedata.master.service.dto.ClassstandardDto; +import org.nl.wms.basedata.master.service.dto.SupplierbaseDto; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.beans.factory.annotation.Autowired; +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 zhouz + * @description 服务实现 + * @date 2021-12-06 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class SupplierbaseServiceImpl implements SupplierbaseService { + @Autowired + private ClassstandardService classstandardService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String where = ""; + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + String search = (String) whereJson.get("search"); + if (!StrUtil.isEmpty(search)) { + where = "AND (supp_code like '%" + search + "%' OR supp_name like '%" + search + "%')"; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete = '0'" + where, "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(SupplierbaseDto.class); + return list; + } + + @Override + public SupplierbaseDto findById(Long supp_id) { + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + JSONObject json = wo.query("supp_id =" + supp_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final SupplierbaseDto obj = json.toJavaObject(SupplierbaseDto.class); + return obj; + } + + @Override + public SupplierbaseDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + JSONObject json = wo.query("supp_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final SupplierbaseDto obj = json.toJavaObject(SupplierbaseDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(SupplierbaseDto dto) { + String supp_code = dto.getSupp_code(); + SupplierbaseDto supplierbaseDto = this.findByCode(supp_code); + if (supplierbaseDto != null && supplierbaseDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的供应商编号"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + ClassstandardDto classDto = classstandardService.findById(dto.getClass_id() + ""); + if (ObjectUtil.isNotEmpty(classDto)) { + dto.setClass_code(classDto.getClass_code()); + dto.setClass_name(classDto.getClass_name()); + } + + dto.setSupp_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SupplierbaseDto dto) { + SupplierbaseDto entity = this.findById(dto.getSupp_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + ClassstandardDto classDto = classstandardService.findById(dto.getClass_id() + ""); + if (ObjectUtil.isNotEmpty(classDto)) { + dto.setClass_code(classDto.getClass_code()); + dto.setClass_name(classDto.getClass_name()); + } + String supp_code = dto.getSupp_code(); + SupplierbaseDto supplierbaseDto = this.findByCode(supp_code); + if (supplierbaseDto != null && !dto.getSupp_id().equals(supplierbaseDto.getSupp_id()) && supplierbaseDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的供应商编号"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("md_cs_supplierbase"); + for (Long supp_id : ids) { + JSONObject param = new JSONObject(); + param.put("supp_id", String.valueOf(supp_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/UnitServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/UnitServiceImpl.java new file mode 100644 index 000000000..d06950b72 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/UnitServiceImpl.java @@ -0,0 +1,158 @@ + +package org.nl.wms.basedata.master.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.UnitService; +import org.nl.wms.basedata.master.service.dto.UnitDto; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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 loujf + * @description 服务实现 + * @date 2021-12-07 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class UnitServiceImpl implements UnitService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String where = ""; + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + String search = (String) whereJson.get("search"); + if (!StrUtil.isEmpty(search)) { + where = " AND (unit_code like '%" + search + "%' OR unit_name like '%" + search + "%' ) "; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete='0' " + where, "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(UnitDto.class); + return list; + } + + @Override + public UnitDto findById(Long measure_unit_id) { + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + JSONObject json = wo.query("measure_unit_id =" + measure_unit_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final UnitDto obj = json.toJavaObject(UnitDto.class); + return obj; + } + + @Override + public UnitDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + JSONObject json = wo.query("unit_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final UnitDto obj = json.toJavaObject(UnitDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(UnitDto dto) { + String unit_code = dto.getUnit_code(); + UnitDto unitDto = this.findByCode(unit_code); + if (unitDto != null && unitDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的编码"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setMeasure_unit_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(String.valueOf(currentUserId)); + dto.setCreate_name(nickName); + dto.setUpdate_optid(String.valueOf(currentUserId)); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(UnitDto dto) { + UnitDto entity = this.findById(dto.getMeasure_unit_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String unit_code = dto.getUnit_code(); + UnitDto unitDto = this.findByCode(unit_code); + if (unitDto != null && + !unitDto.getMeasure_unit_id().equals(dto.getMeasure_unit_id()) + && unitDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的编码"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(String.valueOf(currentUserId)); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + public JSONObject getUnit(Map whereJson) { + JSONArray units = WQLObject.getWQLObject("md_pb_measureunit").query("is_used = '1' AND is_delete = '0'").getResultJSONArray(0); + JSONObject jo = new JSONObject(); + jo.put("content", units); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + for (String measure_unit_id : ids) { + JSONObject param = new JSONObject(); + param.put("measure_unit_id", String.valueOf(measure_unit_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql new file mode 100644 index 000000000..fb52826d0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_MATERIAL.wql @@ -0,0 +1,82 @@ +[交易说明] + 交易名: 物料分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.class_code TYPEAS s_string + 输入.idssql TYPEAS f_string + 输入.classIds TYPEAS f_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + mb.*, + class.class_code, + class.class_name, + unit_name, + '50' as standard_weight, + unit_name as base_unit_id_name, + class2.class_code as product_series_code, + class2.class_name as product_series_name + + FROM + md_me_materialbase mb + LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mb.base_unit_id + left join MD_PB_ClassStandard class2 on class2.class_id =mb.product_series + WHERE + mb.is_delete = '0' + and 输入.idssql + OPTION 输入.search <> "" + ( + mb.material_code like 输入.search + OR + mb.material_name like 输入.search + ) + ENDOPTION + OPTION 输入.class_code <> "" + class.class_code like 输入.class_code + ENDOPTION + OPTION 输入.classIds <> "" + class.class_id in 输入.classIds + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_material_param01.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_material_param01.wql new file mode 100644 index 000000000..aac78514e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_ME_material_param01.wql @@ -0,0 +1,90 @@ +[交易说明] + 交易名: 物料参数弹窗数据查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.material_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + m.*, + e.*, + c.class_name, + c.class_code, + u.unit_name + FROM + MD_ME_MaterialBase m + LEFT JOIN MD_ME_StockMaterialExt e ON m.material_id = e.material_id + LEFT JOIN MD_PB_ClassStandard c ON c.class_id = m.material_type_id + LEFT JOIN md_pb_measureunit u ON u.measure_unit_id = m.base_unit_id + WHERE + m.is_used = '1' + AND m.is_delete = '0' + OPTION 输入.material_id <> "" + m.material_id = 输入.material_id + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + + IF 输入.flag = "2" + QUERY + SELECT + m2.*, + e2.*, + c2.class_name, + c2.class_code, + u2.unit_name + FROM + MD_ME_MaterialBase m2 + LEFT JOIN MD_ME_ProducMaterialExt e2 ON m2.material_id = e2.material_id + LEFT JOIN MD_PB_ClassStandard c2 ON c2.class_id = m2.material_type_id + LEFT JOIN md_pb_measureunit u2 ON u2.measure_unit_id = m2.base_unit_id + WHERE + m2.is_used = '1' + AND m2.is_delete = '0' + OPTION 输入.material_id <> "" + m2.material_id = 输入.material_id + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_BUSINESSTYPEMATERIAL.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_BUSINESSTYPEMATERIAL.wql new file mode 100644 index 000000000..e89ac0592 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_BUSINESSTYPEMATERIAL.wql @@ -0,0 +1,61 @@ +[交易说明] + 交易名: 业务单据类型物料对应分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.inv_type_code TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + b.* + FROM + md_pb_businesstypematerial b + WHERE + b.is_delete = '0' + + OPTION 输入.inv_type_code <> "" + (b.inv_type_code like 输入.inv_type_code or + b.inv_type_name like 输入.inv_type_code ) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_CLASSBASE.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_CLASSBASE.wql new file mode 100644 index 000000000..d940485bf --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_CLASSBASE.wql @@ -0,0 +1,66 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.classIds TYPEAS f_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + md_pb_classstandard class + LEFT JOIN ST_IVT_StructRelaMaterial sr ON sr.material_type_id = class.class_id + WHERE + is_leaf = '1' + AND + base_data_type = '03' + AND + sr.sect_id IS NULL + AND + is_delete = '0' + OPTION 输入.classIds <> "" + class.class_id in 输入.classIds + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEEXT.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEEXT.wql new file mode 100644 index 000000000..24bcbf2b4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEEXT.wql @@ -0,0 +1,114 @@ +[交易说明] + 交易名: 载具扩展属性设置分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.storagevehicle_code_begin TYPEAS s_string + 输入.storagevehicle_code_end TYPEAS s_string + 输入.storagevehicle_type TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + info.*, + ext.storagevehicleext_id, + ext.material_id, + ext.pcsn, + ext.qty_unit_id, + ext.qty_unit_name, + ext.storage_qty, + ext.workordercard_id, + ext.is_need_clean, + ext.remark, + d.label AS storagevehicle_type_name, + mdb.material_name, + mdb.material_spec, + mdb.gross_weight, + mdp.old_mark, + point.point_name, + device.device_id AS device_uuid, + device.device_code + FROM + md_pb_storagevehicleinfo info + LEFT JOIN md_pb_storagevehicleext ext ON info.storagevehicle_id = ext.storagevehicle_id + LEFT JOIN sys_dict_detail d ON info.storagevehicle_type = d.value and d.name = 'storagevehicle_type' + LEFT JOIN MD_ME_MaterialBase mdb ON ext.material_id = mdb.material_id + LEFT JOIN MD_ME_ProducMaterialExt mdp ON mdb.material_id = mdp.material_id + LEFT JOIN sch_base_point point ON info.storagevehicle_code = point.vehicle_code + LEFT JOIN EM_BI_DeviceInfo device ON device.device_id = ext.device_uuid + WHERE + info.is_delete = '0' + AND info.storagevehicle_type in (30,31,32,33) + + ENDOPTION + OPTION 输入.storagevehicle_code_begin <> "" + info.storagevehicle_code >= 输入.storagevehicle_code_begin + ENDOPTION + ENDOPTION + OPTION 输入.storagevehicle_code_end <> "" + info.storagevehicle_code <= 输入.storagevehicle_code_end + ENDOPTION + + ENDOPTION + OPTION 输入.storagevehicle_type <> "" + info.storagevehicle_type = 输入.storagevehicle_type + ENDOPTION + + ENDOPTION + OPTION 输入.storagevehicle_type <> "" + info.storagevehicle_type = 输入.storagevehicle_type + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + dict.label, + dict.value + FROM + sys_dict_detail dict + WHERE + dict.name = 'storagevehicle_type' + AND dict.value in (30,31,32,33) + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEINFO.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEINFO.wql new file mode 100644 index 000000000..4081d66bb --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEINFO.wql @@ -0,0 +1,80 @@ +[交易说明] + 交易名: 载具维护分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.storagevehicle_code_begin TYPEAS s_string + 输入.storagevehicle_code_end TYPEAS s_string + 输入.storagevehicle_type TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + s.*, + d.label AS storagevehicle_type_name, + mater.material_code, + mater.material_name, + point.point_code, + point.point_name + FROM + md_pb_storagevehicleinfo s + LEFT JOIN sys_dict_detail d ON s.storagevehicle_type = d.value and d.dict_id = '32' + LEFT JOIN sch_base_point point ON point.vehicle_code = s.storagevehicle_code + LEFT JOIN ST_IVT_StructIvt ivt ON point.source_id = ivt.struct_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id + WHERE + s.is_delete = '0' + ENDOPTION + OPTION 输入.storagevehicle_code_begin <> "" + s.storagevehicle_code >= 输入.storagevehicle_code_begin + ENDOPTION + + ENDOPTION + OPTION 输入.storagevehicle_code_end <> "" + s.storagevehicle_code <= 输入.storagevehicle_code_end + ENDOPTION + + ENDOPTION + OPTION 输入.storagevehicle_type <> "" + s.storagevehicle_type = 输入.storagevehicle_type + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEPOINT.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEPOINT.wql new file mode 100644 index 000000000..a6009e248 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_PB_STORAGEVEHICLEPOINT.wql @@ -0,0 +1,103 @@ +[交易说明] + 交易名: 点位载具关系设置分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.name TYPEAS s_string + 输入.area_type TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + point.*, + svp.storagevehiclepoint_id, + svp.storagevehicle_id, + svp.storagevehicle_code, + svp.set_type, + d.label AS set_type_name + FROM + sch_base_point point + LEFT JOIN md_pb_storagevehiclepoint svp ON point.point_id = svp.point_id and svp.set_type <>'02' + LEFT JOIN sys_dict_detail d ON svp.set_type = d.value and d.name = 'set_type' + WHERE + point.is_delete = '0' + AND point.is_used = '1' + AND point.area_type in (25,26,32,28) + ENDOPTION + OPTION 输入.name <> "" + (point.point_code like "%" 输入.name "%" or point.point_name like "%" 输入.name "%") + ENDOPTION + + ENDOPTION + OPTION 输入.area_type <> "" + point.area_type = 输入.area_type + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + dict.label, + dict.value + FROM + sys_dict_detail dict + WHERE + dict.name = 'storagevehicle_type' + AND dict.value in (30,31,32,33) + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + dict.label, + dict.value + FROM + sys_dict_detail dict + WHERE + dict.name = 'sch_area_type' + AND dict.value in (25,26,32,28) + ENDSELECT + ENDQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_STORAGEVEHICLECLEANING.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_STORAGEVEHICLECLEANING.wql new file mode 100644 index 000000000..15c96e759 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMD_STORAGEVEHICLECLEANING.wql @@ -0,0 +1,111 @@ +[交易说明] + 交易名: 载具清洗关系设置分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.point_code TYPEAS s_string + 输入.storagevehicle_type TYPEAS s_string + 输入.storagevehicle_code TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + info.*, + svp.storagevehiclepoint_id, + svp.set_type, + svp.point_id, + svp.point_code, + svp.point_name, + d.label AS storagevehicle_type_name + FROM + md_pb_storagevehicleinfo info + LEFT JOIN md_pb_storagevehiclepoint svp ON info.storagevehicle_id = svp.storagevehicle_id and svp.set_type <>'01' + LEFT JOIN sch_base_point point ON point.point_id = svp.point_id + LEFT JOIN sys_dict_detail d ON info.storagevehicle_type = d.value and d.name = 'storagevehicle_type' + WHERE + info.is_delete = '0' + AND info.is_used = '1' + AND info.storagevehicle_type in (30,31,32,33) + ENDOPTION + OPTION 输入.point_code <> "" + svp.point_code = 输入.point_code + ENDOPTION + + OPTION 输入.storagevehicle_type <> "" + info.storagevehicle_type = 输入.storagevehicle_type + ENDOPTION + + OPTION 输入.storagevehicle_code <> "" + info.storagevehicle_code like "%" 输入.storagevehicle_code "%" + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + point.point_id, + point.point_code, + point.point_name + FROM + SCH_BASE_Point point + WHERE + point.is_used = '1' + AND point.is_delete = '0' + AND point.area_type in ('29') + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "3" + PAGEQUERY + SELECT + dict.label, + dict.value + FROM + sys_dict_detail dict + WHERE + dict.name = 'storagevehicle_type' + AND dict.value in (30,31,32,33) + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMT_MATERIALPARAMETERS_001.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMT_MATERIALPARAMETERS_001.wql new file mode 100644 index 000000000..e8709183a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/QMT_MATERIALPARAMETERS_001.wql @@ -0,0 +1,120 @@ +[交易说明] + 交易名: 产品参数分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.material_type_id TYPEAS s_string + 输入.class_code TYPEAS s_string + 输入.classIds TYPEAS f_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + m.material_id, + m.material_code, + m.material_name, + m.base_unit_id, + m.material_type_id, + s.is_need_plan, + s.standard_weight AS stock_standard_weight, + s.is_report AS stock_is_report, + s.wc_seqno, + s.report_seqno, + s.is_pure, + s.is_need_move AS stock_is_need_move, + p.old_mark, + p.product_mode, + p.is_auto_open, + p.waste_limit_down, + p.waste_limit_up, + p.report_time, + p.is_report AS produc_is_report, + p.is_again_put, + p.standard_weight AS produc_standard_weight, + p.product_series, + p.c_balance, + p.ball_time, + p.ball_speed, + p.weight_lost_up, + p.weight_lost_down, + p.product_ball_time, + p.standard_weight_pft, + p.is_need_move AS product_is_need_move, + p.net_rate, + m.is_used, + m.update_optname, + m.update_time, + m.material_height_type, + b.class_name, + b.class_code, + d1.label AS product_mode_name, + d2.label AS is_need_plan_name, + d3.label AS stock_is_report_name, + d7.label AS produc_is_report_name, + d4.label AS is_auto_open_name, + d5.label AS is_again_put_name, + d6.label AS product_series_name, + u.unit_name + FROM + md_me_materialbase m + LEFT JOIN md_me_stockmaterialext s ON m.material_id = s.material_id + LEFT JOIN md_me_producmaterialext p ON m.material_id = p.material_id + LEFT JOIN md_pb_classstandard b ON m.material_type_id = b.class_id + LEFT JOIN sys_dict_detail d1 ON d1.value = p.product_mode and d1.name = 'product_mode' + LEFT JOIN sys_dict_detail d2 ON d2.value = s.is_need_plan and d2.name = 'IS_OR_NOT' + LEFT JOIN sys_dict_detail d3 ON d3.value = s.is_report and d3.name = 'IS_OR_NOT' + LEFT JOIN sys_dict_detail d7 ON d7.value = p.is_report and d7.name = 'IS_OR_NOT' + LEFT JOIN sys_dict_detail d4 ON d4.value = p.is_auto_open and d4.name = 'IS_OR_NOT' + LEFT JOIN sys_dict_detail d5 ON d5.value = p.is_again_put and d5.name = 'IS_OR_NOT' + LEFT JOIN sys_dict_detail d6 ON d6.value = p.product_series and d6.name = 'product_series' + LEFT JOIN md_pb_measureunit u ON u.measure_unit_id = m.base_unit_id + WHERE + m.is_delete = '0' + OPTION 输入.material_code <> "" + ( m.material_code like "%" 输入.material_code "%" or m.material_name like "%" 输入.material_code "%") + ENDOPTION + + OPTION 输入.classIds <> "" + b.class_id in 输入.classIds + ENDOPTION + + OPTION 输入.class_code <> "" + b.class_code like 输入.class_code + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdcs.xls b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdcs.xls new file mode 100644 index 000000000..7db328db7 Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdcs.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls new file mode 100644 index 000000000..266d7dc7d Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdpb.xls b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdpb.xls new file mode 100644 index 000000000..610f154a8 Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdpb.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/IvtChangeTypeEnum.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/IvtChangeTypeEnum.java new file mode 100644 index 000000000..402eb993d --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/IvtChangeTypeEnum.java @@ -0,0 +1,31 @@ +package org.nl.wms.basedata.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/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java new file mode 100644 index 000000000..45cf89de5 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java @@ -0,0 +1,297 @@ +package org.nl.wms.basedata.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.modules.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("region_id", disObj.getString("region_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("region_id", param.getString("region_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/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/SectattrController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/SectattrController.java new file mode 100644 index 000000000..943ec4b81 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/SectattrController.java @@ -0,0 +1,84 @@ + +package org.nl.wms.basedata.st.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.st.service.SectattrService; +import org.nl.wms.basedata.st.service.dto.SectattrDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author zhouz +* @date 2021-12-09 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "库区管理") +@RequestMapping("/api/sectattr") +@Slf4j +public class SectattrController { + + private final SectattrService sectattrService; + + @GetMapping + @Log("查询库区") + @ApiOperation("查询库区") + //@PreAuthorize("@el.check('sectattr:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(sectattrService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增库区") + @ApiOperation("新增库区") + //@PreAuthorize("@el.check('sectattr:add')") + public ResponseEntity create(@Validated @RequestBody SectattrDto dto){ + sectattrService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改库区") + @ApiOperation("修改库区") + //@PreAuthorize("@el.check('sectattr:edit')") + public ResponseEntity update(@Validated @RequestBody SectattrDto dto){ + sectattrService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除库区") + @ApiOperation("删除库区") + //@PreAuthorize("@el.check('sectattr:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + sectattrService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getSect") + @Log("查询库区下拉框") + @ApiOperation("查询库区下拉框") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity querySect(@RequestParam Map whereJson) { + return new ResponseEntity<>(sectattrService.getSect(whereJson), HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改库区状态") + @ApiOperation("修改库区状态") + public ResponseEntity update(@RequestBody JSONObject json) { + sectattrService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StorattrController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StorattrController.java new file mode 100644 index 000000000..5ac0ee267 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StorattrController.java @@ -0,0 +1,84 @@ + +package org.nl.wms.basedata.st.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author zhouz +* @date 2021-12-08 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "仓库管理") +@RequestMapping("/api/Storattr") +@Slf4j +public class StorattrController { + + private final StorattrService storattrService; + + @GetMapping + @Log("查询仓库") + @ApiOperation("查询仓库") + //@PreAuthorize("@el.check('Storattr:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(storattrService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增仓库") + @ApiOperation("新增仓库") + //@PreAuthorize("@el.check('Storattr:addgetStor')") + public ResponseEntity create(@Validated @RequestBody StorattrDto dto){ + storattrService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改仓库") + @ApiOperation("修改仓库") + //@PreAuthorize("@el.check('Storattr:edit')") + public ResponseEntity update(@Validated @RequestBody StorattrDto dto){ + storattrService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除仓库") + @ApiOperation("删除仓库") + //@PreAuthorize("@el.check('Storattr:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + storattrService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getStor") + @Log("查询仓库下拉框") + @ApiOperation("查询仓库下拉框") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity queryStor(@RequestParam Map whereJson) { + return new ResponseEntity<>(storattrService.getStor(whereJson), HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改仓库管理状态") + @ApiOperation("修改仓库管理状态") + public ResponseEntity update(@RequestBody JSONObject json) { + storattrService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java new file mode 100644 index 000000000..c83a71661 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructattrController.java @@ -0,0 +1,76 @@ + +package org.nl.wms.basedata.st.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.st.service.StructattrService; +import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author zhouz +* @date 2021-12-09 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "仓位管理") +@RequestMapping("/api/structattr") +@Slf4j +public class StructattrController { + + private final StructattrService structattrService; + + @GetMapping + @Log("查询仓位") + @ApiOperation("查询仓位") + //@PreAuthorize("@el.check('structattr:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(structattrService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增仓位") + @ApiOperation("新增仓位") + //@PreAuthorize("@el.check('structattr:add')") + public ResponseEntity create(@Validated @RequestBody StructattrDto dto){ + structattrService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改仓位") + @ApiOperation("修改仓位") + //@PreAuthorize("@el.check('structattr:edit')") + public ResponseEntity update(@Validated @RequestBody StructattrDto dto){ + structattrService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除仓位") + @ApiOperation("删除仓位") + //@PreAuthorize("@el.check('structattr:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + structattrService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改仓位状态") + @ApiOperation("修改仓位状态") + public ResponseEntity update(@RequestBody JSONObject json) { + structattrService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java new file mode 100644 index 000000000..a9854df95 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java @@ -0,0 +1,93 @@ + +package org.nl.wms.basedata.st.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.st.service.StructivtService; +import org.nl.wms.basedata.st.service.dto.StructivtDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-06-02 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "库存管理管理") +@RequestMapping("/api/structivt") +@Slf4j +public class StructivtController { + + private final StructivtService structivtService; + + @GetMapping + @Log("查询库存管理") + @ApiOperation("查询库存管理") + //@PreAuthorize("@el.check('structivt:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(structivtService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增库存管理") + @ApiOperation("新增库存管理") + //@PreAuthorize("@el.check('structivt:add')") + public ResponseEntity create(@Validated @RequestBody StructivtDto dto){ + structivtService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改库存管理") + @ApiOperation("修改库存管理") + //@PreAuthorize("@el.check('structivt:edit')") + public ResponseEntity update(@Validated @RequestBody StructivtDto dto){ + structivtService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除库存管理") + @ApiOperation("删除库存管理") + //@PreAuthorize("@el.check('structivt:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + structivtService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getStruct") + @Log("查询仓位下拉") + @ApiOperation("查询仓位下拉") + //@PreAuthorize("@el.check('structivt:list')") + public ResponseEntity getStruct(){ + return new ResponseEntity<>(structivtService.getStruct(),HttpStatus.OK); + } + + @PostMapping("/getStructById") + @Log("根据仓位id查询仓位信息") + @ApiOperation("根据仓位id查询仓位信息") + //@PreAuthorize("@el.check('structivt:list')") + public ResponseEntity getStructById(@RequestBody JSONObject param){ + return new ResponseEntity<>(structivtService.getStructById(param),HttpStatus.OK); + } + + @GetMapping("/getUnits") + @Log("查询计量单位下拉") + @ApiOperation("查询计量单位下拉") + //@PreAuthorize("@el.check('structivt:list')") + public ResponseEntity getUnits(){ + return new ResponseEntity<>(structivtService.getUnits(),HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructrelamaterialController.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructrelamaterialController.java new file mode 100644 index 000000000..6e8956d71 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructrelamaterialController.java @@ -0,0 +1,85 @@ + +package org.nl.wms.basedata.st.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.st.service.StructrelamaterialService; +import org.nl.wms.basedata.st.service.dto.StructrelamaterialDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author zhouz +* @date 2021-12-09 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "物料存放设置管理") +@RequestMapping("/api/structrelamaterial") +@Slf4j +public class StructrelamaterialController { + + private final StructrelamaterialService structrelamaterialService; + + @GetMapping + @Log("查询物料存放设置") + @ApiOperation("查询物料存放设置") + //@PreAuthorize("@el.check('structrelamaterial:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(structrelamaterialService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增物料存放设置") + @ApiOperation("新增物料存放设置") + //@PreAuthorize("@el.check('structrelamaterial:add')") + public ResponseEntity create(@Validated @RequestBody StructrelamaterialDto dto){ + structrelamaterialService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改物料存放设置") + @ApiOperation("修改物料存放设置") + //@PreAuthorize("@el.check('structrelamaterial:edit')") + public ResponseEntity update(@Validated @RequestBody StructrelamaterialDto dto){ + structrelamaterialService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除物料存放设置") + @ApiOperation("删除物料存放设置") + //@PreAuthorize("@el.check('structrelamaterial:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + structrelamaterialService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/insertSet") + @Log("插入物料存放设置") + @ApiOperation("插入物料存放设置") + //@PreAuthorize("@el.check('structrelamaterial:edit')") + public ResponseEntity insertSet(@RequestBody Map whereJson){ + structrelamaterialService.insertSet(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/delSet") + @Log("删除物料存放设置") + @ApiOperation("删除物料存放设置") + //@PreAuthorize("@el.check('structrelamaterial:edit')") + public ResponseEntity delSet(@RequestBody Map whereJson){ + structrelamaterialService.delSet(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/SectattrService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/SectattrService.java new file mode 100644 index 000000000..7e6bd9724 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/SectattrService.java @@ -0,0 +1,74 @@ + +package org.nl.wms.basedata.st.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.st.service.dto.SectattrDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author zhouz +* @date 2021-12-09 +**/ +public interface SectattrService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param sect_id ID + * @return Sectattr + */ + SectattrDto findById(Long sect_id); + + /** + * 根据编码查询 + * @param code code + * @return Sectattr + */ + SectattrDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(SectattrDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(SectattrDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + JSONObject getSect(Map whereJson); + + /** + * 改变启用状态 + * @param json + */ + void changeActive(JSONObject json); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StorattrService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StorattrService.java new file mode 100644 index 000000000..b095b5cd0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StorattrService.java @@ -0,0 +1,74 @@ + +package org.nl.wms.basedata.st.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author zhouz +* @date 2021-12-08 +**/ +public interface StorattrService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param stor_id ID + * @return Storattr + */ + StorattrDto findById(Long stor_id); + + /** + * 根据编码查询 + * @param code code + * @return Storattr + */ + StorattrDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(StorattrDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(StorattrDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + JSONObject getStor(Map whereJson); + + /** + * 改变启用状态 + * @param json + */ + void changeActive(JSONObject json); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java new file mode 100644 index 000000000..b316562f2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructattrService.java @@ -0,0 +1,72 @@ + +package org.nl.wms.basedata.st.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author zhouz +* @date 2021-12-09 +**/ +public interface StructattrService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param struct_id ID + * @return Structattr + */ + StructattrDto findById(Long struct_id); + + /** + * 根据编码查询 + * @param code code + * @return Structattr + */ + StructattrDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(StructattrDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(StructattrDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 改变启用状态 + * @param json + */ + void changeActive(JSONObject json); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructivtService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructivtService.java new file mode 100644 index 000000000..70a5989dd --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructivtService.java @@ -0,0 +1,72 @@ + +package org.nl.wms.basedata.st.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.st.service.dto.StructivtDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-06-02 +**/ +public interface StructivtService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param stockrecord_id ID + * @return Structivt + */ + StructivtDto findById(Long stockrecord_id); + + /** + * 根据编码查询 + * @param code code + * @return Structivt + */ + StructivtDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(StructivtDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(StructivtDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + JSONArray getStruct(); + + JSONObject getStructById(JSONObject param); + + JSONArray getUnits(); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructrelamaterialService.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructrelamaterialService.java new file mode 100644 index 000000000..ca3b70d91 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/StructrelamaterialService.java @@ -0,0 +1,69 @@ + +package org.nl.wms.basedata.st.service; + +import org.nl.wms.basedata.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/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/MaterialsafeivtDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/MaterialsafeivtDto.java new file mode 100644 index 000000000..861caffc2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/MaterialsafeivtDto.java @@ -0,0 +1,39 @@ +package org.nl.wms.basedata.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/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/SectattrDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/SectattrDto.java new file mode 100644 index 000000000..be570484f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/SectattrDto.java @@ -0,0 +1,115 @@ +package org.nl.wms.basedata.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 Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + 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/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StorattrDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StorattrDto.java new file mode 100644 index 000000000..fb16efef1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StorattrDto.java @@ -0,0 +1,106 @@ +package org.nl.wms.basedata.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 Long create_id; + + private String create_name; + + private String create_time; + + private Long update_optid; + + private String update_optname; + + 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/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructattrDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructattrDto.java new file mode 100644 index 000000000..6b4fb958c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructattrDto.java @@ -0,0 +1,145 @@ +package org.nl.wms.basedata.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 Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + 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/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructivtDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructivtDto.java new file mode 100644 index 000000000..cc9fdef5a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructivtDto.java @@ -0,0 +1,64 @@ +package org.nl.wms.basedata.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 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 String instorage_time; + + /** 销售单标识 */ + private Long sale_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructrelamaterialDto.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructrelamaterialDto.java new file mode 100644 index 000000000..42e102782 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/dto/StructrelamaterialDto.java @@ -0,0 +1,30 @@ +package org.nl.wms.basedata.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; + +/** +* @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 String set_time; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java new file mode 100644 index 000000000..37d554e3a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java @@ -0,0 +1,251 @@ + +package org.nl.wms.basedata.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.st.service.SectattrService; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.dto.SectattrDto; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-09 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class SectattrServiceImpl implements SectattrService { + + @Autowired + private StorattrService storattrService; + + @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")); + JSONObject jo = WQL.getWO("QST_SECT_ATTR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); + return jo; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_sectattr"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(SectattrDto.class); + return list; + } + + @Override + public SectattrDto findById(Long sect_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_sectattr"); + JSONObject json = wo.query("sect_id =" + sect_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final SectattrDto obj = json.toJavaObject(SectattrDto.class); + return obj; + } + + @Override + public SectattrDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_sectattr"); + JSONObject json = wo.query("sect_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final SectattrDto obj = json.toJavaObject(SectattrDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(SectattrDto dto) { + String sect_code = dto.getSect_code(); + SectattrDto sectattrDto = this.findByCode(sect_code); + if (sectattrDto != null && sectattrDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的库区编号"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setSect_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + StorattrDto storattrDto = storattrService.findById(dto.getStor_id()); + dto.setStor_name(storattrDto.getStor_name()); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_sectattr"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SectattrDto dto) { + SectattrDto entity = this.findById(dto.getSect_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String sect_code = dto.getSect_code(); + SectattrDto sectattrDto = this.findByCode(sect_code); + if (sectattrDto != null && !dto.getSect_id().equals(sectattrDto.getSect_id()) && sectattrDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的库区编号"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + StorattrDto storattrDto = storattrService.findById(dto.getStor_id()); + dto.setStor_name(storattrDto.getStor_name()); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_sectattr"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_sectattr"); + for (Long sect_id : ids) { + JSONObject param = new JSONObject(); + param.put("sect_id", String.valueOf(sect_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + public JSONObject getSect(Map whereJson) { + JSONArray new_ja = new JSONArray(); + HashMap stor_map = new HashMap<>(); + stor_map.put("flag", "2"); + String is_materialstore = (String) whereJson.get("is_materialstore"); + String is_virtualstore = (String) whereJson.get("is_virtualstore"); + String is_semi_finished = (String) whereJson.get("is_semi_finished"); + String is_productstore = (String) whereJson.get("is_productstore"); + String is_attachment = (String) whereJson.get("is_attachment"); + String is_reversed = (String) whereJson.get("is_reversed"); + if (!StrUtil.isEmpty(is_materialstore)) { + stor_map.put("is_materialstore", is_materialstore); + } + if (!StrUtil.isEmpty(is_virtualstore)) { + stor_map.put("is_virtualstore", is_virtualstore); + } + if (!StrUtil.isEmpty(is_semi_finished)) { + stor_map.put("is_semi_finished", is_semi_finished); + } + if (!StrUtil.isEmpty(is_productstore)) { + stor_map.put("is_productstore", is_productstore); + } + if (!StrUtil.isEmpty(is_attachment)) { + stor_map.put("is_attachment", is_attachment); + } + if (!StrUtil.isEmpty(is_reversed)) { + stor_map.put("is_reversed", is_reversed); + } + JSONArray stor_ja = WQL.getWO("QST_STOR_ATTR").addParamMap(stor_map).process().getResultJSONArray(0); + for (int i = 0; i < stor_ja.size(); i++) { + JSONObject stor_jo = stor_ja.getJSONObject(i); + JSONObject stor_cas = new JSONObject(); + stor_cas.put("value", stor_jo.getString("stor_id")); + stor_cas.put("label", stor_jo.getString("stor_name")); + HashMap map = new HashMap<>(); + map.put("flag", "2"); + map.put("stor_id", stor_jo.getString("stor_id")); + map.put("sect_type_attr", (String) whereJson.get("sect_type_attr")); + JSONArray ja = WQL.getWO("QST_SECT_ATTR").addParamMap(map).process().getResultJSONArray(0); + if (ja.size() > 0) { + JSONArray sect_ja = new JSONArray(); + for (int j = 0; j < ja.size(); j++) { + JSONObject sect_jo = ja.getJSONObject(j); + JSONObject sect_cas = new JSONObject(); + sect_cas.put("value", sect_jo.getString("sect_id")); + sect_cas.put("label", sect_jo.getString("sect_name")); + sect_ja.add(sect_cas); + } + stor_cas.put("children", sect_ja); + } + new_ja.add(stor_cas); + } + JSONObject jo = new JSONObject(); + jo.put("content", new_ja); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(JSONObject json) { + + String stor_id = json.getString("stor_id"); + JSONObject st_ivt_bsRealStorAttr = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query(" stor_id = '" + stor_id + "' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(st_ivt_bsRealStorAttr)){ + throw new BadRequestException("该库区所属的仓库已禁用,请先启用该仓库!"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("st_ivt_sectattr").update(json); + + String sect_id = json.getString("sect_id"); + json = new JSONObject(); + json.put("sect_id",sect_id); + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("st_ivt_structattr").update(json," sect_id = '" + sect_id + "'"); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StorattrServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StorattrServiceImpl.java new file mode 100644 index 000000000..6fccddd7f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StorattrServiceImpl.java @@ -0,0 +1,219 @@ + +package org.nl.wms.basedata.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-08 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class StorattrServiceImpl implements StorattrService { + + @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"); + JSONObject jo = WQL.getWO("QST_STOR_ATTR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); + return jo; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(StorattrDto.class); + return list; + } + + @Override + public StorattrDto findById(Long stor_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONObject json = wo.query("stor_id =" + stor_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final StorattrDto obj = json.toJavaObject(StorattrDto.class); + return obj; + } + + @Override + public StorattrDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONObject json = wo.query("stor_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final StorattrDto obj = json.toJavaObject(StorattrDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(StorattrDto dto) { + String stor_code = dto.getStor_code(); + StorattrDto storattrDto = this.findByCode(stor_code); + if (storattrDto != null && storattrDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的仓库编号"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setStor_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + //TODO + dto.setSyscompanyid(18L); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StorattrDto dto) { + StorattrDto entity = this.findById(dto.getStor_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String stor_code = dto.getStor_code(); + StorattrDto storattrDto = this.findByCode(stor_code); + if (storattrDto != null && !dto.getStor_id().equals(storattrDto.getStor_id()) && storattrDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的供应商编号"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setSyscompanyid(dto.getSysdeptid()); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + for (Long stor_id : ids) { + JSONObject param = new JSONObject(); + param.put("stor_id", String.valueOf(stor_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + public JSONObject getStor(Map whereJson) { + String is_materialstore = (String) whereJson.get("is_materialstore"); + String is_virtualstore = (String) whereJson.get("is_virtualstore"); + String is_semi_finished = (String) whereJson.get("is_semi_finished"); + String is_productstore = (String) whereJson.get("is_productstore"); + String is_attachment = (String) whereJson.get("is_attachment"); + String is_reversed = (String) whereJson.get("is_reversed"); + HashMap map = new HashMap<>(); + map.put("flag", "2"); + if (!StrUtil.isEmpty(is_materialstore)) { + map.put("is_materialstore", is_materialstore); + } + if (!StrUtil.isEmpty(is_virtualstore)) { + map.put("is_virtualstore", is_virtualstore); + } + if (!StrUtil.isEmpty(is_semi_finished)) { + map.put("is_semi_finished", is_semi_finished); + } + if (!StrUtil.isEmpty(is_productstore)) { + map.put("is_productstore", is_productstore); + } + if (!StrUtil.isEmpty(is_attachment)) { + map.put("is_attachment", is_attachment); + } + if (!StrUtil.isEmpty(is_reversed)) { + map.put("is_reversed", is_reversed); + } + JSONArray ja = WQL.getWO("QST_STOR_ATTR").addParamMap(map).process().getResultJSONArray(0); + JSONObject jo = new JSONObject(); + jo.put("content", ja); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(JSONObject json) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").update(json); + + //同时修改该stor_id仓库下仓位和库区的启用状态 + String stor_id = json.getString("stor_id"); + json = new JSONObject(); + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("st_ivt_structattr").update(json, "stor_id = '" + stor_id + "'"); + + json = new JSONObject(); + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("st_ivt_sectattr").update(json, "stor_id = '" + stor_id + "'"); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java new file mode 100644 index 000000000..428669501 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java @@ -0,0 +1,247 @@ + +package org.nl.wms.basedata.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.st.service.SectattrService; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.StructattrService; +import org.nl.wms.basedata.st.service.dto.SectattrDto; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author zhouz + * @description 服务实现 + * @date 2021-12-09 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class StructattrServiceImpl implements StructattrService { + + @Autowired + private SectattrService sectattrService; + @Autowired + private StorattrService storattrService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = (String) whereJson.get("search"); + HashMap map = new HashMap<>(); + if (StrUtil.isNotEmpty(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")); + map.put("lock_type", (String) whereJson.get("lock_type")); + JSONObject jo = WQL.getWO("QST_STRUCT_ATTR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "struct_code asc"); + return jo; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(StructattrDto.class); + return list; + } + + @Override + public StructattrDto findById(Long struct_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject json = wo.query("struct_id =" + struct_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final StructattrDto obj = json.toJavaObject(StructattrDto.class); + return obj; + } + + @Override + public StructattrDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject json = wo.query("struct_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final StructattrDto obj = json.toJavaObject(StructattrDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(StructattrDto dto) { + String struct_code = dto.getStruct_code(); + StructattrDto structattrDto = this.findByCode(struct_code); + if (structattrDto != null && structattrDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的库区编号"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setStruct_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + SectattrDto sectattrDto = sectattrService.findById(dto.getSect_id()); + StorattrDto storattrDto = storattrService.findById(sectattrDto.getStor_id()); + dto.setSect_code(sectattrDto.getSect_code()); + dto.setSect_name(sectattrDto.getSect_name()); + dto.setStor_id(storattrDto.getStor_id()); + dto.setStor_code(storattrDto.getStor_code()); + dto.setStor_name(storattrDto.getStor_name()); + + String storagevehicle_code = dto.getStoragevehicle_code(); + if (ObjectUtil.isNotEmpty(storagevehicle_code)) { + WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONObject obj = vehicleTab.query("storagevehicle_code = '" + storagevehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(obj)) throw new BadRequestException("未发现载具号为【" + storagevehicle_code + "】的载具信息"); + + dto.setStoragevehicle_id(obj.getLong + ("storagevehicle_id")); + dto.setStoragevehicle_type(obj.getString("storagevehicle_type")); + } + + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + + //根据仓位更新点位载具和锁定信息 + // 点位基础表【SCH_BASE_Point】 +/* JSONObject param = new JSONObject(); + param.put("is_used", dto.getIs_used()); + param.put("vehicle_code", dto.getStoragevehicle_code()); + param.put("lock_type", dto.getLock_type()); + WQLObject.getWQLObject("SCH_BASE_Point").update(param, "point_code = '" + dto.getStruct_code() + "'");*/ + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StructattrDto dto) { + StructattrDto entity = this.findById(dto.getStruct_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String struct_code = dto.getStruct_code(); + StructattrDto structattrDto = this.findByCode(struct_code); + if (structattrDto != null && !dto.getStruct_id().equals(structattrDto.getStruct_id()) && structattrDto.getIs_delete().equals("0")) { + throw new BadRequestException("存在相同的库区编号"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + SectattrDto sectattrDto = sectattrService.findById(dto.getSect_id()); + StorattrDto storattrDto = storattrService.findById(sectattrDto.getStor_id()); + dto.setSect_code(sectattrDto.getSect_code()); + dto.setSect_name(sectattrDto.getSect_name()); + dto.setStor_id(storattrDto.getStor_id()); + dto.setStor_code(storattrDto.getStor_code()); + dto.setStor_name(storattrDto.getStor_name()); + + String storagevehicle_code = dto.getStoragevehicle_code(); + if (ObjectUtil.isNotEmpty(storagevehicle_code)) { + WQLObject vehicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); + JSONObject obj = vehicleTab.query("storagevehicle_code = '" + storagevehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(obj)) throw new BadRequestException("未发现载具号为【" + storagevehicle_code + "】的载具信息"); + + dto.setStoragevehicle_id(obj.getLong + ("storagevehicle_id")); + dto.setStoragevehicle_type(obj.getString("storagevehicle_type")); + } + + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + +/* //根据仓位更新点位载具和锁定信息 + // 点位基础表【SCH_BASE_Point】 + JSONObject param = new JSONObject(); + param.put("is_used", dto.getIs_used()); + param.put("vehicle_code", dto.getStoragevehicle_code()); + param.put("lock_type", dto.getLock_type()); + WQLObject.getWQLObject("SCH_BASE_Point").update(param, "point_code = '" + dto.getStruct_code() + "'");*/ + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + for (Long struct_id : ids) { + JSONObject param = new JSONObject(); + param.put("struct_id", String.valueOf(struct_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(JSONObject json) { + + String sect_id = json.getString("sect_id"); + JSONObject st_ivt_bsRealStorAttr = WQLObject.getWQLObject("ST_IVT_SectAttr").query(" sect_id = '" + sect_id + "' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(st_ivt_bsRealStorAttr)){ + throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String struct_id = json.getString("struct_id"); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("st_ivt_structattr").update(json); + + json = new JSONObject(); + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("sch_base_point").update(json, " point_id = '" + struct_id + "'"); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java new file mode 100644 index 000000000..1e11b60c2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java @@ -0,0 +1,148 @@ + +package org.nl.wms.basedata.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.st.service.StructivtService; +import org.nl.wms.basedata.st.service.dto.StructivtDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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; + +/** +* @description 服务实现 +* @author geng by +* @date 2022-06-02 +**/ +@Service +@RequiredArgsConstructor +@Slf4j +public class StructivtServiceImpl implements StructivtService { + private final ClassstandardService classstandardService; + + @Override + public Map queryAll(Map whereJson, Pageable page){ + String material = MapUtil.getStr(whereJson, "material"); + String struct = MapUtil.getStr(whereJson, "struct"); + String region_id = MapUtil.getStr(whereJson, "region_id"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("region_id", region_id); + if (StrUtil.isNotEmpty(material)) { + map.put("material", "%" + material + "%"); + } + if (StrUtil.isNotEmpty(struct)) { + map.put("struct", "%" + struct + "%"); + } + JSONObject jsonObject = WQL.getWO("QST_STRUCTIVT001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.instorage_time desc"); + return jsonObject; + } + + @Override + public List queryAll(Map whereJson){ + WQLObject wo = WQLObject.getWQLObject("st_ivt_structivt"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(StructivtDto.class); + return null; + } + + @Override + public StructivtDto findById(Long stockrecord_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structivt"); + JSONObject json = wo.query("stockrecord_id = '" + stockrecord_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( StructivtDto.class); + } + return null; + } + + @Override + public StructivtDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structivt"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( StructivtDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(StructivtDto dto) { + String now = DateUtil.now(); + dto.setStockrecord_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setInstorage_time(now); + WQLObject wo = WQLObject.getWQLObject("st_ivt_structivt"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StructivtDto dto) { + StructivtDto entity = this.findById(dto.getStockrecord_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + WQLObject wo = WQLObject.getWQLObject("st_ivt_structivt"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_structivt"); + for (Long stockrecord_id: ids) { + JSONObject param = new JSONObject(); + param.put("stockrecord_id", String.valueOf(stockrecord_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + public JSONArray getStruct() { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + final JSONArray resultJSONArray = wo.query("is_delete = '0'").getResultJSONArray(0); + return resultJSONArray; + } + + @Override + public JSONObject getStructById(JSONObject param) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_structattr"); + final JSONObject jsonObject = wo.query("is_delete = '0' and struct_id = '" + param.getString("struct_id") + "'").uniqueResult(0); + return jsonObject; + } + + @Override + public JSONArray getUnits() { + WQLObject wo = WQLObject.getWQLObject("md_pb_measureunit"); + final JSONArray resultJSONArray = wo.query("is_delete = '0'").getResultJSONArray(0); + return resultJSONArray; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructrelamaterialServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructrelamaterialServiceImpl.java new file mode 100644 index 000000000..3ffd99ea7 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructrelamaterialServiceImpl.java @@ -0,0 +1,176 @@ + +package org.nl.wms.basedata.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.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.basedata.st.service.StructrelamaterialService; +import org.nl.wms.basedata.st.service.dto.StructrelamaterialDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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-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) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setMaterial_type_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setSet_name(nickName); + dto.setSet_time(now); + + 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) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + 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", now); + wo.update(param); + } + } + + @Override + public void insertSet(Map whereJson) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + 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", 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", 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/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql new file mode 100644 index 000000000..2ba88dab4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql @@ -0,0 +1,226 @@ +[交易说明] + 交易名: 将海亮的物料导入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/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_IVT_MATERIALSET.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_IVT_MATERIALSET.wql new file mode 100644 index 000000000..3eff3c770 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_IVT_MATERIALSET.wql @@ -0,0 +1,78 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为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/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_SECT_ATTR.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_SECT_ATTR.wql new file mode 100644 index 000000000..cae0762ff --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_SECT_ATTR.wql @@ -0,0 +1,90 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为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/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql new file mode 100644 index 000000000..088b2ef56 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql @@ -0,0 +1,104 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为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 + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 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 + ENDSELECT + ENDQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql new file mode 100644 index 000000000..e23ba0529 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql @@ -0,0 +1,83 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.struct TYPEAS s_string + 输入.material TYPEAS s_string + 输入.region_id TYPEAS f_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + ivt.*, + point.point_code, + point.point_name, + mater.material_code, + mater.material_name, + unit.unit_name, + region.region_name + FROM + ST_IVT_StructIvt ivt + LEFT JOIN sch_base_point point ON ivt.struct_id = point.point_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id + LEFT JOIN SCH_BASE_Region region ON region.region_id = ivt.region_id + WHERE + 1 = 1 + + OPTION 输入.struct <> "" + ( + ivt.struct_code like 输入.struct or + ivt.struct_name like 输入.struct + ) + ENDOPTION + OPTION 输入.material <> "" + ( + mater.material_code like 输入.material or + mater.material_name like 输入.material + ) + ENDOPTION + + OPTION 输入.region_id <> "" + ivt.region_id = 输入.region_id + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql new file mode 100644 index 000000000..2f75599d2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql @@ -0,0 +1,79 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为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/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls new file mode 100644 index 000000000..ffdc4110b Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java b/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java new file mode 100644 index 000000000..16e42d94a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/common/StructFindUtil.java @@ -0,0 +1,91 @@ +package org.nl.wms.common; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; + +public class StructFindUtil { + public static JSONObject getInStruct(JSONObject jsonObject) { + String material_id = jsonObject.getString("material_id"); + String area_type = jsonObject.getString("area_type"); + String vehicle_code = jsonObject.getString("vehicle_code"); + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("托盘不能为空!"); + } + //根据托盘找托盘类型, + JSONObject vehicleObj = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicleObj)) { + throw new BadRequestException("未找到托盘号为'" + vehicle_code + "' 托盘信息!"); + } + if (StrUtil.isEmpty(material_id)) { + throw new BadRequestException("物料不能为空!"); + } + if (StrUtil.isEmpty(area_type)) { + throw new BadRequestException("区域不能为空!"); + } + String vehice_type = vehicleObj.getString("vehicle_type"); + JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "2") + .addParam("material_id", material_id).addParam("area_type", area_type).addParam("vehice_type", vehice_type).process().uniqueResult(0); + return result; + } + + public static JSONObject getOutStruct(JSONObject jsonObject) { + String material_id = jsonObject.getString("material_id"); + String area_type = jsonObject.getString("area_type"); + String is_full = jsonObject.getString("is_full"); + String workprocedure_id = jsonObject.getString("workprocedure_id"); + + if (StrUtil.isEmpty(material_id)) { + throw new BadRequestException("物料不能为空!"); + } + if (StrUtil.isEmpty(area_type)) { + throw new BadRequestException("区域不能为空!"); + } + if (StrUtil.isEmpty(is_full)) { + throw new BadRequestException("是否满托不能为空!"); + } + if (StrUtil.isEmpty(workprocedure_id)) { + throw new BadRequestException("工序不能为空!"); + } + JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "3") + .addParam("material_id", material_id).addParam("area_type", area_type) + .addParam("is_full", is_full).addParam("workprocedure_id", workprocedure_id) + .process().uniqueResult(0); + return result; + } + + public static JSONObject getEmptyVehicleInStruct(JSONObject jsonObject) { + String area_type = jsonObject.getString("area_type"); + String vehicle_code = jsonObject.getString("vehicle_code"); + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("托盘不能为空!"); + } + //根据托盘找托盘类型, + JSONObject vehicleObj = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code='" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicleObj)) { + throw new BadRequestException("未找到托盘号为'" + vehicle_code + "' 托盘信息!"); + } + if (StrUtil.isEmpty(area_type)) { + throw new BadRequestException("区域不能为空!"); + } + String vehice_type = vehicleObj.getString("vehicle_type"); + JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "4") + .addParam("area_type", area_type).addParam("vehice_type", vehice_type).process().uniqueResult(0); + return result; + } + + public static JSONObject getEmptyVehicleOutStruct(JSONObject jsonObject) { + String area_type = jsonObject.getString("area_type"); + String vehicle_type = jsonObject.getString("vehicle_type"); + if (StrUtil.isEmpty(area_type)) { + throw new BadRequestException("区域不能为空!"); + } + JSONObject result = WQL.getWO("QSTRUCT_RULE").addParam("flag", "5") + .addParam("area_type", area_type).addParam("vehicle_type", vehicle_type).process().uniqueResult(0); + return result; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/2.txt b/nladmin-system/src/main/java/org/nl/wms/ext/acs/2.txt new file mode 100644 index 000000000..e69de29bb diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java new file mode 100644 index 000000000..734c23226 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -0,0 +1,51 @@ + +package org.nl.wms.ext.acs.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ludj + * @date 2021-07-21 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "acs接收lms") +@RequestMapping("/api/wms/task") +@Slf4j +public class AcsToWmsController { + private final AcsToWmsService acsToWmsService; + + @PostMapping("/status") + @Log("ACS给WMS反馈任务状态") + @ApiOperation("ACS给WMS反馈任务状态") + public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { + return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); + } + + @PostMapping("/orderFinish") + @Log("ACS给WMS下发工单完成状态") + @ApiOperation("ACS给WMS下发工单完成状态") + public ResponseEntity orderFinish(@RequestBody String string) { + return new ResponseEntity<>(acsToWmsService.orderFinish(string), HttpStatus.OK); + } + + @PostMapping("/apply") + @Log("申请任务") + @ApiOperation("申请任务") + public ResponseEntity apply(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToWmsService.apply(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java b/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java new file mode 100644 index 000000000..4b72d308b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java @@ -0,0 +1,82 @@ + +package org.nl.wms.ext.acs.rest; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @author ludj + * @date 2021-07-21 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "wms发送acs") +@RequestMapping("/api/wms/task") +@Slf4j +public class WmsToAcsController { + private final WmsToAcsService wmsToAcsService; + + @PostMapping + @Log("WMS给ACS发送任务") + @ApiOperation("WMS给ACS发送任务") + public ResponseEntity issueTaskToAcs(@RequestBody Map whereJson) { + JSONArray arr = JSONArray.parseArray(JSON.toJSONString(whereJson.get("data"))); + return new ResponseEntity<>(wmsToAcsService.issueTaskToAcs(arr), HttpStatus.OK); + } + + @PostMapping("/cancel") + @Log("WMS主动取消ACS任务") + @ApiOperation("WMS主动取消ACS任务") + public ResponseEntity cancelToAcs(@RequestBody Map whereJson) { + JSONArray arr = JSONArray.parseArray(JSON.toJSONString(whereJson.get("data"))); + return new ResponseEntity<>(wmsToAcsService.cancelToAcs(arr), HttpStatus.OK); + } + + @PostMapping("/updatePointStatus") + @Log("WMS更新ACS点位状态") + @ApiOperation("WMS更新ACS点位状态") + public ResponseEntity updatePointStatus(@RequestBody Map whereJson) { + JSONArray arr = JSONArray.parseArray(JSON.toJSONString(whereJson.get("data"))); + return new ResponseEntity<>(wmsToAcsService.updatePointStatus(arr), HttpStatus.OK); + } + + @PostMapping("/order") + @Log("WMS开工向acs下发工单") + @ApiOperation("WMS开工向acs下发工单") + public ResponseEntity startWork(@RequestBody Map whereJson) { + JSONArray arr = JSONArray.parseArray(JSON.toJSONString(whereJson.get("data"))); + return new ResponseEntity<>(wmsToAcsService.order(arr), HttpStatus.OK); + } + + @PostMapping("/orderStatusUpdate") + @Log("WMS向acs发送强制完成") + @ApiOperation("WMS强制完成向acs发送强制完成") + public ResponseEntity orderStatusUpdate(@RequestBody Map whereJson) { + JSONArray arr = JSONArray.parseArray(JSON.toJSONString(whereJson.get("data"))); + return new ResponseEntity<>(wmsToAcsService.orderStatusUpdate(arr), HttpStatus.OK); + } + + @PostMapping("/querydevice") + @Log("WMS向acs发送获取点位状态") + @ApiOperation("WMS向acs发送获取点位状态") + public ResponseEntity getPointStatus(@RequestBody JSONArray whereJson) { + return new ResponseEntity<>(wmsToAcsService.getPointStatus(whereJson), HttpStatus.OK); + } + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java new file mode 100644 index 000000000..a82f446d2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -0,0 +1,44 @@ +package org.nl.wms.ext.acs.service; + +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +public interface AcsToWmsService { + + + /** + * ACS客户端--->WMS服务端 + * ACS向WMS反馈任务状态 + * + * @param string 条件 + * @return Map + */ + + Map receiveTaskStatusAcs(String string); + + /** + * ACS客户端--->WMS服务端 + * ACS向WMS反馈点位状态 + * @param jsonObject 条件 + * @return Map + */ + + Map receivePointStatusFromAcs(Map jsonObject); + + /** + * ACS给WMS下发工单强制完成状态 + * @param string + * @return + */ + Map orderFinish(String string); + + /** + * ACS客户端--->LMS服务端 + * 任务申请 + * + * @param whereJson 条件 + * @return JSONObject + */ + JSONObject apply(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java new file mode 100644 index 000000000..3735345de --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java @@ -0,0 +1,58 @@ +package org.nl.wms.ext.acs.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * + */ +public interface WmsToAcsService { + /** + * WMS客户端--->ACS服务端 + * 下发任务 + * + * @param arr 条件 + * @return Map + */ + + Map issueTaskToAcs(JSONArray arr); + + /** + * WMS客户端--->ACS服务端 + * 取消任务 + * + * @param arr 条件 + * @return Map + */ + + Map cancelToAcs(JSONArray arr); + + /** + * 更新ACS点位 + * @param arr + * @return + */ + Map updatePointStatus(JSONArray arr); + + /** + * wms 开工向acs发送任务 + * @param arr + * @return + */ + Map order(JSONArray arr); + + /** + * wms工单强制完成向acs发送强制完成 + * @param arr + * @return + */ + Map orderStatusUpdate(JSONArray arr); + + /** + * 获取点位状态 + * @return + */ + JSONObject getPointStatus(JSONArray whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java new file mode 100644 index 000000000..ee67e4834 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -0,0 +1,549 @@ +package org.nl.wms.ext.acs.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.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +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.ext.acs.service.AcsToWmsService; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.TaskService; +import org.nl.wms.sch.service.dto.TaskDto; +import org.nl.wms.sch.tasks.*; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +@Service +@RequiredArgsConstructor +@Slf4j +public class AcsToWmsServiceImpl implements AcsToWmsService { + private final TaskService taskService; + + /** + * task_uuid:任务标识 + * task_code:任务编码 + * task_status:1:执行中,2:完成 ,3:acs取消 + * + * @param string 条件 + * @returnzss + */ + @Override + public Map receiveTaskStatusAcs(String string) { + JSONArray array = JSONArray.parseArray(string); + //返回处理失败的任务 + JSONArray errArr = new JSONArray(); + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + String task_uuid = row.getString("task_id"); + TaskDto taskDto = taskService.findById(task_uuid); + String processing_class = taskDto.getHandle_class(); + //1:执行中,2:完成 ,3:acs取消 + String acs_task_status = row.getString("task_status"); + String message = ""; + String status = ""; + if ("1".equals(acs_task_status)) { + status = TaskStatusEnum.EXECUTING.getCode(); + } + if ("2".equals(acs_task_status)) { + status = TaskStatusEnum.FINISHED.getCode(); + } + if ("3".equals(acs_task_status)) { + status = "0"; + } + // 任务处理类 + try { + Class clz = Class.forName(processing_class); + Object obj = clz.newInstance(); + // 调用每个任务类的forceFinishInst()强制结束方法 + Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class); + m.invoke(obj, row, status); + } catch (InvocationTargetException e) { + e.printStackTrace(); + //空指针 + if (ObjectUtil.isNull(e.getTargetException().getMessage())) { + message = e.getTargetException().toString(); + } else { + message = e.getTargetException().getMessage(); + } + log.info("任务状态更新失败:{}", message); + + JSONObject json = new JSONObject(); + json.put("task_uuid", task_uuid); + json.put("message", message); + errArr.add(json); + + } catch (Exception e) { + e.printStackTrace(); + message = e.getMessage(); + log.info("任务状态更新失败:{}", message); + + JSONObject json = new JSONObject(); + json.put("task_uuid", task_uuid); + json.put("message", message); + errArr.add(json); + + } + } + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + result.put("data", new JSONObject()); + result.put("errArr", errArr); + return result; + } + + @Override + public Map receivePointStatusFromAcs(Map jsonObject) { + return null; + } + + @Override + public Map orderFinish(String string) { + JSONObject orderJson = JSONObject.parseObject(string); + String ext_order_id = orderJson.getString("ext_order_id"); + // JSONArray array = JSONArray.parseArray(string); + String now = DateUtil.now(); + WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + JSONObject map = new JSONObject(); + map.put("produceorder_id", ext_order_id); + map.put("order_status", "04"); + map.put("update_optid", 1111111111); + map.put("device_id", ""); + map.put("update_optname", "acs"); + map.put("update_time", now); + map.put("realproduceend_date", now); + wo.update(map, "produceorder_id = '" + ext_order_id + "'"); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务状态反馈成功!"); + return result; + } + + @Override + @Transactional + public JSONObject apply(JSONObject whereJson) { + String type = whereJson.getString("type"); + String point_code = whereJson.getString("point_code"); + String vehicle_num = whereJson.getString("vehicle_num"); + String vehicle_type = whereJson.getString("vehicle_type"); + String vehicle_code = whereJson.getString("vehicle_code"); + String qty = whereJson.getString("qty"); + + if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空"); + if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); + + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord");// 空载具作业记录表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");// 空载具作业记录表 + WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); // 区域出入库表 + WQLObject veQtyTab = WQLObject.getWQLObject("PDM_BI_vehicleQty"); // 托盘对应数量表 + + + /* + * 根据type判断是什么业务类型: + * 1.共挤线申请空盘 + * 2.共挤线满托入库 + * 3.油漆线申请空盘 + * 4.油漆线申请物料 + * 5.油漆线空盘入库 + * 6.一楼空盘入库 (有载具号) + * 7.油漆线->输送线 + * 8.豪凯自动线下料入库 + */ + JSONObject resuft = new JSONObject(); + try { + if (StrUtil.equals(type, "1")) { + // 1.共挤线申请空盘: 调用空托盘出库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("next_point_code", point_code); + param.put("qty", vehicle_num); + // 创建任务 + CallEmpVehicleTask taskBean = SpringContextHolder.getBean(CallEmpVehicleTask.class); + String task_id = taskBean.createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty", vehicle_num); + jsonEmpParam.put("task_id", task_id); + jsonEmpParam.put("io_type", "1"); + this.createEmp(jsonEmpParam); + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + + } else if (StrUtil.equals(type, "2")) { + // 2.共挤线满托入库: 调用物料入库处理类创建任务 + if (ObjectUtil.isEmpty(qty) || (StrUtil.equals(qty, "0"))) + throw new BadRequestException("物料数量不能为空或者为0"); + + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + SendMaterialTask taskBean = SpringContextHolder.getBean(SendMaterialTask.class); + String task_id = taskBean.createTask(param); + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + // 插入区域出入库表 + param.put("next_point_code", jsonTask.getString("next_point_code")); + param.put("qty", qty); + param.put("task_id", task_id); + param.put("io_type", "0"); + JSONObject json = this.inCreateRegion(param); + // 回显任务载具类型 + jsonTask.put("vehicle_type", json.getString("vehicle_type")); + taskTab.update(jsonTask); + + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + } else if (StrUtil.equals(type, "3")) { + // 3.油漆线申请空盘: 调用空托盘出库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("next_point_code", point_code); + param.put("qty", vehicle_num); + // 创建任务 + CallEmpVehicleTask taskBean = SpringContextHolder.getBean(CallEmpVehicleTask.class); + String task_id = taskBean.createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty", vehicle_num); + jsonEmpParam.put("task_id", task_id); + jsonEmpParam.put("io_type", "1"); + this.createEmp(jsonEmpParam); + + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + } else if (StrUtil.equals(type, "4")) { + // 4.油漆线申请物料: 调用物料出库库处理类创建任务 + JSONObject param = new JSONObject(); + param.put("next_point_code", point_code); + param.put("io_type", "1"); + // 插入区域出库单 + JSONObject json = this.outCreateRegion(param); + + param.put("vehicle_type", json.getString("vehicle_type")); + param.put("material_id", json.getString("material_id")); + param.put("create_mode", json.getString("create_mode")); + param.put("iostorinv_id", json.getString("iostorinv_id")); + // 创建任务 + CallMaterialTask taskBean = SpringContextHolder.getBean(CallMaterialTask.class); + String task_id = taskBean.createTask(param); + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + // 回显出库单:起始点位、起始区域、任务id + JSONObject jsonRegion = regionTab.query("iostorinv_id = '" + json.getString("iostorinv_id") + "'").uniqueResult(0); + jsonRegion.put("start_point_code", jsonTask.getString("start_point_code")); + Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(jsonTask.getString("start_point_code")).getRegion_id(); + jsonRegion.put("start_region_id", String.valueOf(start_region_id)); + jsonRegion.put("task_id", Long.valueOf(task_id)); + regionTab.update(jsonRegion); + + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + } else if (StrUtil.equals(type, "5")) { + // 5.油漆线空盘入库: 调用空托盘入库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + param.put("qty", vehicle_num); + // 创建任务 + SendEmpVehicleTask taskBean = SpringContextHolder.getBean(SendEmpVehicleTask.class); + String task_id = taskBean.createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty", vehicle_num); + jsonEmpParam.put("task_id", task_id); + jsonEmpParam.put("io_type", "0"); + this.createEmp(jsonEmpParam); + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + + } else if (StrUtil.equals(type, "6")) { + // 6.一楼空盘入库 (有载具号): 调用空托盘入库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("载具号不能为空"); + JSONObject param = new JSONObject(); + + // 查询载具号对应的数量 + JSONObject jsonVeQty = new JSONObject(); + if (ObjectUtil.isEmpty(qty)) { + jsonVeQty = veQtyTab.query("vehicle_code = '" + vehicle_code + "' and is_task = '0' order by create_time DESC").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVeQty)) throw new BadRequestException("请先手持扫码"); + } else { + jsonVeQty.put("qty", qty); + } + + param.put("qty", jsonVeQty.getString("qty")); + param.put("start_point_code", point_code); + param.put("vehicle_code", vehicle_code); + // 创建任务 + SendEmpVehicleTask taskBean = SpringContextHolder.getBean(SendEmpVehicleTask.class); + String task_id = taskBean.createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty", jsonVeQty.getString("qty")); + jsonEmpParam.put("task_id", task_id); + jsonEmpParam.put("io_type", "0"); + this.createEmp(jsonEmpParam); + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + // 更新载具对应数量表 + jsonVeQty.put("is_task", "1"); + veQtyTab.update(jsonVeQty); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + } else if (StrUtil.equals(type, "7")) { + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + // 1.生成起点确定的任务 + SpringContextHolder.getBean(PointToPointTask.class).createTask(param); + + resuft.put("status", "200"); + resuft.put("message", ""); + } else if (StrUtil.equals(type, "8")) { + // 8.豪凯自动线下料入库 + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + SendMaterialTask taskBean = SpringContextHolder.getBean(SendMaterialTask.class); + String task_id = taskBean.createTask(param); + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + // 插入区域出入库表 + param.put("next_point_code", jsonTask.getString("next_point_code")); + if (ObjectUtil.isEmpty(qty)) { + param.put("qty", "1"); // 为空先写死1 + } else { + param.put("qty", qty); + } + param.put("task_id", task_id); + param.put("io_type", "0"); + JSONObject json = this.inCreateRegion(param); + // 回显任务载具类型 + jsonTask.put("vehicle_type", json.getString("vehicle_type")); + taskTab.update(jsonTask); + + // 下发 + JSONObject jsonObject = taskBean.renotifyAcs(task_id); + if (StrUtil.equals(jsonObject.getString("status"), "200")) { + // 成功返回 更新任务状态 + resuft.put("status", "200"); + resuft.put("message", ""); + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } else { + throw new BadRequestException(jsonObject.getString("message")); + } + } + } catch (Exception e) { + resuft.put("status", ((BadRequestException) e).getStatus()); + resuft.put("message", e.getMessage()); + } + return resuft; + } + + @Transactional + public void createEmp(JSONObject json) { + String vehicle_qty = json.getString("vehicle_qty"); + String task_id = json.getString("task_id"); + String io_type = json.getString("io_type"); + + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord");// 空载具作业记录表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");// 空载具作业记录表 + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + JSONObject jsonEmp = new JSONObject(); + jsonEmp.put("record_uuid", IdUtil.getSnowflake(1, 1).nextId()); + jsonEmp.put("bill_code", CodeUtil.getNewCode("KZJ_BILL_CODE")); + jsonEmp.put("io_type", io_type); + jsonEmp.put("bill_status", "20"); + jsonEmp.put("vehicle_qty", vehicle_qty); + jsonEmp.put("start_point_code", jsonTask.getString("start_point_code")); + Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(jsonTask.getString("start_point_code")).getRegion_id(); + jsonEmp.put("start_region_id", start_region_id); + jsonEmp.put("next_point_code", jsonTask.getString("next_point_code")); + Long next_region_id = SpringContextHolder.getBean(PointService.class).findByCode(jsonTask.getString("next_point_code")).getRegion_id(); + jsonEmp.put("end_region_id", next_region_id); + jsonEmp.put("task_uuid", task_id); + jsonEmp.put("create_id", SecurityUtils.getCurrentUserId()); + jsonEmp.put("create_name", SecurityUtils.getCurrentNickName()); + jsonEmp.put("create_time", DateUtil.now()); + empTab.insert(jsonEmp); + } + + @Transactional + public JSONObject inCreateRegion(JSONObject json) { + String start_point_code = json.getString("start_point_code"); + String next_point_code = json.getString("next_point_code"); + String qty = json.getString("qty"); + Long task_id = json.getLongValue("task_id"); + String io_type = json.getString("io_type"); + + WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + + + JSONObject jsonRegion = new JSONObject(); + jsonRegion.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonRegion.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); + jsonRegion.put("io_type", io_type); + jsonRegion.put("bill_status", "20"); + // 根据起点点位找到起点设备,根据设备找到对应工单, 根据工单找到对应物料及托盘类型 + String device_code = start_point_code.substring(0, start_point_code.indexOf("_")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + jsonRegion.put("material_id", jsonOrder.getString("material_id")); + jsonRegion.put("qty", qty); + JSONObject jsonMater = materTab.query("material_id ='" + jsonOrder.getString("material_id") + "'").uniqueResult(0); + jsonRegion.put("qty_unit_id", jsonMater.getString("base_unit_id")); + + jsonRegion.put("start_point_code", start_point_code); + Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(start_point_code).getRegion_id(); + jsonRegion.put("start_region_id", String.valueOf(start_region_id)); + jsonRegion.put("end_point_code", next_point_code); + Long end_region_id = SpringContextHolder.getBean(PointService.class).findByCode(next_point_code).getRegion_id(); + jsonRegion.put("end_region_id", String.valueOf(end_region_id)); + + jsonRegion.put("create_mode", "02"); + jsonRegion.put("task_id", task_id); + jsonRegion.put("create_id", SecurityUtils.getCurrentUserId()); + jsonRegion.put("create_name", SecurityUtils.getCurrentNickName()); + jsonRegion.put("create_time", DateUtil.now()); + regionTab.insert(jsonRegion); + + JSONObject resuft = new JSONObject(); + resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); + resuft.put("material_id", jsonRegion.getString("material_id")); + resuft.put("create_mode", jsonRegion.getString("create_mode")); + return resuft; + } + + @Transactional + public JSONObject outCreateRegion(JSONObject json) { + String next_point_code = json.getString("next_point_code"); + String io_type = json.getString("io_type"); + + WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + + JSONObject jsonRegion = new JSONObject(); + jsonRegion.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonRegion.put("bill_code", CodeUtil.getNewCode("OUT_STORE_CODE")); + jsonRegion.put("io_type", io_type); + jsonRegion.put("bill_status", "20"); + // 根据起点点位找到起点设备,根据设备找到对应工单, 根据工单找到对应物料及托盘类型 + String device_code = next_point_code.substring(0, next_point_code.indexOf("_")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + jsonRegion.put("material_id", jsonOrder.getString("material_id")); + jsonRegion.put("qty", "100"); // 暂时先按照100 + JSONObject jsonMater = materTab.query("material_id ='" + jsonOrder.getString("material_id") + "'").uniqueResult(0); + jsonRegion.put("qty_unit_id", jsonMater.getString("base_unit_id")); + + jsonRegion.put("end_point_code", next_point_code); + Long end_region_id = SpringContextHolder.getBean(PointService.class).findByCode(next_point_code).getRegion_id(); + jsonRegion.put("end_region_id", String.valueOf(end_region_id)); + + jsonRegion.put("create_mode", "02"); + jsonRegion.put("create_id", SecurityUtils.getCurrentUserId()); + jsonRegion.put("create_name", SecurityUtils.getCurrentNickName()); + jsonRegion.put("create_time", DateUtil.now()); + regionTab.insert(jsonRegion); + + // 需回显起始点位、起始区域、任务id + JSONObject resuft = new JSONObject(); + resuft.put("iostorinv_id", jsonRegion.getString("iostorinv_id")); + resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); + resuft.put("create_mode", jsonRegion.getString("create_mode")); + resuft.put("material_id", jsonOrder.getString("material_id")); + return resuft; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java new file mode 100644 index 000000000..9c28278bb --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -0,0 +1,57 @@ +package org.nl.wms.ext.acs.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.AcsUtil; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +@RequiredArgsConstructor +@Slf4j +public class WmsToAcsServiceImpl implements WmsToAcsService { + @Override + public Map issueTaskToAcs(JSONArray arr) { + String api = "api/wms/task"; + return AcsUtil.notifyAcs(api, arr); + } + + @Override + public Map cancelToAcs(JSONArray arr) { + String api = "api/wms/cancelTask"; + return AcsUtil.notifyAcs(api, arr); + } + + @Override + public Map updatePointStatus(JSONArray arr) { + JSONObject param = new JSONObject(); + param.put("point_code", ""); + //0,1,2 + param.put("has_goods", ""); + String api = "api/wms/updateDeviceGoods"; + return AcsUtil.notifyAcs(api, arr); + } + + @Override + public Map order(JSONArray arr) { + String api = "api/wms/order"; + return AcsUtil.notifyAcs(api, arr); + } + + @Override + public Map orderStatusUpdate(JSONArray arr) { + String api = "api/wms/orderStatusUpdate"; + return AcsUtil.notifyAcs(api, arr); + } + + @Override + public JSONObject getPointStatus(JSONArray whereJson) { + String api = "api/wms/querydevice"; + return AcsUtil.notifyAcs(api, whereJson); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/auto/AutoQueryTask.java b/nladmin-system/src/main/java/org/nl/wms/ext/auto/AutoQueryTask.java new file mode 100644 index 000000000..e250bc8f1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/auto/AutoQueryTask.java @@ -0,0 +1,140 @@ +package org.nl.wms.ext.auto; + +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.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.tasks.PointToPointTask; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class AutoQueryTask { + + private final WmsToAcsService wmsToAcsService; + + @Transactional + public void run() { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + + PointToPointTask pointTaskBean = SpringContextHolder.getBean(PointToPointTask.class); + + // 1.查找起点为油漆线 物料下料位的任务 + JSONArray taskArr = WQL.getWO("AUTO_QUERYTASK").addParam("flag", "1").process().getResultJSONArray(0); + + for (int i = 0; i < taskArr.size(); i++) { + JSONObject jsonTask = taskArr.getJSONObject(i); + /* + * 1.查找输送线有没有空位 输送线1对1关系 调用获取点位状态接口 + * 2.判断有空位的输送线是否有任务:起点和终点都要判断 + * 输送线点位:SSX01A1 - SSX01A2 ,SSX02A1 - SSX02A2 + */ + // 2.查找输送线空位,调用获取点位状态接口 + JSONArray paramArr = new JSONArray(); + + JSONObject pointA1 = new JSONObject(); + pointA1.put("device_code", "SSX01A1"); + paramArr.add(pointA1); + + JSONObject pointA2 = new JSONObject(); + pointA2.put("device_code", "SSX01A2"); + paramArr.add(pointA2); + + JSONObject pointB1 = new JSONObject(); + pointB1.put("device_code", "SSX02A1"); + paramArr.add(pointB1); + + JSONObject pointB2 = new JSONObject(); + pointB2.put("device_code", "SSX02A2"); + paramArr.add(pointB2); + + JSONObject result = wmsToAcsService.getPointStatus(paramArr); + + if (StrUtil.equals(result.getString("status"), "200")) { + JSONObject jsonPointAfter = new JSONObject(); // 处理后的json + + JSONArray dataArr = result.getJSONArray("data"); + // 3.处理返回的数据,处理后为json,key为点位编码,value为状态 + for (int j = 0; j < dataArr.size(); j++) { + JSONObject jsonObject = dataArr.getJSONObject(j); + + String device_code = jsonObject.getString("device_code"); + switch (device_code) { + case "SSX01A1" : + jsonPointAfter.put("SSX01A1",jsonObject.getString("move")); + break; + case "SSX01A2" : + jsonPointAfter.put("SSX01A2",jsonObject.getString("move")); + break; + case "SSX02A1" : + jsonPointAfter.put("SSX02A1",jsonObject.getString("move")); + break; + case "SSX02A2" : + jsonPointAfter.put("SSX02A2",jsonObject.getString("move")); + break; + } + } + JSONObject map = new JSONObject(); + // 4.1判断SSX01A1 、 SSX01A2是否是空位 无任务 + if (StrUtil.equals(jsonPointAfter.getString("SSX01A1"), "0") && StrUtil.equals(jsonPointAfter.getString("SSX01A2"), "0")) { + // 4.2如果都是空位 则判断是否有正在进行的任务 + map.put("flag", "2"); + map.put("start_point_code", "('SSX01A1','SSX01A2')"); + // 查找起点是否有任务 + JSONArray is_stara = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); + // 查询终点是否有任务 + map.put("flag", "3"); + map.put("end_point_code", "('SSX01A1','SSX01A2')"); + JSONArray is_end = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); + + if (ObjectUtil.isEmpty(is_stara) && ObjectUtil.isEmpty(is_end)) { + // 4.3.更新任务终点点位 + jsonTask.put("next_point_code", "SSX01A1"); + taskTab.update(jsonTask); + // 4.4.下发ACS + JSONObject jsonResultAcs = pointTaskBean.renotifyAcs(jsonTask.getString("task_id")); + + if (StrUtil.equals(jsonResultAcs.getString("status"), "200")) { + // 4.5.下发成功、更新任务状态 + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } + // 5.1判断SSX02A1 、 SSX02A2是否是空位 无任务 + } else if (StrUtil.equals(jsonPointAfter.getString("SSX02A1"), "0") && StrUtil.equals(jsonPointAfter.getString("SSX02A2"), "0")) { + // 5.2如果都是空位 则判断是否有正在进行的任务 + map.put("flag", "2"); + map.put("start_point_code", "('SSX02A1','SSX02A2')"); + // 查找起点是否有任务 + JSONArray is_stara2 = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); + // 查询终点是否有任务 + map.put("flag", "3"); + map.put("end_point_code", "('SSX02A1','SSX02A2')"); + JSONArray is_end2 = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); + + if (ObjectUtil.isEmpty(is_stara2) && ObjectUtil.isEmpty(is_end2)) { + // 5.3.更新任务终点点位 + jsonTask.put("next_point_code", "SSX02A1"); + taskTab.update(jsonTask); + // 5.4.下发ACS + JSONObject jsonResultAcs = pointTaskBean.renotifyAcs(jsonTask.getString("task_id")); + + if (StrUtil.equals(jsonResultAcs.getString("status"), "200")) { + // 4.5.下发成功、更新任务状态 + jsonTask.put("task_status", "05"); + taskTab.update(jsonTask); + } + } + } + } + } + } + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/crm/rest/CrmToLmsController.java b/nladmin-system/src/main/java/org/nl/wms/ext/crm/rest/CrmToLmsController.java new file mode 100644 index 000000000..86d1cefbc --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/crm/rest/CrmToLmsController.java @@ -0,0 +1,39 @@ +package org.nl.wms.ext.crm.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.crm.service.CrmToLmsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "crm发送lms") +@RequestMapping("/api/crm") +@Slf4j +public class CrmToLmsController { + private final CrmToLmsService crmToLmsService; + + @PostMapping("/getCustomerInfo") + @Log("CRM给LMS推送客户信息") + @ApiOperation("CRM给LMS推送客户信息") + public ResponseEntity momRollFoilWeighing(@RequestBody JSONObject jo) { + return new ResponseEntity<>(crmToLmsService.getCustomerInfo(jo), HttpStatus.OK); + } + + @PostMapping("/getCPIvtInfo") + @Log("CRM获取LMS成品库存信息") + @ApiOperation("CRM获取LMS成品库存信息") + public ResponseEntity getCPIvtInfo(@RequestBody JSONObject jo) { + return new ResponseEntity<>(crmToLmsService.getCPIvtInfo(jo), HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/crm/service/CrmToLmsService.java b/nladmin-system/src/main/java/org/nl/wms/ext/crm/service/CrmToLmsService.java new file mode 100644 index 000000000..12d3d69b0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/crm/service/CrmToLmsService.java @@ -0,0 +1,15 @@ +package org.nl.wms.ext.crm.service; + +import com.alibaba.fastjson.JSONObject; + +public interface CrmToLmsService { + /* + * 获取客户信息 + * */ + JSONObject getCustomerInfo(JSONObject jo); + + /* + * CRM获取LMS成品库存信息 + * */ + JSONObject getCPIvtInfo(JSONObject jo); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/crm/service/impl/CrmToLmsServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/crm/service/impl/CrmToLmsServiceImpl.java new file mode 100644 index 000000000..640db5f33 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/crm/service/impl/CrmToLmsServiceImpl.java @@ -0,0 +1,101 @@ +package org.nl.wms.ext.crm.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.crm.service.CrmToLmsService; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CrmToLmsServiceImpl implements CrmToLmsService { + + @Override + public JSONObject getCustomerInfo(JSONObject row) { + + String customer_name = row.getString("CustomerName"); + String description = row.getString("Description"); + String company = row.getString("Company"); + String country = row.getString("Country"); + String state = row.getString("State"); + String city = row.getString("City"); + String address_line1 = row.getString("AddressLine1"); + String zip_code = row.getString("ZipCode"); + String phone_number = row.getString("PhoneNumber"); + String fax_number = row.getString("FaxNumber"); + String web_site = row.getString("WebSite"); + String notes = row.getString("Notes"); + + JSONObject jo = new JSONObject(); + jo.put("id", IdUtil.getSnowflake(1, 1).nextId()); + jo.put("customer_name", customer_name); + jo.put("description", description); + jo.put("company", company); + jo.put("country", country); + jo.put("state", state); + jo.put("city", city); + jo.put("address_line1", address_line1); + jo.put("zip_code", zip_code); + jo.put("phone_number", phone_number); + jo.put("fax_number", fax_number); + jo.put("web_site", web_site); + jo.put("notes", notes); + WQLObject.getWQLObject("MD_CS_CustomerBaseProc").insert(jo); + log.info(jo.toString()); + + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + return result; + } + + @Override + public JSONObject getCPIvtInfo(JSONObject jo) { + log.info("getCPIvtInfo输入参数为:----------------------" + jo.toString()); + /*String material_code = jo.getString("material_code"); + String material_name = jo.getString("material_name"); + String mfgordername = jo.getString("mfgordername"); + String customername = jo.getString("customername"); + String customerdescription = jo.getString("customerdescription"); + + HashMap map = new HashMap<>(); + map.put("")*/ + //将查询条件带入,查询LMS成品库库存信息 + //JSONArray rows = WQL.getWO("").addParamMap(jo).addParam("flag","1").process().getResultJSONArray(0); + + JSONArray rows = new JSONArray(); + + JSONObject row = new JSONObject(); + row.put("material_code", "物料编码"); + row.put("material_name", "物料名称"); + row.put("pcsn", "子卷批次"); + row.put("mfgordername", "销售订单及行号"); + row.put("customername", "客户编号"); + row.put("customerdescription", "客户名称"); + row.put("dateoffginbound", "入库日期"); + row.put("packageboxsn", "木箱唯一码"); + row.put("width", "产品规格(幅宽)"); + row.put("thickness", "产品厚度"); + row.put("netweight", "净重"); + row.put("length", "长度"); + row.put("warehouse_code", "仓库编码"); + row.put("dateofproduction", "生产日期"); + row.put("unplanproductproperty", "物性"); + + rows.add(row); + rows.add(row); + + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", rows.size()); + result.put("RTDAT", rows); + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java b/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java new file mode 100644 index 000000000..fac709719 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/LmsToMesController.java @@ -0,0 +1,87 @@ +package org.nl.wms.ext.mes.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.mes.service.LmsToMesService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "lms发送mes") +@RequestMapping("/api/lms") +@Slf4j +public class LmsToMesController { + private final LmsToMesService lmsToMesService; + + @PostMapping("/momRollFoilWeighing") + @Log("LMS的PDA操作AGV下卷,AGV称重完成后AGV称重信息发送MES") + @ApiOperation("LMS的PDA操作AGV下卷,AGV称重完成后AGV称重信息发送MES") + public ResponseEntity momRollFoilWeighing(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momRollFoilWeighing(jo), HttpStatus.OK); + } + + @PostMapping("/momRollBakeInBound") + @Log("智能桁架将母卷调进烘箱完成,智能物流发送MES") + @ApiOperation("智能桁架将母卷调进烘箱完成,智能物流发送MES") + public ResponseEntity momRollBakeInBound(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momRollBakeInBound(jo), HttpStatus.OK); + } + + @PostMapping("/momRollBakeOutBound") + @Log("母卷出烘箱信息智能物流传MES") + @ApiOperation("母卷出烘箱信息智能物流传MES") + public ResponseEntity momRollBakeOutBound(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momRollBakeOutBound(jo), HttpStatus.OK); + } + + @PostMapping("/momRollSemiFGInboundComplete") + @Log("AGV将母卷从烘箱暂存位转移至暂存区,传MES") + @ApiOperation("AGV将母卷从烘箱暂存位转移至暂存区,传MES") + public ResponseEntity momRollSemiFGInboundComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.momRollSemiFGInboundComplete(jo), HttpStatus.OK); + } + + @PostMapping("/airSwellWithPaperTubeAssComplete") + @Log("套轴任务完成,上架暂存区,智能物流PDA选任务、扫轴、扫料架货位,传MES套轴任务完成信息") + @ApiOperation("套轴任务完成,上架暂存区,智能物流PDA选任务、扫轴、扫料架货位,传MES套轴任务完成信息") + public ResponseEntity airSwellWithPaperTubeAssComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.airSwellWithPaperTubeAssComplete(jo), HttpStatus.OK); + } + + @PostMapping("/cutPlanMomRollDeliveryComplete") + @Log("LMS提前做/MES呼叫后做,立库子卷出库完成/母卷配送至分切机暂存位,AGV传MES 母卷配送完成信息/立库子卷出库完成信息") + @ApiOperation("LMS提前做/MES呼叫后做,立库子卷出库完成/母卷配送至分切机暂存位,AGV传MES 母卷配送完成信息/立库子卷出库完成信息") + public ResponseEntity cutPlanMomRollDeliveryComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.cutPlanMomRollDeliveryComplete(jo), HttpStatus.OK); + } + + @PostMapping("/airSwellWithPaperTubeAssArrival") + @Log("提前将/按呼叫指令配送(扫码校验配送先后顺序)气涨轴套装运输到分切机,智能物流传MES 到位信息") + @ApiOperation("提前将/按呼叫指令配送(扫码校验配送先后顺序)气涨轴套装运输到分切机,智能物流传MES 到位信息") + public ResponseEntity airSwellWithPaperTubeAssArrival(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.airSwellWithPaperTubeAssArrival(jo), HttpStatus.OK); + } + + @PostMapping("/childRollFGInboundComplete") + @Log("入库完成,LMS回传MES,MES成品入库Move Out") + @ApiOperation("入库完成,LMS回传MES,MES成品入库Move Out") + public ResponseEntity childRollFGInboundComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.childRollFGInboundComplete(jo), HttpStatus.OK); + } + + @PostMapping("/childRollFGOutboundComplete") + @Log("发货完成,LMS同步MES子卷及包装箱状态,MES更新信息") + @ApiOperation("发货完成,LMS同步MES子卷及包装箱状态,MES更新信息") + public ResponseEntity childRollFGOutboundComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(lmsToMesService.childRollFGOutboundComplete(jo), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java b/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java new file mode 100644 index 000000000..a9103e241 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java @@ -0,0 +1,98 @@ +package org.nl.wms.ext.mes.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.mes.service.MesToLmsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "mes发送lms") +@RequestMapping("/api/mes") +@Slf4j +public class MesToLmsController { + private final MesToLmsService mesToLmsService; + + @PostMapping("/momRollFoilStart") + @Log("母卷批次创建信息发送智能物流(MES生箔工序Move In)") + @ApiOperation("母卷批次创建信息发送智能物流(MES生箔工序Move In)") + public ResponseEntity momRollFoilStart(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.momRollFoilStart(jo), HttpStatus.OK); + } + + @PostMapping("momRollFoilWeighing") + @Log("MES获取AGV称重信息") + @ApiOperation("MES获取AGV称重信息") + public ResponseEntity momRollFoilWeighing(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.momRollFoilWeighing(jo), HttpStatus.OK); + } + + @PostMapping("/momRollFoilComplete") + @Log("MES执行下卷动作告诉LMS") + @ApiOperation("MES执行下卷动作告诉LMS") + public ResponseEntity momRollFoilComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.momRollFoilComplete(jo), HttpStatus.OK); + } + + @PostMapping("/momRollBakeNextSpecTransfer") + @Log("MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out)") + @ApiOperation("MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out)") + public ResponseEntity momRollBakeNextSpecTransfer(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.momRollBakeNextSpecTransfer(jo), HttpStatus.OK); + } + + @PostMapping("/cutPlanTransfer") + @Log("分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流") + @ApiOperation("分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流") + public ResponseEntity cutPlanTransfer(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.cutPlanTransfer(jo), HttpStatus.OK); + } + + @PostMapping("/callNextAssAndMomRoll") + @Log("分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流") + @ApiOperation("分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流") + public ResponseEntity callNextAssAndMomRoll(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.callNextAssAndMomRoll(jo), HttpStatus.OK); + } + + @PostMapping("/childRollCutStartComp") + @Log("当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令") + @ApiOperation("当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令") + public ResponseEntity childRollCutStartComp(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.childRollCutStartComp(jo), HttpStatus.OK); + } + + @PostMapping("/childRollPackComplete") + @Log("包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库") + @ApiOperation("包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库") + public ResponseEntity childRollPackComplete(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.childRollPackComplete(jo), HttpStatus.OK); + } + + @PostMapping("/inventoryTransferInfoSync") + @Log("转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签") + @ApiOperation("转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签") + public ResponseEntity inventoryTransferInfoSync(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.inventoryTransferInfoSync(jo), HttpStatus.OK); + } + + @PostMapping("/childRollInfoUpdate") + @Log("子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder") + @ApiOperation("子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder") + public ResponseEntity childRollInfoUpdate(@RequestBody JSONObject jo) { + return new ResponseEntity<>(mesToLmsService.childRollInfoUpdate(jo), HttpStatus.OK); + } + + + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java new file mode 100644 index 000000000..6dd002cb2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/LmsToMesService.java @@ -0,0 +1,90 @@ +package org.nl.wms.ext.mes.service; + +import com.alibaba.fastjson.JSONObject; + +public interface LmsToMesService { + /** + * LMS的PDA操作AGV下卷,AGV称重完成后AGV称重信息发送MES + * 参数:iContainerName 母卷号 + * iResourceName 机台编码 + * iWeigh 重量(KG) + * iWeighDate 称重时间 + */ + JSONObject momRollFoilWeighing(JSONObject param); + + /** + * 智能桁架将母卷调进烘箱完成,智能物流发送MES + * 参数:iContainerName 母卷号 + * iResourceName 烘箱机台编码 + * iMoveInDate 入烘箱时间(yyyy-MM-dd HH:mm:ss) + */ + JSONObject momRollBakeInBound(JSONObject param); + + /** + * AGV将母卷从烘箱暂存位转移至暂存区,传MES + * 参数:iContainerName 母卷号 + * iResourceName 烘箱机台编码 + * iMoveOutDate 出烘箱时间(yyyy-MM-dd HH:mm:ss) + * iActualBakingTemperature 实际烘烤温度 + * iActualBakingTimer 实际烘烤时间(yyyy-MM-dd HH:mm:ss) + */ + JSONObject momRollBakeOutBound(JSONObject param); + + /** + * AGV将母卷从烘箱暂存位转移至暂存区,传MES + * 参数:iContainerName 母卷号 + * iArrivalTime 半成品入库时间(yyyy-MM-dd HH:mm:ss) + * iWarehouse 半成品仓库 + */ + JSONObject momRollSemiFGInboundComplete(JSONObject param); + + /** + * 套轴任务完成,上架暂存区,智能物流PDA选任务、扫轴、扫料架货位,传MES套轴任务完成信息 + * 参数:ContainerName 子卷号 + * isSourceRollDeliveryComplete 母卷/立库是否配送完成 + * isAirSwellAssComplete 气涨轴是否套轴完成 + * isAirSwellDeliveryComplete 气涨轴是否配送到位 + */ + JSONObject airSwellWithPaperTubeAssComplete(JSONObject param); + + /** + * LMS提前做/MES呼叫后做,立库子卷出库完成/母卷配送至分切机暂存位,AGV传MES 母卷配送完成信息/立库子卷出库完成信息 + * 参数:ContainerName 子卷号 + * isSourceRollDeliveryComplete 母卷/立库是否配送完成 + * PackageBoxSN 木箱号 + * isAirSwellAssComplete 气涨轴是否套轴完成 + * isAirSwellDeliveryComplete 气涨轴是否配送到位 + */ + JSONObject cutPlanMomRollDeliveryComplete(JSONObject param); + + /** + * 提前将/按呼叫指令配送(扫码校验配送先后顺序)气涨轴套装运输到分切机,智能物流传MES 到位信息 + * 参数: + * ContainerName 子卷号 + * isSourceRollDeliveryComplete 母卷/立库是否配送完成 + * isAirSwellAssComplete 气涨轴是否套轴完成 + * isAirSwellDeliveryComplete 气涨轴是否配送到位 + */ + JSONObject airSwellWithPaperTubeAssArrival(JSONObject param); + + /** + * 入库完成,LMS回传MES,MES成品入库Move Out + * 参数: + * PackageBoxSN 包装箱号 + * Spec 入库工序 + * Warehouse 仓库 + * ArrivalDate 入库时间 + * User 入库人 + */ + JSONObject childRollFGInboundComplete(JSONObject param); + + /** + * 发货完成,LMS同步MES子卷及包装箱状态,MES更新信息 + * 参数: + * OutboundOrderNum 出库单号 + * OutboundUser 出库人 + * OutboundTime 出库时间 + */ + JSONObject childRollFGOutboundComplete(JSONObject param); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToLmsService.java b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToLmsService.java new file mode 100644 index 000000000..ebdadf3d8 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToLmsService.java @@ -0,0 +1,55 @@ +package org.nl.wms.ext.mes.service; + +import com.alibaba.fastjson.JSONObject; + +public interface MesToLmsService { + /** + * 母卷批次创建信息发送智能物流(MES生箔工序Move In) + */ + JSONObject momRollFoilStart(JSONObject param); + + /** + * MES获取AGV称重信息 + */ + JSONObject momRollFoilWeighing(JSONObject param); + + /** + * MES执行下卷动作告诉LMS + */ + JSONObject momRollFoilComplete(JSONObject param); + + /** + * MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out) + */ + JSONObject momRollBakeNextSpecTransfer(JSONObject param); + + /** + * 分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流 + */ + JSONObject cutPlanTransfer(JSONObject param); + + /** + * 分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流 + */ + JSONObject callNextAssAndMomRoll(JSONObject param); + + /** + * 当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令 + */ + JSONObject childRollCutStartComp(JSONObject param); + + /** + * 包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库 + */ + JSONObject childRollPackComplete(JSONObject param); + + /** + * 转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签 + */ + JSONObject inventoryTransferInfoSync(JSONObject param); + + /** + * 子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder + */ + JSONObject childRollInfoUpdate(JSONObject param); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java new file mode 100644 index 000000000..deda86c29 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java @@ -0,0 +1,428 @@ +package org.nl.wms.ext.mes.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.system.service.impl.ParamServiceImpl; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.mes.service.LmsToMesService; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +/** + * LMS系统为客户端,MES为服务端 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class LmsToMesServiceImpl implements LmsToMesService { + /** + * LMS的PDA操作AGV下卷,AGV称重完成后AGV称重信息发送MES + * + * @return + */ + @Override + public JSONObject momRollFoilWeighing(JSONObject param) { + log.info("momRollFoilWeighing接口输入参数为:-------------------"+param); + System.out.println("momRollFoilWeighing接口输入参数为:-------------------"+param); + + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = ""; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(list)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("momRollFoilWeighing接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * 智能桁架将母卷调进烘箱完成,智能物流发送MES + * + * @return + */ + @Override + public JSONObject momRollBakeInBound(JSONObject param) { + log.info("momRollBakeInBound接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/MomRollBakeInBound"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("momRollBakeInBound接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * 母卷出烘箱信息智能物流传MES + * + * @return + */ + @Override + public JSONObject momRollBakeOutBound(JSONObject param) { + log.info("momRollBakeOutBound接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/MomRollBakeOutBound"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("momRollBakeOutBound接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * AGV将母卷从烘箱暂存位转移至暂存区,传MES + * + * @return + */ + @Override + public JSONObject momRollSemiFGInboundComplete(JSONObject param) { + log.info("momRollSemiFGInboundComplete接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/MomRollSemiFGInboundComplete"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("momRollSemiFGInboundComplete接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * 套轴任务完成,上架暂存区,智能物流PDA选任务、扫轴、扫料架货位,传MES套轴任务完成信息 + * + * @return + */ + @Override + public JSONObject airSwellWithPaperTubeAssComplete(JSONObject param) { + log.info("airSwellWithPaperTubeAssComplete接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/AirSwellWithPaperTubeAssComplete"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("airSwellWithPaperTubeAssComplete接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * LMS提前做/MES呼叫后做,立库子卷出库完成/母卷配送至分切机暂存位,AGV传MES 母卷配送完成信息/立库子卷出库完成信息 + * + * @return + */ + @Override + public JSONObject cutPlanMomRollDeliveryComplete(JSONObject param) { + log.info("cutPlanMomRollDeliveryComplete接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/CutPlanMomRollDeliveryComplete"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("airSwellWithPaperTubeAssComplete接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * 提前将/按呼叫指令配送(扫码校验配送先后顺序)气涨轴套装运输到分切机,智能物流传MES 到位信息 + * + * @return + */ + @Override + public JSONObject airSwellWithPaperTubeAssArrival(JSONObject param) { + log.info("airSwellWithPaperTubeAssArrival接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/AirSwellWithPaperTubeAssArrival"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("airSwellWithPaperTubeAssArrival接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * 入库完成,LMS回传MES,MES成品入库Move Out + * + * @return + */ + @Override + public JSONObject childRollFGInboundComplete(JSONObject param) { + log.info("childRollFGInboundComplete接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/ChildRollFGInboundComplete"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("childRollFGInboundComplete接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + + /** + * 发货完成,LMS同步MES子卷及包装箱状态,MES更新信息 + * + * @return + */ + @Override + public JSONObject childRollFGOutboundComplete(JSONObject param) { + log.info("childRollFGOutboundComplete接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("MES_URL").getValue(); + String api = "CamstarApi/ChildRollFGOutboundComplete"; + url = url+api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(param)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("childRollFGOutboundComplete接口输出参数为:-------------------"+result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java new file mode 100644 index 000000000..0e736720f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -0,0 +1,211 @@ +package org.nl.wms.ext.mes.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.mes.service.MesToLmsService; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Slf4j +public class MesToLmsServiceImpl implements MesToLmsService { + + /** + * 生箔烘箱: + * 母卷批次创建信息发送智能物流(MES生箔工序Move In) + * + * + * 返回成功一条参数状态"S": + * { + * "RTYPE": "S", + * "RTMSG": "成功", + * "RTOAL": 1, + * "RTDAT": [{ + * "ContainerName": "母卷号", + * "ResourceName": "设备号", + * "Weight": 80 + * }] + * } + * + * + * @return + */ + @Override + public JSONObject momRollFoilStart(JSONObject param) { + log.info("momRollFoilStart接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 0); + result.put("RTDAT", new JSONArray()); + System.out.println(result); + return result; + } + + /** + * MES获取AGV称重信息 + * + * @return + */ + @Override + public JSONObject momRollFoilWeighing(JSONObject param) { + log.info("momRollFoilStart接口输入参数为:-------------------"+param.toString()); + + JSONArray data=new JSONArray(); + JSONObject json=new JSONObject(); + json.put("ContainerName","母卷号"); + json.put("ResourceName","设备号"); + json.put("Weight",80); + json.put("WeighDate", DateUtil.now()); + data.add(json); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", data); + System.out.println(result); + return result; + } + + /** + * MES执行下卷动作告诉LMS + * @param param + * @return + */ + @Override + public JSONObject momRollFoilComplete(JSONObject param) { + log.info("momRollFoilComplete接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out) + * @param param + * @return + */ + @Override + public JSONObject momRollBakeNextSpecTransfer(JSONObject param) { + log.info("momRollBakeNextSpecTransfer接口输入参数为:-------------------"+param.toString()); + + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * 分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流 + * @param param + * @return + */ + @Override + public JSONObject cutPlanTransfer(JSONObject param) { + log.info("cutPlanTransfer接口输入参数为:-------------------"+param.toString()); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * 分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流 + * @param param + * @return + */ + @Override + public JSONObject callNextAssAndMomRoll(JSONObject param) { + log.info("callNextAssAndMomRoll接口输入参数为:-------------------"+param.toString()); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * 当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令 + * @param param + * @return + */ + @Override + public JSONObject childRollCutStartComp(JSONObject param) { + log.info("childRollCutStartComp接口输入参数为:-------------------"+param.toString()); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * 包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库 + * @param param + * @return + */ + @Override + public JSONObject childRollPackComplete(JSONObject param) { + log.info("childRollPackComplete接口输入参数为:-------------------"+param.toString()); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * 转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签 + * @param param + * @return + */ + @Override + public JSONObject inventoryTransferInfoSync(JSONObject param) { + log.info("inventoryTransferInfoSync接口输入参数为:-------------------"+param.toString()); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } + + /** + * 子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder + * @param param + * @return + */ + @Override + public JSONObject childRollInfoUpdate(JSONObject param) { + log.info("childRollInfoUpdate接口输入参数为:-------------------"+param.toString()); + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + System.out.println(result); + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java b/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java new file mode 100644 index 000000000..50479a795 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java @@ -0,0 +1,39 @@ +package org.nl.wms.ext.sap.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.sap.service.LmsToSapService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "lms发送sap") +@RequestMapping("/api/lms") +@Slf4j +public class LmsToSapController { + private final LmsToSapService LmsToSapService; + + @PostMapping("/returnDelivery") + @Log("LMS回传SAP交货单") + @ApiOperation("LMS回传SAP交货单") + public ResponseEntity returnDelivery(@RequestBody JSONObject jo) { + return new ResponseEntity<>(LmsToSapService.returnDelivery(jo), HttpStatus.OK); + } + + @PostMapping("/returnMoveDtl") + @Log("LMS创建移库单") + @ApiOperation("LMS创建移库单") + public ResponseEntity returnMoveDtl(@RequestBody JSONObject jo) { + return new ResponseEntity<>(LmsToSapService.returnMoveDtl(jo), HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java b/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java new file mode 100644 index 000000000..9c711f084 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java @@ -0,0 +1,47 @@ +package org.nl.wms.ext.sap.rest; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.ext.sap.service.SapToLmsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "sap发送lms") +@RequestMapping("/api/sap") +@Slf4j +public class SapToLmsController { + private final SapToLmsService sapToLmsService; + + @PostMapping("/getMaterialInfo") + @Log("SAP给LMS推送物料信息") + @ApiOperation("SAP给LMS推送物料信息") + public ResponseEntity getMaterialInfo(@RequestBody JSONArray rows) { + return new ResponseEntity<>(sapToLmsService.getMaterialInfo(rows), HttpStatus.OK); + } + + @PostMapping("/getDeliveryInfo") + @Log("SAP给LMS推送交货单信息") + @ApiOperation("SAP给LMS推送物料信息") + public ResponseEntity getDeliveryInfo(@RequestBody JSONObject jo) { + return new ResponseEntity<>(sapToLmsService.getDeliveryInfo(jo), HttpStatus.OK); + } + + @PostMapping("/getReturnDeliveryInfo") + @Log("SAP给LMS推送退货交货单信息") + @ApiOperation("SAP给LMS推送退货交货单信息") + public ResponseEntity getReturnDeliveryInfo(@RequestBody JSONObject jo) { + return new ResponseEntity<>(sapToLmsService.getReturnDeliveryInfo(jo), HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java new file mode 100644 index 000000000..6072282d9 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java @@ -0,0 +1,43 @@ +package org.nl.wms.ext.sap.service; + +import com.alibaba.fastjson.JSONObject; + +public interface LmsToSapService { + /* + * LMS回传交货单信息给SAP + * ACTION 处理方式 + WADAT_IST 过账日期 + VBELN 交货单号 + POSNR 项目号 + MATNR 物料号 + LGORT 库位 + LFIMG 实际发货总重量 + VRKME 单位 + CHARG 批次 + PIKMG 拣配数量(子卷重量) + VRKME1 单位 + * + * */ + JSONObject returnDelivery(JSONObject jo); + + /*抬头 + * BLDAT 凭证日期 + BUDAT 过账日期 + BKTXT 凭证抬头文本 + XBLNR 参考 + + * 明细 + RSPOS 行号 + MATNR 物料编码 + BWART 移动类型 + MENGE 数量 + MEINS 基本计量单位 + LGORT 库存地点 + CHARG 批次编号 + UMLGO 收货库存地点 + UMCHA 收货批次 + KDAUF 销售订单 + KDPOS 销售订单行项目 + * */ + JSONObject returnMoveDtl(JSONObject jo); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java new file mode 100644 index 000000000..5ae7dd18d --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java @@ -0,0 +1,19 @@ +package org.nl.wms.ext.sap.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public interface SapToLmsService { + /* + * 获取物料信息 + * */ + JSONObject getMaterialInfo(JSONArray rows); + /* + * 获取交货单信息 + * */ + JSONObject getDeliveryInfo(JSONObject jo); + /* + * 获取退货交货单信息 + * */ + JSONObject getReturnDeliveryInfo(JSONObject jo); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java new file mode 100644 index 000000000..e2c0aee75 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java @@ -0,0 +1,139 @@ +package org.nl.wms.ext.sap.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.system.service.impl.ParamServiceImpl; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.sap.service.LmsToSapService; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Slf4j +public class LmsToSapServiceImpl implements LmsToSapService { + + @Override + public JSONObject returnDelivery(JSONObject jo) { + /* + * { + "ACTION": "处理方式", + "WADAT_IST": "过账日期", + "VBELN": "交货单号", + "POSNR": "项目号", + "MATNR": "物料号", + "LGORT": "库位", + "LFIMG": "实际发货总重量", + "VRKME": "单位", + "CHARG": "批次", + "PIKMG": "拣配数量(子卷重量)", + "VRKME1": "单位" + } + * */ + { + log.info("returnDelivery接口输入参数为:-------------------" + jo.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("SAP_URL").getValue(); + String api = ""; + url = url + api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(jo)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("returnDelivery接口输出参数为:-------------------" + result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + } + + @Override + public JSONObject returnMoveDtl(JSONObject jo) { + /* + * { + "BLDAT": "凭证日期", + "BUDAT": "过账日期", + "BKTXT": "凭证抬头文本", + "XBLNR": "参考", + "item": [{ + "RSPOS": "行号", + "MATNR": "物料编码", + "BWART": "移动类型", + "MENGE": "数量", + "MEINS": "基本计量单位", + "LGORT": "库存地点", + "CHARG": "批次编号", + "UMLGO": "收货库存地点", + "UMCHA": "收货批次", + "KDAUF": "销售订单", + "KDPOS": "销售订单行项目" + }] + } + * */ + { + log.info("returnMoveDtl接口输入参数为:-------------------" + jo.toString()); + + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + // String url = acsUrl + api; + String url = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("SAP_URL").getValue(); + String api = ""; + url = url + api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(jo)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("returnMoveDtl接口输出参数为:-------------------" + result.toString()); + + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + log.info("网络不通,操作失败!"); + } + return result; + } + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java new file mode 100644 index 000000000..ba4dd52ae --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java @@ -0,0 +1,99 @@ +package org.nl.wms.ext.sap.service.impl; + +import cn.hutool.core.util.ObjectUtil; +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.wms.ext.sap.service.SapToLmsService; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SapToLmsServiceImpl implements SapToLmsService { + + @Override + public JSONObject getMaterialInfo(JSONArray rows) { + if (ObjectUtil.isEmpty(rows)) { + throw new BadRequestException("物料信息为空!"); + } + log.info("getMaterialInfo的输入参数为:------------------------" + rows.toString()); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + + } + JSONObject jo = new JSONObject(); + jo.put("msg", "推送成功!"); + jo.put("code", "1"); + return jo; + } + + @Override + public JSONObject getDeliveryInfo(JSONObject jo) { + + log.info("getDeliveryInfo的输入参数为:------------------------" + jo.toString()); + /*for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + + }*/ + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + return result; + } + + @Override + public JSONObject getReturnDeliveryInfo(JSONObject jo) { + /** + * { + * "ACTION": "P", + * "BUDAT": "2022-09-26", + * "VBELN": "010101", + * "child": [ + * { + * "POSNR": "10", + * "MATNR": "BST00001", + * "LGORT": "CP01", + * "child": [ + * { + * "LFIMG": "50", + * "VRKME": "PC", + * "CHARG": "20220926", + * "PIKMG": "10", + * "VRKME1": "PC" + * } + * ] + * }, + * { + * "POSNR": "20", + * "MATNR": "BST00002", + * "LGORT": "CP01", + * "child": [ + * { + * "LFIMG": "50", + * "VRKME": "PC", + * "CHARG": "20220926", + * "PIKMG": "10", + * "VRKME1": "PC" + * } + * ] + * } + * ] + * } + * */ + + log.info("getReturnDeliveryInfo的输入参数为:------------------------" + jo.toString()); + + JSONObject result = new JSONObject(); + result.put("RTYPE", "S"); + result.put("RTMSG", "操作成功!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + return result; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/ext/wql/AUTO_QUERYTASK.wql b/nladmin-system/src/main/java/org/nl/wms/ext/wql/AUTO_QUERYTASK.wql new file mode 100644 index 000000000..511960fde --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/ext/wql/AUTO_QUERYTASK.wql @@ -0,0 +1,92 @@ +[交易说明] + 交易名: 二楼到一楼业务 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.start_point_code TYPEAS f_string + 输入.end_point_code TYPEAS f_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + task.* + FROM + SCH_BASE_Task task + WHERE + task.is_delete = '0' + AND task.task_status = '01' + AND task.start_point_code in ('YQX01_WX','YQX02_WX') + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + task.* + FROM + SCH_BASE_Task task + WHERE + task.is_delete = '0' + AND task.task_status <> '99' + + OPTION 输入.start_point_code <> "" + task.start_point_code in 输入.start_point_code + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + task.* + FROM + SCH_BASE_Task task + WHERE + task.is_delete = '0' + AND task.task_status <> '99' + + OPTION 输入.end_point_code <> "" + task.next_point_code in 输入.end_point_code + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/rest/PersoncorrdeviceController.java b/nladmin-system/src/main/java/org/nl/wms/mps/rest/PersoncorrdeviceController.java new file mode 100644 index 000000000..d461d4443 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/rest/PersoncorrdeviceController.java @@ -0,0 +1,120 @@ + +package org.nl.wms.mps.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.mps.service.PersoncorrdeviceService; +import org.nl.wms.mps.service.dto.PersoncorrdeviceDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-05-26 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "人员设备维护管理") +@RequestMapping("/api/personcorrdevice") +@Slf4j +public class PersoncorrdeviceController { + + private final PersoncorrdeviceService personcorrdeviceService; + + @GetMapping + @Log("查询人员设备维护") + @ApiOperation("查询人员设备维护") + //@PreAuthorize("@el.check('personcorrdevice:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(personcorrdeviceService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增人员设备维护") + @ApiOperation("新增人员设备维护") + //@PreAuthorize("@el.check('personcorrdevice:add')") + public ResponseEntity create(@Validated @RequestBody PersoncorrdeviceDto dto){ + personcorrdeviceService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改人员设备维护") + @ApiOperation("修改人员设备维护") + //@PreAuthorize("@el.check('personcorrdevice:edit')") + public ResponseEntity update(@Validated @RequestBody PersoncorrdeviceDto dto){ + personcorrdeviceService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除人员设备维护") + @ApiOperation("删除人员设备维护") + //@PreAuthorize("@el.check('personcorrdevice:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + personcorrdeviceService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/addPersons") + @Log("添加人员") + @ApiOperation("添加人员") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity addPersons(@RequestBody JSONObject param) { + personcorrdeviceService.addPersons(param); + return new ResponseEntity<>( HttpStatus.OK); + } + + @GetMapping("/getDeviceByPerson") + @Log("查询设备") + @ApiOperation("查询设备") + //@PreAuthorize("@el.check('personcorrdevice:list')") + public ResponseEntity getDeviceByPerson(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(personcorrdeviceService.getDeviceByPerson(whereJson,page),HttpStatus.OK); + } + + @PostMapping("/getHeader") + @Log("查询表头") + @ApiOperation("查询表头") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity getHeader(@RequestBody JSONObject param) { + return new ResponseEntity<>( personcorrdeviceService.getHeader(param),HttpStatus.OK); + } + + @PostMapping("/getDeviceIdByUserId") + @Log("查询人员的设备") + @ApiOperation("查询人员的设备") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity getDeviceIdByUserId(@RequestBody JSONObject param) { + return new ResponseEntity<>( personcorrdeviceService.getDeviceIdByUserId(param),HttpStatus.OK); + } + + @PostMapping("/addDevices") + @Log("添加人员的设备") + @ApiOperation("添加人员的设备") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity addDevices(@RequestBody JSONObject param) { + personcorrdeviceService.addDevices(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @DeleteMapping("/deleteRow") + @Log("删除人员的设备") + @ApiOperation("删除人员的设备") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity deleteRow(@RequestBody JSONObject param) { + personcorrdeviceService.deleteRow(param); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/rest/ProduceshiftorderController.java b/nladmin-system/src/main/java/org/nl/wms/mps/rest/ProduceshiftorderController.java new file mode 100644 index 000000000..10d39face --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/rest/ProduceshiftorderController.java @@ -0,0 +1,145 @@ +package org.nl.wms.mps.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.mps.service.ProduceshiftorderService; +import org.nl.wms.mps.service.dto.ProduceshiftorderDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author qinx +* @date 2022-05-24 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "工单管理") +@RequestMapping("/api/produceshiftorder") +@Slf4j +public class ProduceshiftorderController { + + private final ProduceshiftorderService produceshiftorderService; + + @GetMapping + @Log("查询工单") + @ApiOperation("查询工单") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(produceshiftorderService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增工单") + @ApiOperation("新增工单") + //@PreAuthorize("@el.check('produceshiftorder:add')") + public ResponseEntity create(@Validated @RequestBody ProduceshiftorderDto dto){ + produceshiftorderService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改工单") + @ApiOperation("修改工单") + //@PreAuthorize("@el.check('produceshiftorder:edit')") + public ResponseEntity update(@Validated @RequestBody ProduceshiftorderDto dto){ + produceshiftorderService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除工单") + @ApiOperation("删除工单") + //@PreAuthorize("@el.check('produceshiftorder:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + produceshiftorderService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/submits") + @Log("工单下发") + @ApiOperation("工单下发") + //@PreAuthorize("@el.check('produceshiftorder:edit')") + public ResponseEntity submits(@RequestBody JSONObject param){ + produceshiftorderService.submits(param); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getDevice") + @Log("根据登录用户设备下拉") + @ApiOperation("根据登录用户设备下拉") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity getDevice(@RequestBody JSONObject param){ + return new ResponseEntity<>(produceshiftorderService.getDevice(param),HttpStatus.OK); + } + + @PostMapping("/getTable") + @Log("获取工单生产记录") + @ApiOperation("获取工单生产记录") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity getTable(@RequestBody JSONObject param){ + return new ResponseEntity<>(produceshiftorderService.getTable(param),HttpStatus.OK); + } + + @PostMapping("/openStart") + @Log("看板开工") + @ApiOperation("看板开工") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity openStart(@RequestBody JSONObject param){ + produceshiftorderService.openStart(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/saveReport") + @Log("看板报工") + @ApiOperation("看板报工") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity saveReport(@RequestBody JSONObject param){ + produceshiftorderService.saveReport(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/finish") + @Log("看板强制完成") + @ApiOperation("看板强制完成") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity finish(@RequestBody JSONObject param){ + produceshiftorderService.finish(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getReportWork") + @Log("获取当前报工记录") + @ApiOperation("获取当前报工记录") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity getReportWork(@RequestBody JSONObject param){ + return new ResponseEntity<>(produceshiftorderService.getReportWork(param),HttpStatus.OK); + } + + @PostMapping("/forceFinish") + @Log("工单强制完成") + @ApiOperation("工单强制完成") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity forceFinish(@RequestBody JSONObject param){ + produceshiftorderService.forceFinish(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getDtl") + @Log("获取当前工单下的工单生产记录") + @ApiOperation("获取当前工单下的工单生产记录") + //@PreAuthorize("@el.check('produceshiftorder:list')") + public ResponseEntity getDtl(@RequestBody JSONObject param){ + return new ResponseEntity<>(produceshiftorderService.getDtl(param),HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/rest/TeamcorrpersonController.java b/nladmin-system/src/main/java/org/nl/wms/mps/rest/TeamcorrpersonController.java new file mode 100644 index 000000000..10f28cd8e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/rest/TeamcorrpersonController.java @@ -0,0 +1,65 @@ + +package org.nl.wms.mps.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.mps.service.TeamcorrpersonService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-05-26 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "班组人员维护管理") +@RequestMapping("/api/teamcorrperson") +@Slf4j +public class TeamcorrpersonController { + + private final TeamcorrpersonService teamcorrpersonService; + + @GetMapping + @Log("查询班组人员维护") + @ApiOperation("查询班组人员维护") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(teamcorrpersonService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping("/getPersonIdByTeamId") + @Log("根据班组查询人员id") + @ApiOperation("根据班组查询人员id") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity getPersonIdByTeamId(@RequestBody JSONObject param) { + return new ResponseEntity<>(teamcorrpersonService.getPersonIdByTeamId(param), HttpStatus.OK); + } + + @PostMapping("/addPersons") + @Log("添加班组人员关系") + @ApiOperation("添加班组人员关系") + //@PreAuthorize("@el.check('teamcorrperson:list')") + public ResponseEntity addPersons(@RequestBody JSONObject param) { + teamcorrpersonService.addPersons(param); + return new ResponseEntity<>( HttpStatus.OK); + } + + @Log("删除") + @ApiOperation("删除") + //@PreAuthorize("@el.check('workteam:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + teamcorrpersonService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/rest/WorkteamController.java b/nladmin-system/src/main/java/org/nl/wms/mps/rest/WorkteamController.java new file mode 100644 index 000000000..5a62c97b0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/rest/WorkteamController.java @@ -0,0 +1,85 @@ + +package org.nl.wms.mps.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.mps.service.WorkteamService; +import org.nl.wms.mps.service.dto.WorkteamDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-05-25 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "班组管理") +@RequestMapping("/api/workteam") +@Slf4j +public class WorkteamController { + + private final WorkteamService workteamService; + + @GetMapping + @Log("查询班组") + @ApiOperation("查询班组") + //@PreAuthorize("@el.check('workteam:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(workteamService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增班组") + @ApiOperation("新增班组") + //@PreAuthorize("@el.check('workteam:add')") + public ResponseEntity create(@Validated @RequestBody WorkteamDto dto){ + workteamService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改班组") + @ApiOperation("修改班组") + //@PreAuthorize("@el.check('workteam:edit')") + public ResponseEntity update(@Validated @RequestBody WorkteamDto dto){ + workteamService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除班组") + @ApiOperation("删除班组") + //@PreAuthorize("@el.check('workteam:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + workteamService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getClasssystem") + @Log("查询班制下拉") + @ApiOperation("查询班制下拉") + //@PreAuthorize("@el.check('workteam:list')") + public ResponseEntity getClasssystem(){ + return new ResponseEntity<>(workteamService.getClasssystem(),HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改状态") + @ApiOperation("修改状态") + public ResponseEntity update(@RequestBody JSONObject json) { + workteamService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/PersoncorrdeviceService.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/PersoncorrdeviceService.java new file mode 100644 index 000000000..c8ad31c32 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/PersoncorrdeviceService.java @@ -0,0 +1,84 @@ + +package org.nl.wms.mps.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.mps.service.dto.PersoncorrdeviceDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-05-26 +**/ +public interface PersoncorrdeviceService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param team_person_device_id ID + * @return Personcorrdevice + */ + PersoncorrdeviceDto findById(Long team_person_device_id); + + /** + * 根据编码查询 + * @param code code + * @return Personcorrdevice + */ + PersoncorrdeviceDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(PersoncorrdeviceDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(PersoncorrdeviceDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + void addPersons(JSONObject param); + + /** + * 设备 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map getDeviceByPerson(Map whereJson, Pageable page); + + Map getHeader(JSONObject param); + + JSONArray getDeviceIdByUserId(JSONObject param); + + void addDevices(JSONObject param); + + void deleteRow(JSONObject param); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/ProduceshiftorderService.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/ProduceshiftorderService.java new file mode 100644 index 000000000..ab70e94d2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/ProduceshiftorderService.java @@ -0,0 +1,124 @@ +package org.nl.wms.mps.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.mps.service.dto.ProduceshiftorderDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author qinx +* @date 2022-05-24 +**/ +public interface ProduceshiftorderService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param produceorder_id ID + * @return Produceshiftorder + */ + ProduceshiftorderDto findById(Long produceorder_id); + + /** + * 根据编码查询 + * @param code code + * @return Produceshiftorder + */ + ProduceshiftorderDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(ProduceshiftorderDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(ProduceshiftorderDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 工单下发 + * @param param + */ + void submits(JSONObject param); + + /** + * 根据当前登录用户下拉 + * @param param + * @return + */ + JSONArray getDevice(JSONObject param); + + /** + * 获取工单生产记录 + * @param param + * @return + */ + JSONArray getTable(JSONObject param); + + /** + * 看板开工 + * @param param + */ + void openStart(JSONObject param); + + /** + * 看板报工 + * @param param + */ + void saveReport(JSONObject param); + + /** + * 看板强制完成 + * @param param + */ + void finish(JSONObject param); + + /** + * 获取当前报工记录 + * @param param + * @return + */ + JSONObject getReportWork(JSONObject param); + + + /** + * 工单强制完成 + * @param param + */ + void forceFinish(JSONObject param); + + /** + * 获取当前工单下的工单生产记录 + * @param param + * @return + */ + JSONArray getDtl(JSONObject param); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/TeamcorrpersonService.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/TeamcorrpersonService.java new file mode 100644 index 000000000..cfc13188f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/TeamcorrpersonService.java @@ -0,0 +1,34 @@ + +package org.nl.wms.mps.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-05-26 +**/ +public interface TeamcorrpersonService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + JSONArray getPersonIdByTeamId(JSONObject param); + + void addPersons(JSONObject param); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkteamService.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkteamService.java new file mode 100644 index 000000000..8e8c03cb5 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkteamService.java @@ -0,0 +1,74 @@ + +package org.nl.wms.mps.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.mps.service.dto.WorkteamDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-05-25 +**/ +public interface WorkteamService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param team_id ID + * @return Workteam + */ + WorkteamDto findById(Long team_id); + + /** + * 根据编码查询 + * @param code code + * @return Workteam + */ + WorkteamDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(WorkteamDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(WorkteamDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 班制下拉 + * @return + */ + JSONArray getClasssystem(); + + void changeActive(JSONObject json); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/PersoncorrdeviceDto.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/PersoncorrdeviceDto.java new file mode 100644 index 000000000..f3d97c9ce --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/PersoncorrdeviceDto.java @@ -0,0 +1,27 @@ +package org.nl.wms.mps.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author geng by +* @date 2022-05-26 +**/ +@Data +public class PersoncorrdeviceDto implements Serializable { + + /** 班组人员设备对应标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long team_person_device_id; + + /** 操作工标识 */ + private Long jockey_id; + + /** 设备标识 */ + private Long device_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java new file mode 100644 index 000000000..3bb51b818 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java @@ -0,0 +1,159 @@ +package org.nl.wms.mps.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; + +/** + * @author qinx + * @description / + * @date 2022-05-24 + **/ +@Data +public class ProduceshiftorderDto implements Serializable { + + /** 生产班次工单标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long produceorder_id; + + /** + * 生产班次工单编号 + */ + private String produceorder_code; + + /** + * 机台工单号 + */ + private String producedeviceorder_code; + + /** + * 班次类型 + */ + private String shift_type_scode; + + /** + * 生产日期 + */ + private String produce_date; + + /** + * 计划数量 + */ + private BigDecimal plan_qty; + + /** + * 实际数量 + */ + private BigDecimal real_qty; + + /** + * 报工数量 + */ + private BigDecimal report_qty; + + /** + * 物料标识 + */ + private Long material_id; + + /** + * 物料单重 + */ + private BigDecimal material_weight; + + /** + * 托盘类型 + */ + private String vehicle_type; + + /** + * 计划生产开始时间 + */ + private String planproducestart_date; + + /** + * 计划生产结束时间 + */ + private String planproduceend_date; + + /** + * 实际生产开始时间 + */ + private String realproducestart_date; + + /** + * 实际生产结束时间 + */ + private String realproduceend_date; + + /** + * 工单状态 + */ + private String order_status; + + /** + * 是否搬运 + */ + private String is_needmove; + + /** + * 工单类型 + */ + private String order_type_scode; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 部门ID + */ + private Long sysdeptid; + + /** + * 公司ID + */ + private Long syscompanyid; + + /** + * 是否删除 + */ + private String is_delete; + + private String is_canupdate_update; + + private Long device_id; + private Long sale_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/TeamcorrpersonDto.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/TeamcorrpersonDto.java new file mode 100644 index 000000000..e14fedd04 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/TeamcorrpersonDto.java @@ -0,0 +1,27 @@ +package org.nl.wms.mps.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author geng by +* @date 2022-05-26 +**/ +@Data +public class TeamcorrpersonDto implements Serializable { + + /** 班组人员对应标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long team_person_id; + + /** 班组标识 */ + private Long team_id; + + /** 操作工标识 */ + private Long jockey_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/WorkteamDto.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/WorkteamDto.java new file mode 100644 index 000000000..3e41086cd --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/WorkteamDto.java @@ -0,0 +1,63 @@ +package org.nl.wms.mps.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** +* @description / +* @author geng by +* @date 2022-05-25 +**/ +@Data +public class WorkteamDto implements Serializable { + + /** 班组标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long team_id; + + /** 班组编码 */ + private String team_code; + + /** 班组名称 */ + private String team_name; + + /** 班制标识 */ + private Long classsystem_id; + + /** 备注 */ + private String remark; + + /** 是否启用 */ + private String is_active; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; + + /** 部门ID */ + private Long sysdeptid; + + /** 公司ID */ + private Long syscompanyid; + + /** 是否删除 */ + private String is_delete; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/PersoncorrdeviceServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/PersoncorrdeviceServiceImpl.java new file mode 100644 index 000000000..932766081 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/PersoncorrdeviceServiceImpl.java @@ -0,0 +1,250 @@ + +package org.nl.wms.mps.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.mps.service.PersoncorrdeviceService; +import org.nl.wms.mps.service.dto.PersoncorrdeviceDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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-05-26 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class PersoncorrdeviceServiceImpl implements PersoncorrdeviceService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = MapUtil.getStr(whereJson, "search"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + if (!StrUtil.isEmpty(search)) { + map.put("search", "%" + search + "%"); + } + JSONObject json = WQL.getWO("MPS_Personcorrdevice001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "view_person.jockey_id"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(PersoncorrdeviceDto.class); + return null; + } + + @Override + public PersoncorrdeviceDto findById(Long team_person_device_id) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + JSONObject json = wo.query("team_person_device_id = '" + team_person_device_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(PersoncorrdeviceDto.class); + } + return null; + } + + @Override + public PersoncorrdeviceDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(PersoncorrdeviceDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(PersoncorrdeviceDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setTeam_person_device_id(IdUtil.getSnowflake(1, 1).nextId()); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(PersoncorrdeviceDto dto) { + PersoncorrdeviceDto entity = this.findById(dto.getTeam_person_device_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + for (Long jockey_id : ids) { + wo.delete("jockey_id = '" + jockey_id + "'"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void addPersons(JSONObject param) { + final JSONArray persons = param.getJSONArray("persons"); + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + for (int i = 0; i < persons.size(); i++) { + final JSONObject jsonObject = persons.getJSONObject(i); + final String id = jsonObject.getString("id"); + final JSONArray jsonArray = wo.query("jockey_id = '" + id + "'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(jsonArray)) { + JSONObject map = new JSONObject(); + map.put("team_person_device_id", IdUtil.getSnowflake(1, 1).nextId()); + map.put("jockey_id", id); + wo.insert(map); + } + } + } + + @Override + public Map getDeviceByPerson(Map whereJson, Pageable page) { + String user_id = MapUtil.getStr(whereJson, "user_id"); + JSONObject map2 = new JSONObject(); + map2.put("flag", "3"); + map2.put("user_id", user_id); + //根据人员获取设备信息 + JSONObject json = WQL.getWO("MPS_Personcorrdevice001").addParamMap(map2).pageQuery(WqlUtil.getHttpContext(page), "device.device_code"); + JSONArray jsonArray = json.getJSONArray("content"); + JSONArray newContent = new JSONArray(); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + JSONObject map = new JSONObject(); + String device_id = jsonObject.getString("device_id"); + map.put("flag", "4"); + map.put("device_id", device_id); + //获取设备所拥有的项点信息 + JSONArray itemArray = WQL.getWO("MPS_Personcorrdevice001").addParamMap(map).process().getResultJSONArray(0); + JSONObject newMap = new JSONObject(); + newMap.put("team_person_device_id", jsonObject.getString("team_person_device_id")); + newMap.put("device_id", jsonObject.getString("device_id")); + newMap.put("device_code", jsonObject.getString("device_code")); + newMap.put("device_name", jsonObject.getString("device_name")); + newMap.put("workprocedure_code", jsonObject.getString("workprocedure_code")); + newMap.put("workprocedure_name", jsonObject.getString("workprocedure_name")); + //循环每个设备的项点信息,将项点所对应的键设为项点编码,对应动态表格的prop + for (int j = 0; j < itemArray.size(); j++) { + JSONObject itemObject = itemArray.getJSONObject(j); + newMap.put(itemObject.getString("item_code"), itemObject.getString("item_value")); + } + newContent.add(newMap); + } + json.put("content", newContent); + return json; + } + + @Override + public Map getHeader(JSONObject param) { + //动态获取设备类型下对应的项点信息 + String user_id = param.getString("user_id"); + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("user_id", user_id); + final JSONArray jsonArray = WQL.getWO("MPS_Personcorrdevice001").addParamMap(map).process().getResultJSONArray(0); + JSONArray newArray = new JSONArray(); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + String item_name = jsonObject.getString("item_name"); + JSONObject json = new JSONObject(); + json.put("label", item_name); + //将表格prop设置为项点编码 + json.put("prop", jsonObject.getString("item_code")); + json.put("show", true); + if (item_name.length() >= 6) { + json.put("width", "150"); + } + newArray.add(json); + } + JSONObject resultMap = new JSONObject(); + resultMap.put("newArray", newArray); + return resultMap; + } + + @Override + public JSONArray getDeviceIdByUserId(JSONObject param) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + final JSONArray resultJSONArray = wo.query("jockey_id = '" + param.getString("user_id") + "'").getResultJSONArray(0); + return resultJSONArray; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void addDevices(JSONObject param) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + final String user_id = param.getString("user_id"); + final JSONArray devices = param.getJSONArray("devices"); + final JSONObject is_exists = wo.query("jockey_id = '" + user_id + "' and (device_id is null or device_id = '" + "" + "')").uniqueResult(0); + if (ObjectUtil.isNotEmpty(is_exists)) { + wo.delete("jockey_id = '" + user_id + "'"); + } + for (int i = 0; i < devices.size(); i++) { + final JSONObject jsonObject = devices.getJSONObject(i); + final String device_id = jsonObject.getString("device_id"); + final JSONObject object = wo.query("jockey_id = '" + user_id + "' and device_id = '" + device_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(object)) { + JSONObject map = new JSONObject(); + map.put("team_person_device_id", IdUtil.getSnowflake(1, 1).nextId()); + map.put("jockey_id", user_id); + map.put("device_id", device_id); + wo.insert(map); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteRow(JSONObject param) { + JSONArray rows = param.getJSONArray("rows"); + final String user_id = param.getString("user_id"); + WQLObject wo = WQLObject.getWQLObject("pdm_bi_personcorrdevice"); + for (int i = 0; i < rows.size(); i++) { + final JSONObject jsonObject = rows.getJSONObject(i); + final String team_person_device_id = jsonObject.getString("team_person_device_id"); + final JSONArray resultJSONArray = wo.query("team_person_device_id = '" + team_person_device_id + "'").getResultJSONArray(0); + wo.delete("team_person_device_id = '" + team_person_device_id + "'"); + } + final JSONArray resultJSONArray = wo.query("jockey_id = '" + user_id + "'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(resultJSONArray)){ + JSONObject map = new JSONObject(); + map.put("team_person_device_id",IdUtil.getSnowflake(1, 1).nextId()); + map.put("jockey_id",user_id); + wo.insert(map); + } + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java new file mode 100644 index 000000000..f5187fe5c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java @@ -0,0 +1,438 @@ +package org.nl.wms.mps.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.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.modules.common.utils.dto.CurrentUser; +import org.nl.modules.system.service.dto.UserDto; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.mps.service.ProduceshiftorderService; +import org.nl.wms.mps.service.dto.ProduceshiftorderDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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 qinx + * @description 服务实现 + * @date 2022-05-24 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { + + private final ClassstandardService classstandardService; + private final WmsToAcsService wmsToAcsService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String produceorder_code = MapUtil.getStr(whereJson, "produceorder_code"); + String material = MapUtil.getStr(whereJson, "material"); + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + String order_type_scode = MapUtil.getStr(whereJson, "order_type_scode"); + String order_status = MapUtil.getStr(whereJson, "order_status"); + String shift_type_scode = MapUtil.getStr(whereJson, "shift_type_scode"); + String sale_id = MapUtil.getStr(whereJson, "sale_id"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("order_type_scode", order_type_scode); + //map.put("order_status", order_status); + map.put("shift_type_scode", shift_type_scode); + map.put("begin_time", begin_time); + map.put("end_time", end_time); + if (StrUtil.isNotEmpty(order_status)) { + order_status = order_status.replace("[\"", "").replace("\"]", "").replace("\"", ""); + } + map.put("order_status", order_status); + //处理状态为未完成 + if (StrUtil.isNotEmpty(order_status) && order_status.contains("-1")) { + map.put("unFinish", "-1"); + map.put("order_status", order_status.replace("-1", "")); + } + if (StrUtil.isNotEmpty(produceorder_code)) { + map.put("produceorder_code", "%" + produceorder_code + "%"); + } + if (StrUtil.isNotEmpty(material)) { + map.put("material", "%" + material + "%"); + } + if (StrUtil.isNotEmpty(sale_id)) { + map.put("sale_id", "%" + sale_id + "%"); + } + JSONObject jsonObject = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ShiftOrder.update_time desc"); + return jsonObject; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(ProduceshiftorderDto.class); + return null; + } + + @Override + public ProduceshiftorderDto findById(Long produceorder_id) { + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONObject json = wo.query("produceorder_id = '" + produceorder_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(ProduceshiftorderDto.class); + } + return null; + } + + @Override + public ProduceshiftorderDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(ProduceshiftorderDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(ProduceshiftorderDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + CurrentUser currentUser= SecurityUtils.getCurrentUser(); + Long deptId = currentUser.getUser().getDeptId(); + String newCode = CodeUtil.getNewCode("PDM_SHIFTORDER"); + dto.setProduceorder_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setProduceorder_code(newCode); + dto.setProducedeviceorder_code(newCode); + dto.setOrder_status("00"); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + json.put("sysdeptid", deptId); + json.put("syscompanyid", deptId); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(ProduceshiftorderDto dto) { + ProduceshiftorderDto entity = this.findById(dto.getProduceorder_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + for (Long produceorder_id : ids) { + JSONObject param = new JSONObject(); + param.put("produceorder_id", String.valueOf(produceorder_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void submits(JSONObject param) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONObject json = wo.query("produceorder_id = '" + param.getString("produceorder_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json.getString("device_id"))) throw new BadRequestException("请先绑定设备"); + + JSONArray orderArr = wo.query("device_id = '" + param.getString("device_id") + "' and order_status = '02'").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(orderArr)) throw new BadRequestException("当前设备正在生产中"); + + json.put("order_status", "02"); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + wo.update(json); + } + + @Override + public JSONArray getDevice(JSONObject param) { + final String workprocedure_id = param.getString("workprocedure_id"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + JSONObject map = new JSONObject(); + map.put("flag", "4"); + map.put("jockey_id", currentUserId + ""); + map.put("workprocedure_id", workprocedure_id); + final JSONArray resultJSONArray = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map).process().getResultJSONArray(0); + return resultJSONArray; + } + + @Override + public JSONArray getTable(JSONObject param) { + //获取当前登录用户下的所有设备 + Long currentUserId = SecurityUtils.getCurrentUserId(); + JSONObject map1 = new JSONObject(); + map1.put("flag", "2"); + map1.put("jockey_id", currentUserId + ""); + JSONArray devices = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map1).process().getResultJSONArray(0); + //根据当前用户下的所有设备查询所属工序 + JSONObject map = new JSONObject(); + map.put("flag", "3"); + StringBuilder sb = new StringBuilder(); + if (ObjectUtil.isNotEmpty(devices)) { + sb.append("("); + for (int i = 0; i < devices.size(); i++) { + JSONObject device = devices.getJSONObject(i); + String workprocedure_id = device.getString("workprocedure_id"); + if (devices.size() - 1 == i) { + sb.append("'" + workprocedure_id + "')"); + } + if (devices.size() - 1 != i) { + sb.append("'" + workprocedure_id + "',"); + } + } + map.put("workprocedure_ids", sb.toString()); + } else { + map.put("workprocedure_ids", "('-1')"); + } + //根据当前用户的设备所属的工序查询属于自己的工单表 + JSONArray resultJSONArray = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map).process().getResultJSONArray(0); + return resultJSONArray; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void openStart(JSONObject param) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String device_id = param.getString("device_id"); + WQLObject wo_device = WQLObject.getWQLObject("em_bi_deviceinfo"); + JSONObject device = wo_device.query("device_id = '" + device_id + "'").uniqueResult(0); + String device_code = device.getString("device_code"); + JSONObject row = param.getJSONObject("row"); + String produceorder_id = row.getString("produceorder_id"); + String workprocedure_id = row.getString("workprocedure_id"); + String produceorder_code = row.getString("produceorder_code"); + String material_id = row.getString("material_id"); + String material_code = row.getString("material_code"); + String material_name = row.getString("material_name"); + String material_spec = row.getString("material_spec"); + String is_needmove = row.getString("is_needmove"); + String plan_qty = row.getString("plan_qty"); + String order_status = row.getString("order_status"); + //开工时修改生产班次工单表 生产设备、以及工单状态 + WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + JSONObject jsonObject1 = wo.query("produceorder_id = '" + produceorder_id + "'").uniqueResult(0); + JSONObject produceorderMap = new JSONObject(); + produceorderMap.put("produceorder_id", produceorder_id); + produceorderMap.put("device_id", device_id); + produceorderMap.put("order_status", "02"); + produceorderMap.put("update_optid", currentUserId); + produceorderMap.put("update_optname", nickName); + produceorderMap.put("update_time", now); + if (order_status.equals("01")){ + produceorderMap.put("realproducestart_date", now); + } + wo.update(produceorderMap); + //同时工单记录表中插入一条数据 + WQLObject wo_record = WQLObject.getWQLObject("MPS_BD_MacOperateRecord"); + JSONObject recordMap = new JSONObject(); + recordMap.put("macoperate_id", IdUtil.getSnowflake(1, 1).nextId()); + recordMap.put("device_id", device_id); + recordMap.put("workprocedure_id", workprocedure_id); + recordMap.put("produceorder_id", produceorder_id); + recordMap.put("produceorder_code", produceorder_code); + recordMap.put("init_qty", jsonObject1.getString("real_qty")); + //填写生产记录表中的生产数量时,先判断是否已经生产过了,如果没有生产过,就将工单记录表中的计划数量付给记录表中的生产数量 + final JSONArray alreadyPro = wo_record.query("produceorder_id = '" + produceorder_id + "'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(alreadyPro)) { + recordMap.put("produce_qty", plan_qty); + //同时向acs系统下发工单 问题是现在一个工单分多次执行,现在是每开工一次,向acs发送一次工单 + //acs那边就会新增多个工单 + //如果是第一次开工,就向acs下发工单 + // TODO + JSONArray array = new JSONArray(); + JSONObject acsObj = new JSONObject(); + acsObj.put("ext_order_id",produceorder_id); + acsObj.put("is_needmove",is_needmove); + acsObj.put("order_code",produceorder_code); + acsObj.put("qty",plan_qty); + acsObj.put("material_uuid",material_id); + acsObj.put("material_code",material_code); + acsObj.put("material_name",material_name); + acsObj.put("material_spec",material_spec); + acsObj.put("device_code",device_code); + array.add(acsObj); + wmsToAcsService.order(array); + } else { + Integer sum = 0; + //如果生产过了,就获取记录表中的报工数量,用计划数量减去生产过的报工数量的和,为这次的生产数量 + for (int i = 0; i < alreadyPro.size(); i++) { + JSONObject jsonObject = alreadyPro.getJSONObject(i); + String report_qty = jsonObject.getString("report_qty"); + sum += Integer.parseInt(report_qty); + } + Integer produce_qty = Integer.parseInt(plan_qty) - sum; + recordMap.put("produce_qty", produce_qty); + //wms向acs发送请求 工单恢复 + //如果不是第一次开工,就向acs发送恢复工单状态 + // TODO + JSONArray array = new JSONArray(); + JSONObject map = new JSONObject(); + map.put("ext_order_id",produceorder_id); + map.put("type","2"); + array.add(map); + wmsToAcsService.orderStatusUpdate(array); + } + recordMap.put("operatetime_start", now); + recordMap.put("jockey_id", currentUserId); + wo_record.insert(recordMap); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveReport(JSONObject param) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + final String report_qty = param.getString("report_qty"); + final JSONObject row = param.getJSONObject("row"); + final String produceorder_id = row.getString("produceorder_id"); + //报工时工单的工单状态为暂停,报工数量为这条工单上次加这次报工数量的和,也就是这条工单每次记录的和 + WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + JSONObject jsonObject = wo.query("produceorder_id = '" + produceorder_id + "'").uniqueResult(0); + JSONObject produceorderMap = new JSONObject(); + produceorderMap.put("produceorder_id",produceorder_id); + if (row.getString("report_qty").equals("0") || StrUtil.isEmpty(row.getString("report_qty"))){ + produceorderMap.put("report_qty",report_qty); + }else { + Integer sum = Integer.parseInt(row.getString("report_qty")) + Integer.parseInt(report_qty); + produceorderMap.put("report_qty",sum); + } + produceorderMap.put("order_status", "03"); + produceorderMap.put("update_optid", currentUserId); + produceorderMap.put("update_optname", nickName); + produceorderMap.put("update_time", now); + wo.update(produceorderMap); + //同时修改这条工单对应的记录表中最新的一条数据的报工数量 + WQLObject wo_record = WQLObject.getWQLObject("MPS_BD_MacOperateRecord"); + //获取最新的工单的对应记录信息 + JSONObject newRecord = wo_record.query("produceorder_id = '"+produceorder_id+"' and (operatetime_end is null or operatetime_end = '')").uniqueResult(0); + newRecord.put("report_qty",report_qty); + newRecord.put("finish_qty",jsonObject.getString("real_qty")); + Integer finishproduct_qty = Integer.parseInt(jsonObject.getString("real_qty")) - Integer.parseInt(newRecord.getString("init_qty")); + newRecord.put("finishproduct_qty",finishproduct_qty); + newRecord.put("operatetime_end",now); + wo_record.update(newRecord); + //wms向acs发送请求 工单暂停 + // 报工的时候同时向acs发送工单暂停状态 + // TODO + JSONArray array = new JSONArray(); + JSONObject map = new JSONObject(); + map.put("ext_order_id",produceorder_id); + map.put("type","1"); + array.add(map); + wmsToAcsService.orderStatusUpdate(array); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finish(JSONObject param) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONObject row = param.getJSONObject("row"); + String produceorder_id = row.getString("produceorder_id"); + WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + JSONObject produceorderMap = new JSONObject(); + produceorderMap.put("produceorder_id",produceorder_id); + produceorderMap.put("order_status","04"); + produceorderMap.put("update_optid", currentUserId); + produceorderMap.put("device_id", null); + produceorderMap.put("update_optname", nickName); + produceorderMap.put("update_time", now); + produceorderMap.put("realproduceend_date", now); + wo.update(produceorderMap); + //wms向acs发送请求 工单强制完成 + // TODO + JSONArray array = new JSONArray(); + JSONObject map = new JSONObject(); + map.put("ext_order_id",produceorder_id); + map.put("type","3"); + array.add(map); + wmsToAcsService.orderStatusUpdate(array); + } + + @Override + public JSONObject getReportWork(JSONObject param) { + String produceorder_id = param.getString("produceorder_id"); + WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + JSONObject jsonProduceShiftOrder = wo.query("produceorder_id = '" + produceorder_id + "'").uniqueResult(0); + WQLObject wo_record = WQLObject.getWQLObject("MPS_BD_MacOperateRecord"); + //获取最新的工单的对应记录信息 + JSONObject jsonObject = wo_record.query("produceorder_id = '"+produceorder_id+"' and (operatetime_end is null or operatetime_end = '')").uniqueResult(0); + String finish_qty = jsonProduceShiftOrder.getString("real_qty"); + jsonObject.put("finish_qty",finish_qty); + Integer finishproduct_qty = Integer.parseInt(finish_qty) - Integer.parseInt(jsonObject.getString("init_qty")); + jsonObject.put("finishproduct_qty",finishproduct_qty); + return jsonObject; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void forceFinish(JSONObject param) { + this.finish(param); + } + + @Override + public JSONArray getDtl(JSONObject param) { + final String produceorder_id = param.getString("produceorder_id"); + JSONObject map = new JSONObject(); + map.put("flag","5"); + map.put("produceorder_id",produceorder_id); + JSONArray resultJSONArray = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map).process().getResultJSONArray(0); + return resultJSONArray; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/TeamcorrpersonServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/TeamcorrpersonServiceImpl.java new file mode 100644 index 000000000..e70bd24a6 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/TeamcorrpersonServiceImpl.java @@ -0,0 +1,76 @@ + +package org.nl.wms.mps.service.impl; + + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.mps.service.TeamcorrpersonService; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; + +/** + * @author geng by + * @description 服务实现 + * @date 2022-05-26 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class TeamcorrpersonServiceImpl implements TeamcorrpersonService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String team_id = MapUtil.getStr(whereJson, "team_id"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("team_id", team_id); + JSONObject json = WQL.getWO("MPS_Teamcorrperson001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "teamPerson.jockey_id"); + return json; + } + + @Override + public JSONArray getPersonIdByTeamId(JSONObject param) { + WQLObject wo = WQLObject.getWQLObject("PDM_BI_TeamCorrPerson"); + final JSONArray resultJSONArray = wo.query("team_id = '" + param.getString("team_id") + "'").getResultJSONArray(0); + return resultJSONArray; + } + + @Override + public void addPersons(JSONObject param) { + WQLObject wo = WQLObject.getWQLObject("PDM_BI_TeamCorrPerson"); + final String team_id = param.getString("team_id"); + final JSONArray persons = param.getJSONArray("persons"); + for (int i = 0; i < persons.size(); i++) { + final JSONObject jsonObject = persons.getJSONObject(i); + final String id = jsonObject.getString("id"); + final JSONObject object = wo.query("team_id = '" + team_id + "' and jockey_id = '" + id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(object)) { + JSONObject map = new JSONObject(); + map.put("team_person_id", IdUtil.getSnowflake(1, 1).nextId()); + map.put("team_id", team_id); + map.put("jockey_id", id); + wo.insert(map); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + WQLObject wo = WQLObject.getWQLObject("PDM_BI_TeamCorrPerson"); + for (Long team_person_id : ids) { + wo.delete("team_person_id = '" + team_person_id + "'"); + } + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/WorkteamServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/WorkteamServiceImpl.java new file mode 100644 index 000000000..99a838a8c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/WorkteamServiceImpl.java @@ -0,0 +1,177 @@ + +package org.nl.wms.mps.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.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.modules.common.utils.SecurityUtils; +import org.nl.modules.common.utils.dto.CurrentUser; +import org.nl.modules.system.service.dto.UserDto; +import org.nl.wms.mps.service.WorkteamService; +import org.nl.wms.mps.service.dto.WorkteamDto; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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-05-25 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class WorkteamServiceImpl implements WorkteamService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + final String search = MapUtil.getStr(whereJson, "search"); + String where = ""; + if (!StrUtil.isEmpty(search)) { + where = " AND (team_code like '%" + search + "%' OR team_name like '%" + search + "%' ) "; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete = '0'" + where, "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WorkteamDto.class); + return null; + } + + @Override + public WorkteamDto findById(Long team_id) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + JSONObject json = wo.query("team_id = '" + team_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(WorkteamDto.class); + } + return null; + } + + @Override + public WorkteamDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + JSONObject json = wo.query("team_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(WorkteamDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(WorkteamDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + CurrentUser currentUser = SecurityUtils.getCurrentUser(); + Long deptId = currentUser.getUser().getId(); + + //编码唯一性校验 + String team_code = dto.getTeam_code(); + WorkteamDto byCode = this.findByCode(team_code); + if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); + + dto.setTeam_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setSyscompanyid(deptId); + dto.setSysdeptid(deptId); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(WorkteamDto dto) { + WorkteamDto entity = this.findById(dto.getTeam_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + //编码唯一性校验 + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + String where = "is_delete = '0' and team_code = '" + dto.getTeam_code() + "' and team_id != '" + dto.getTeam_id() + "'"; + + JSONObject jsonObject = wo.query(where).uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + throw new BadRequestException("编码已存在!"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workteam"); + WQLObject wo_person = WQLObject.getWQLObject("PDM_BI_TeamCorrPerson"); + for (Long team_id : ids) { + wo.delete("team_id = '" + team_id + "'"); + wo_person.delete("team_id = '" + team_id + "'"); + } + } + + @Override + public JSONArray getClasssystem() { + // WQLObject wo = WQLObject.getWQLObject("PDM_BI_ClassSystem"); + // final JSONArray resultJSONArray = wo.query("is_delete = '0'").getResultJSONArray(0); + //return resultJSONArray; + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(JSONObject json) { + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String is_active = "1"; + if (StrUtil.equals("1", json.getString("is_active"))) { + is_active = "0"; + } + json.put("is_active", is_active); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("PDM_BI_WorkTeam").update(json); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql b/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql new file mode 100644 index 000000000..dec0bf4a1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql @@ -0,0 +1,178 @@ +[交易说明] + 交易名: 工单分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.jockey_id TYPEAS s_string + 输入.sale_id TYPEAS s_string + 输入.produceorder_id TYPEAS s_string + 输入.workprocedure_id TYPEAS s_string + 输入.order_type_scode TYPEAS s_string + 输入.order_status TYPEAS s_string + 输入.shift_type_scode TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.produceorder_code TYPEAS s_string + 输入.material TYPEAS s_string + 输入.product_series TYPEAS f_string + 输入.workprocedure_ids TYPEAS f_string + 输入.unFinish TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + ShiftOrder.*, + material.material_code, + material.material_name, + material.material_spec, + material.product_series, + classstandard.class_id, + classstandard.class_name, + device.device_name + FROM + MPS_BD_ProduceShiftOrder ShiftOrder + LEFT JOIN md_me_materialbase material ON material.material_id = ShiftOrder.material_id + LEFT JOIN em_bi_deviceinfo device ON ShiftOrder.device_id = device.device_id + LEFT JOIN md_pb_classstandard classstandard ON classstandard.class_id = material.product_series + WHERE + ShiftOrder.is_delete = '0' + OPTION 输入.order_type_scode <> "" + ShiftOrder.order_type_scode = 输入.order_type_scode + ENDOPTION + OPTION 输入.unFinish <> "" + ShiftOrder.order_status <> '04' + ENDOPTION + OPTION 输入.order_status <> "" + find_in_set( ShiftOrder.order_status, 输入.order_status) + ENDOPTION + OPTION 输入.shift_type_scode <> "" + ShiftOrder.shift_type_scode = 输入.shift_type_scode + ENDOPTION + OPTION 输入.begin_time <> "" + ShiftOrder.produce_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + ShiftOrder.produce_date <= 输入.end_time + ENDOPTION + OPTION 输入.sale_id <> "" + ShiftOrder.sale_id like 输入.sale_id + ENDOPTION + OPTION 输入.produceorder_code <> "" + ShiftOrder.produceorder_code like 输入.produceorder_code + ENDOPTION + OPTION 输入.material <> "" + ( + material.material_code like 输入.material or + material.material_name like 输入.material or + material.material_spec like 输入.material + ) + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + personDevice.*, + device.device_code, + device.device_name, + device.workprocedure_id + FROM + PDM_BI_PersonCorrDevice personDevice + LEFT JOIN em_bi_deviceinfo device ON personDevice.device_id = device.device_id + WHERE + device.is_delete = '0' and personDevice.jockey_id = 输入.jockey_id + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + shiftOrder.*, + workprocedure.workprocedure_name, + material.material_code, + material.material_name, + material.material_spec + FROM + MPS_BD_ProduceShiftOrder shiftOrder + left join PDM_BI_WorkProcedure workprocedure on workprocedure.workprocedure_id = shiftOrder.workprocedure_id + left join md_me_materialbase material on material.material_id = shiftOrder.material_id + WHERE + shiftOrder.is_delete = '0' and shiftOrder.order_status in ('01', '02', '03') + and shiftOrder.workprocedure_id in 输入.workprocedure_ids + order by + shiftOrder.update_time desc + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + personDevice.*, + device.device_code, + device.device_name + FROM + PDM_BI_PersonCorrDevice personDevice + LEFT JOIN em_bi_deviceinfo device ON personDevice.device_id = device.device_id + WHERE + device.is_delete = '0' and personDevice.jockey_id = 输入.jockey_id and device.workprocedure_id = 输入.workprocedure_id + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + record.*, + device.device_code, + device.device_name, + user.nick_name + FROM + MPS_BD_MacOperateRecord record + LEFT JOIN em_bi_deviceinfo device ON record.device_id = device.device_id + LEFT JOIN sys_user user ON user.user_id = record.jockey_id + WHERE + record.produceorder_id = 输入.produceorder_id + order by + record.operatetime_start + ENDSELECT + ENDQUERY + ENDIF + diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_Personcorrdevice001.wql b/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_Personcorrdevice001.wql new file mode 100644 index 000000000..cb007904f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_Personcorrdevice001.wql @@ -0,0 +1,130 @@ +[交易说明] + 交易名: 人员设备维护查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.user_id TYPEAS s_string + 输入.device_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + view_person.* + FROM + ( + SELECT + personDevice.*, + user.* + FROM + PDM_BI_PersonCorrDevice personDevice + LEFT JOIN sys_user user ON personDevice.jockey_id = user.user_id + WHERE + user.enabled = '1' + GROUP BY + personDevice.jockey_id + ) view_person + where + 1 = 1 + OPTION 输入.search <> "" + (view_person.username like 输入.search or + view_person.nick_name like 输入.search or + view_person.phone like 输入.search) + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + personDevice.* , + device.device_code, + device.device_name, + item.item_code, + item.item_name + FROM + PDM_BI_PersonCorrDevice personDevice + LEFT JOIN sys_user user ON personDevice.jockey_id = user.user_id + LEFT JOIN em_bi_deviceinfo device ON personDevice.device_id = device.device_id + left join PDM_BI_DeviceItemValue deviceValue on deviceValue.device_id = device.device_id + left join PDM_BI_DeviceItem item on item.item_id = deviceValue.item_id + where + personDevice.jockey_id = 输入.user_id + GROUP BY + item.item_code + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + PAGEQUERY + SELECT + personDevice.*, + device.device_code, + device.device_name, + work.workprocedure_code, + work.workprocedure_name + FROM + PDM_BI_PersonCorrDevice personDevice + left join em_bi_deviceinfo device on device.device_id = personDevice.device_id + left join PDM_BI_WorkProcedure work on device.workprocedure_id = work.workprocedure_id + where + personDevice.jockey_id = 输入.user_id and (personDevice.device_id is not null or personDevice.device_id != "" ) + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + deviceItemValue.device_id, + deviceItemValue.item_id, + deviceItemValue.item_value, + item.item_code + FROM + PDM_BI_DeviceItemValue deviceItemValue + LEFT JOIN em_bi_deviceinfo device ON deviceItemValue.device_id = device.device_id + LEFT JOIN PDM_BI_DeviceItem item ON deviceItemValue.item_id = item.item_id + where + deviceItemValue.device_id = 输入.device_id + ENDSELECT + ENDQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_Teamcorrperson001.wql b/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_Teamcorrperson001.wql new file mode 100644 index 000000000..b6c862b8d --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_Teamcorrperson001.wql @@ -0,0 +1,58 @@ +[交易说明] + 交易名: 班组人员维护查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.team_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + teamPerson.*, + user.* + FROM + PDM_BI_TeamCorrPerson teamPerson + LEFT JOIN PDM_BI_WorkTeam team ON teamPerson.team_id = team.team_id + LEFT JOIN sys_user user ON teamPerson.jockey_id = user.user_id + WHERE + teamPerson.team_id = 输入.team_id + ENDSELECT + ENDPAGEQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java new file mode 100644 index 000000000..322deb7e4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/rest/CallMaterialController.java @@ -0,0 +1,39 @@ +package org.nl.wms.pda.callmaterial.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pda.callmaterial.service.CallMaterialService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "手持叫料") +@RequestMapping("api/pda/callMaterial") +@Slf4j +public class CallMaterialController { + + private final CallMaterialService callMaterialService; + + @PostMapping("/queryPoint") + @Log("查询区域点位") + @ApiOperation("查询区域点位") + public ResponseEntity queryPoint() { + return new ResponseEntity<>(callMaterialService.queryPoint(), HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("叫料确定") + @ApiOperation("叫料确定") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(callMaterialService.confirm(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java new file mode 100644 index 000000000..e85a64bcf --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/CallMaterialService.java @@ -0,0 +1,19 @@ +package org.nl.wms.pda.callmaterial.service; + +import com.alibaba.fastjson.JSONObject; + +public interface CallMaterialService { + + /** + * 查询区域点位 + * @return json + */ + JSONObject queryPoint(); + + /** + * 叫料确定 + * @param whereJson / + * @return JSONObject + */ + JSONObject confirm(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java new file mode 100644 index 000000000..9cd9cae14 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/service/impl/CallMaterialServiceImpl.java @@ -0,0 +1,60 @@ +package org.nl.wms.pda.callmaterial.service.impl; + +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.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.callmaterial.service.CallMaterialService; +import org.nl.modules.wql.WQL; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CallMaterialServiceImpl implements CallMaterialService { + private final AcsToWmsService acsToWmsService; + + @Override + public JSONObject queryPoint() { + JSONObject result = new JSONObject(); + // 1.查询区域:油漆区域 YQQY01 + JSONArray regionArr = WQL.getWO("PDA_CALLMATERIAL_01").addParam("flag", "1").process().getResultJSONArray(0); + // 2.根据区域查询对应的物料上料位 + JSONObject resultJson = new JSONObject(); + for (int i = 0; i < regionArr.size(); i++) { + JSONObject jsonRegion = regionArr.getJSONObject(i); + JSONArray pointArr = WQL.getWO("PDA_CALLMATERIAL_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } + resultJson.put("regionja", regionArr); + result.put("result", resultJson); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject whereJson) { + JSONObject result = new JSONObject(); + // 1、准备参数:point_code、type = 4 + JSONObject param = new JSONObject(); + param.put("type","4"); + param.put("point_code",whereJson.getString("point_code")); + // 2、调用接口 + JSONObject json = acsToWmsService.apply(param); + if (StrUtil.equals(json.getString("status"), "200")) { + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + } else { + result.put("result", ""); + result.put("code", "0"); + result.put("desc", "操作失败:"+json.getString("message")); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL_01.wql b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL_01.wql new file mode 100644 index 000000000..3c39c5e1b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callmaterial/wql/PDA_CALLMATERIAL_01.wql @@ -0,0 +1,77 @@ +[交易说明] + 交易名: 手持叫料查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_id TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + region_id, + region_code, + region_name + FROM + sch_base_region + WHERE + is_used = '1' + AND region_code = 'YQQY01' + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point_id, + point_code, + point_name + FROM + sch_base_point + WHERE + is_used = '1' + AND is_delete = '0' + AND is_host = '0' + AND device_point_type = '3' + + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java new file mode 100644 index 000000000..c666046d1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/rest/CallVehicleController.java @@ -0,0 +1,39 @@ +package org.nl.wms.pda.callvehicle.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pda.callvehicle.service.CallVehicleService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "手持呼叫空托盘") +@RequestMapping("api/pda/callEmpty") +@Slf4j +public class CallVehicleController { + + private final CallVehicleService callVehicleService; + + @PostMapping("/queryPoint") + @Log("查询区域点位") + @ApiOperation("查询区域点位") + public ResponseEntity queryPoint() { + return new ResponseEntity<>(callVehicleService.queryPoint(), HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("呼叫空托盘确定") + @ApiOperation("呼叫空托盘确定") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(callVehicleService.confirm(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java new file mode 100644 index 000000000..66d4c7b5b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/CallVehicleService.java @@ -0,0 +1,19 @@ +package org.nl.wms.pda.callvehicle.service; + +import com.alibaba.fastjson.JSONObject; + +public interface CallVehicleService { + + /** + * 查询区域点位 + * @return JSONObject + */ + JSONObject queryPoint(); + + /** + * 呼叫空托盘确定 + * @param whereJson / + * @return JSONObject + */ + JSONObject confirm(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java new file mode 100644 index 000000000..db8882788 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/service/impl/CallVehicleServiceImpl.java @@ -0,0 +1,69 @@ +package org.nl.wms.pda.callvehicle.service.impl; + +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.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.callvehicle.service.CallVehicleService; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CallVehicleServiceImpl implements CallVehicleService { + + private final AcsToWmsService acsToWmsService; + + @Override + public JSONObject queryPoint() { + JSONObject result = new JSONObject(); + // 1.查询区域:油漆区域 YQQY01、共挤区域 GJQY01 + JSONArray regionArr = WQL.getWO("PDA_CALLVEHICLE_01").addParam("flag", "1").process().getResultJSONArray(0); + // 2.根据区域查询对应的物料上料位 + JSONObject resultJson = new JSONObject(); + for (int i = 0; i < regionArr.size(); i++) { + JSONObject jsonRegion = regionArr.getJSONObject(i); + JSONArray pointArr = WQL.getWO("PDA_CALLVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } + resultJson.put("regionja", regionArr); + result.put("result", resultJson); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject whereJson) { + JSONObject result = new JSONObject(); + // 1、准备参数:point_code、type:1为共挤区域,3为油漆区域 + JSONObject param = new JSONObject(); + + String region_id = whereJson.getString("region_id"); + JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); + String region_code = jsonObject.getString("region_code"); + if (StrUtil.equals(region_code, "GJQY01")) param.put("type","1"); + if (StrUtil.equals(region_code, "YQQY01")) param.put("type","3"); + + param.put("point_code",whereJson.getString("point_code")); + param.put("vehicle_num",whereJson.getString("qty")); + // 2、调用接口 + JSONObject json = acsToWmsService.apply(param); + if (StrUtil.equals(json.getString("status"), "200")) { + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + } else { + result.put("result", ""); + result.put("code", "0"); + result.put("desc", "操作失败:"+json.getString("message")); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/wql/PDA_CALLVEHICLE_01.wql b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/wql/PDA_CALLVEHICLE_01.wql new file mode 100644 index 000000000..339dd16d5 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/callvehicle/wql/PDA_CALLVEHICLE_01.wql @@ -0,0 +1,77 @@ +[交易说明] + 交易名: 手持呼叫空托盘查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_id TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + region_id, + region_code, + region_name + FROM + sch_base_region + WHERE + is_used = '1' + AND region_code in ('YQQY01','GJQY01') + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point_id, + point_code, + point_name + FROM + sch_base_point + WHERE + is_used = '1' + AND is_delete = '0' + AND is_host = '0' + AND device_point_type = '1' + + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/rest/EmptyAndQtyController.java b/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/rest/EmptyAndQtyController.java new file mode 100644 index 000000000..371d7c9ee --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/rest/EmptyAndQtyController.java @@ -0,0 +1,32 @@ +package org.nl.wms.pda.emptyandqty.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pda.emptyandqty.service.EmptyAndQtyService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "手持空托盘与数量绑定") +@RequestMapping("api/pda/emptyAndQty") +@Slf4j +public class EmptyAndQtyController { + + private final EmptyAndQtyService emptyAndQtyService; + + @PostMapping("/confirm") + @Log("绑定") + @ApiOperation("绑定") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(emptyAndQtyService.confirm(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/service/EmptyAndQtyService.java b/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/service/EmptyAndQtyService.java new file mode 100644 index 000000000..70a1bd845 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/service/EmptyAndQtyService.java @@ -0,0 +1,13 @@ +package org.nl.wms.pda.emptyandqty.service; + +import com.alibaba.fastjson.JSONObject; + +public interface EmptyAndQtyService { + + /** + * 绑定 + * @param whereJson / + * @return JSONObject + */ + JSONObject confirm(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/service/impl/EmptyAndQtyServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/service/impl/EmptyAndQtyServiceImpl.java new file mode 100644 index 000000000..c87db6409 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/emptyandqty/service/impl/EmptyAndQtyServiceImpl.java @@ -0,0 +1,49 @@ +package org.nl.wms.pda.emptyandqty.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.master.service.StoragevehicleinfoService; +import org.nl.wms.basedata.master.service.dto.StoragevehicleinfoDto; +import org.nl.wms.pda.emptyandqty.service.EmptyAndQtyService; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class EmptyAndQtyServiceImpl implements EmptyAndQtyService { + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject whereJson) { + String vehicle_code = whereJson.getString("vehicle_code"); + String qty = whereJson.getString("qty"); + + WQLObject vqTab = WQLObject.getWQLObject("PDM_BI_vehicleQty"); + StoragevehicleinfoDto byCode = SpringContextHolder.getBean(StoragevehicleinfoService.class).findByCode(vehicle_code); + + // 插入记录 + JSONObject json = new JSONObject(); + json.put("vehicleqty_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("vehicle_id", byCode.getStoragevehicle_id()); + json.put("vehicle_code", vehicle_code); + json.put("qty", qty); + json.put("is_task", "0"); + json.put("create_id", SecurityUtils.getCurrentUserId()); + json.put("create_name", SecurityUtils.getCurrentNickName()); + json.put("create_time", DateUtil.now()); + vqTab.insert(json); + // 返回成功 + JSONObject result = new JSONObject(); + result.put("srb", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java new file mode 100644 index 000000000..4e283d4c3 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/rest/SendMaterialController.java @@ -0,0 +1,39 @@ +package org.nl.wms.pda.sendmaterial.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pda.sendmaterial.service.SendMaterialService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "手持送料") +@RequestMapping("api/pda/sendMaterial") +@Slf4j +public class SendMaterialController { + + private final SendMaterialService sendMaterialService; + + @PostMapping("/queryPoint") + @Log("查询区域点位") + @ApiOperation("查询区域点位") + public ResponseEntity queryPoint() { + return new ResponseEntity<>(sendMaterialService.queryPoint(), HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("送料确定") + @ApiOperation("送料确定") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(sendMaterialService.confirm(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java new file mode 100644 index 000000000..8e00ec01c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/SendMaterialService.java @@ -0,0 +1,19 @@ +package org.nl.wms.pda.sendmaterial.service; + +import com.alibaba.fastjson.JSONObject; + +public interface SendMaterialService { + + /** + * 查询区域点位 + * @return JSONObject + */ + JSONObject queryPoint(); + + /** + * 送料确定 + * @param whereJson / + * @return JSONObject + */ + JSONObject confirm(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java new file mode 100644 index 000000000..315590199 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/service/impl/SendMaterialServiceImpl.java @@ -0,0 +1,69 @@ +package org.nl.wms.pda.sendmaterial.service.impl; + +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.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.sendmaterial.service.SendMaterialService; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SendMaterialServiceImpl implements SendMaterialService { + + private final AcsToWmsService acsToWmsService; + + @Override + public JSONObject queryPoint() { + JSONObject result = new JSONObject(); + // 1.查询区域:豪凯区域 HKQY01、共挤区域 GJQY01 + JSONArray regionArr = WQL.getWO("PDA_SENDMATERIAL_01").addParam("flag", "1").process().getResultJSONArray(0); + // 2.根据区域查询对应的物料上料位 + JSONObject resultJson = new JSONObject(); + for (int i = 0; i < regionArr.size(); i++) { + JSONObject jsonRegion = regionArr.getJSONObject(i); + JSONArray pointArr = WQL.getWO("PDA_SENDMATERIAL_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } + resultJson.put("regionja", regionArr); + result.put("result", resultJson); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject whereJson) { + JSONObject result = new JSONObject(); + // 1、准备参数:point_code、type:2为共挤区域,8为豪凯区域 + JSONObject param = new JSONObject(); + + String region_id = whereJson.getString("region_id"); + JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); + String region_code = jsonObject.getString("region_code"); + if (StrUtil.equals(region_code, "GJQY01")) param.put("type","2"); + if (StrUtil.equals(region_code, "HKQY01")) param.put("type","8"); + + param.put("point_code",whereJson.getString("point_code")); + param.put("qty",whereJson.getString("qty")); + // 2、调用接口 + JSONObject json = acsToWmsService.apply(param); + if (StrUtil.equals(json.getString("status"), "200")) { + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + } else { + result.put("result", ""); + result.put("code", "0"); + result.put("desc", "操作失败:"+json.getString("message")); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/wql/PDA_SENDMATERIAL_01.wql b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/wql/PDA_SENDMATERIAL_01.wql new file mode 100644 index 000000000..5c5c7cec1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendmaterial/wql/PDA_SENDMATERIAL_01.wql @@ -0,0 +1,77 @@ +[交易说明] + 交易名: 手持送料查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_id TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + region_id, + region_code, + region_name + FROM + sch_base_region + WHERE + is_used = '1' + AND region_code in ('HKQY01','GJQY01') + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point_id, + point_code, + point_name + FROM + sch_base_point + WHERE + is_used = '1' + AND is_delete = '0' + AND is_host = '0' + AND device_point_type = '2' + + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java new file mode 100644 index 000000000..4ba41544e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/rest/SendVehicleController.java @@ -0,0 +1,39 @@ +package org.nl.wms.pda.sendvehicle.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pda.sendvehicle.service.SendVehicleService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "手持送空托盘") +@RequestMapping("api/pda/sendEmpty") +@Slf4j +public class SendVehicleController { + + private final SendVehicleService sendVehicleService; + + @PostMapping("/queryPoint") + @Log("查询区域点位") + @ApiOperation("查询区域点位") + public ResponseEntity queryPoint() { + return new ResponseEntity<>(sendVehicleService.queryPoint(), HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("送空托盘确定") + @ApiOperation("送空托盘确定") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(sendVehicleService.confirm(whereJson), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java new file mode 100644 index 000000000..f4d5ad0f1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/SendVehicleService.java @@ -0,0 +1,19 @@ +package org.nl.wms.pda.sendvehicle.service; + +import com.alibaba.fastjson.JSONObject; + +public interface SendVehicleService { + + /** + * 查询区域点位 + * @return JSONObject + */ + JSONObject queryPoint(); + + /** + * 送空托盘确定 + * @param whereJson / + * @return JSONObject + */ + JSONObject confirm(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java new file mode 100644 index 000000000..a2578895b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/service/impl/SendVehicleServiceImpl.java @@ -0,0 +1,76 @@ +package org.nl.wms.pda.sendvehicle.service.impl; + +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.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.sendvehicle.service.SendVehicleService; +import org.nl.wms.sch.tasks.RegionTypeEnum; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SendVehicleServiceImpl implements SendVehicleService { + + private final AcsToWmsService acsToWmsService; + + @Override + public JSONObject queryPoint() { + JSONObject result = new JSONObject(); + // 1.查询区域:输送区域 SSX01、油漆区域 YQQY01 + JSONArray regionArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "1").process().getResultJSONArray(0); + // 2.根据区域查询对应的物料上料位 + JSONObject resultJson = new JSONObject(); + for (int i = 0; i < regionArr.size(); i++) { + JSONObject jsonRegion = regionArr.getJSONObject(i); + if (StrUtil.equals(jsonRegion.getString("region_id"), RegionTypeEnum.SSX.getId())) { + JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "2").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } else { + JSONArray pointArr = WQL.getWO("PDA_SENDVEHICLE_01").addParam("flag", "3").addParam("region_id", jsonRegion.getString("region_id")).process().getResultJSONArray(0); + jsonRegion.put("pointArr", pointArr); + } + } + resultJson.put("regionja", regionArr); + result.put("result", resultJson); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject whereJson) { + JSONObject result = new JSONObject(); + // 1、准备参数:point_code、type:6为输送线区域,5为油漆区域 + JSONObject param = new JSONObject(); + + String region_id = whereJson.getString("region_id"); + JSONObject jsonObject = WQLObject.getWQLObject("sch_base_region").query("region_id ='" + region_id + "'").uniqueResult(0); + String region_code = jsonObject.getString("region_code"); + if (StrUtil.equals(region_code, "SSX01")) param.put("type","6"); + if (StrUtil.equals(region_code, "YQQY01")) param.put("type","5"); + + param.put("point_code",whereJson.getString("point_code")); + param.put("vehicle_code",whereJson.getString("vehicle_code")); + param.put("vehicle_num",whereJson.getString("qty")); + // 2、调用接口 + JSONObject json = acsToWmsService.apply(param); + if (StrUtil.equals(json.getString("status"), "200")) { + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + } else { + result.put("result", ""); + result.put("code", "0"); + result.put("desc", "操作失败:"+json.getString("message")); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql new file mode 100644 index 000000000..4c7fdef73 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pda/sendvehicle/wql/PDA_SENDVEHICLE_01.wql @@ -0,0 +1,99 @@ +[交易说明] + 交易名: 手持送空托盘查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_id TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + region_id, + region_code, + region_name + FROM + sch_base_region + WHERE + is_used = '1' + AND region_code in ('SSX01','YQQY01') + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point_id, + point_code, + point_name + FROM + sch_base_point + WHERE + is_used = '1' + AND is_delete = '0' + AND is_host = '0' + AND device_point_type = '6' + + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + point_id, + point_code, + point_name + FROM + sch_base_point + WHERE + is_used = '1' + AND is_delete = '0' + AND is_host = '0' + AND device_point_type = '4' + + OPTION 输入.region_id <> "" + region_id = 输入.region_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java new file mode 100644 index 000000000..bec71efc3 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java @@ -0,0 +1,77 @@ + +package org.nl.wms.pdm.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-05-25 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "生产设备管理") +@RequestMapping("/api/device") +@Slf4j +public class DeviceController { + + private final DeviceService deviceService; + + @GetMapping + @Log("查询生产设备") + @ApiOperation("查询生产设备") + //@PreAuthorize("@el.check('device:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(deviceService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增生产设备") + @ApiOperation("新增生产设备") + //@PreAuthorize("@el.check('device:add')") + public ResponseEntity create(@Validated @RequestBody DeviceDto dto){ + deviceService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生产设备") + @ApiOperation("修改生产设备") + //@PreAuthorize("@el.check('device:edit')") + public ResponseEntity update(@Validated @RequestBody DeviceDto dto){ + deviceService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生产设备") + @ApiOperation("删除生产设备") + //@PreAuthorize("@el.check('device:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + deviceService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + public ResponseEntity changeActive(@RequestBody JSONObject json) { + deviceService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceitemController.java b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceitemController.java new file mode 100644 index 000000000..9e66e1c1e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceitemController.java @@ -0,0 +1,68 @@ + +package org.nl.wms.pdm.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.service.DeviceitemService; +import org.nl.wms.pdm.service.dto.DeviceitemDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-05-25 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "生产设备扩展项管理") +@RequestMapping("/api/deviceitem") +@Slf4j +public class DeviceitemController { + + private final DeviceitemService deviceitemService; + + @GetMapping + @Log("查询生产设备扩展项") + @ApiOperation("查询生产设备扩展项") + //@PreAuthorize("@el.check('deviceitem:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(deviceitemService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增生产设备扩展项") + @ApiOperation("新增生产设备扩展项") + //@PreAuthorize("@el.check('deviceitem:add')") + public ResponseEntity create(@Validated @RequestBody DeviceitemDto dto){ + deviceitemService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生产设备扩展项") + @ApiOperation("修改生产设备扩展项") + //@PreAuthorize("@el.check('deviceitem:edit')") + public ResponseEntity update(@Validated @RequestBody DeviceitemDto dto){ + deviceitemService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生产设备扩展项") + @ApiOperation("删除生产设备扩展项") + //@PreAuthorize("@el.check('deviceitem:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + deviceitemService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/rest/ProcessrouteController.java b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/ProcessrouteController.java new file mode 100644 index 000000000..e2b7be9d0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/ProcessrouteController.java @@ -0,0 +1,96 @@ + +package org.nl.wms.pdm.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.service.ProcessrouteService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Zz + * @date 2022-03-21 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "工艺路线管理") +@RequestMapping("/api/processroute") +@Slf4j +public class ProcessrouteController { + + private final ProcessrouteService processrouteService; + + @GetMapping + @Log("查询工艺路线") + @ApiOperation("查询工艺路线") + //@PreAuthorize("@el.check('processroute:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(processrouteService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增工艺路线") + @ApiOperation("新增工艺路线") + //@PreAuthorize("@el.check('processroute:add')") + public ResponseEntity create(@RequestBody JSONObject json) { + processrouteService.create(json); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改工艺路线") + @ApiOperation("修改工艺路线") + //@PreAuthorize("@el.check('processroute:edit')") + public ResponseEntity update(@RequestBody JSONObject whereJson) { + processrouteService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除工艺路线") + @ApiOperation("删除工艺路线") + //@PreAuthorize("@el.check('processroute:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + processrouteService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("获取工序") + @ApiOperation("获取工序") + @GetMapping("/getWorkList") + public ResponseEntity getWorkList() { + return new ResponseEntity<>(processrouteService.getWorkList(), HttpStatus.OK); + } + + @Log("获取明细") + @ApiOperation("获取明细") + @GetMapping("/getDtl") + public ResponseEntity getDtl(@RequestParam Map map) { + return new ResponseEntity<>(processrouteService.getDtl(map), HttpStatus.OK); + } + + @Log("提交") + @ApiOperation("提交") + @PutMapping("/submit") + public ResponseEntity submit(@RequestBody JSONObject whereJson) { + processrouteService.submit(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("取消提交") + @ApiOperation("取消提交") + @PutMapping("/CancelSubmit") + public ResponseEntity CancelSubmit(@RequestBody JSONObject whereJson) { + processrouteService.CancelSubmit(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/rest/WorkProcedureController.java b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/WorkProcedureController.java new file mode 100644 index 000000000..289ff8eb7 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/rest/WorkProcedureController.java @@ -0,0 +1,79 @@ + +package org.nl.wms.pdm.rest; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.service.WorkProcedureService; +import org.nl.wms.pdm.service.dto.WorkProcedureDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * + * @author Zz + * @date 2021-12-19 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "工序管理") +@RequestMapping("/api/workProcedure") +@Slf4j +public class WorkProcedureController { + + + private final WorkProcedureService workProcedureService; + + @GetMapping + @Log("查询工序") + @ApiOperation("查询工序") + //@PreAuthorize("@el.check('WorkProcedure:list')") + + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(workProcedureService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增工序") + @ApiOperation("新增工序") + //@PreAuthorize("@el.check('WorkProcedure:add')") + + public ResponseEntity create(@Validated @RequestBody WorkProcedureDto dto) { + workProcedureService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改工序") + @ApiOperation("修改工序") + //@PreAuthorize("@el.check('WorkProcedure:edit')") + + public ResponseEntity update(@Validated @RequestBody WorkProcedureDto dto) { + workProcedureService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除工序") + @ApiOperation("删除工序") + //@PreAuthorize("@el.check('WorkProcedure:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + workProcedureService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/downSelect") + @Log("查询工序下拉列表") + @ApiOperation("查询工序下拉列表") + public ResponseEntity downSelect() { + return new ResponseEntity<>(workProcedureService.downSelect(), HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java new file mode 100644 index 000000000..147b5b825 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java @@ -0,0 +1,68 @@ + +package org.nl.wms.pdm.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-05-25 +**/ +public interface DeviceService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param device_id ID + * @return Device + */ + DeviceDto findById(Long device_id); + + /** + * 根据编码查询 + * @param code code + * @return Device + */ + DeviceDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(DeviceDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(DeviceDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + + void changeActive(JSONObject json); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceitemService.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceitemService.java new file mode 100644 index 000000000..158aa1160 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceitemService.java @@ -0,0 +1,65 @@ + +package org.nl.wms.pdm.service; + +import org.nl.wms.pdm.service.dto.DeviceitemDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-05-25 +**/ +public interface DeviceitemService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param item_id ID + * @return Deviceitem + */ + DeviceitemDto findById(Long item_id); + + /** + * 根据编码查询 + * @param code code + * @return Deviceitem + */ + DeviceitemDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(DeviceitemDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(DeviceitemDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/ProcessrouteService.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/ProcessrouteService.java new file mode 100644 index 000000000..81661a9c4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/ProcessrouteService.java @@ -0,0 +1,100 @@ + +package org.nl.wms.pdm.service; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pdm.service.dto.ProcessrouteDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author Zz + * @description 服务接口 + * @date 2022-03-21 + **/ +public interface ProcessrouteService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param processroute_id ID + * @return Processroute + */ + ProcessrouteDto findById(String processroute_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Processroute + */ + ProcessrouteDto findByCode(String code); + + + /** + * 创建 + * + * @param json / + */ + void create(JSONObject json); + + /** + * 编辑 + * + * @param whereJson / + */ + void update(JSONObject whereJson); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 获取工序 + */ + JSONArray getWorkList(); + + /** + * 获取明细 + * + * @param map / + */ + JSONArray getDtl(Map map); + + /** + * 提交 + * + * @param whereJson / + */ + void submit(JSONObject whereJson); + + /** + * 取消提交 + * + * @param whereJson / + */ + void CancelSubmit(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/WorkProcedureService.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/WorkProcedureService.java new file mode 100644 index 000000000..37dd76114 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/WorkProcedureService.java @@ -0,0 +1,81 @@ + +package org.nl.wms.pdm.service; + +import com.alibaba.fastjson.JSONArray; +import org.nl.wms.pdm.service.dto.WorkProcedureDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务接口 + * @date 2021-12-19 + **/ +public interface WorkProcedureService { + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param workProcedure_id ID + * @return WorkProcedure + */ + WorkProcedureDto findById(Long workProcedure_id); + + /** + * 根据编码查询 + * + * @param code code + * @return WorkProcedure + */ + WorkProcedureDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(WorkProcedureDto dto); + + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 编辑 + * + * @param dto / + */ + void update(WorkProcedureDto dto); + + + /** + * 获取下拉选列表 + * + * @return + */ + JSONArray downSelect(); + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/BomDto.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/BomDto.java new file mode 100644 index 000000000..f85d6b14e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/BomDto.java @@ -0,0 +1,63 @@ +package org.nl.wms.pdm.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author geng by +* @date 2022-06-02 +**/ +@Data +public class BomDto implements Serializable { + + /** BOM单标识 */ + private String bom_uuid; + + /** BOM单编码 */ + private String bom_code; + + /** BOM单名称 */ + private String bom_name; + + /** 物料标识 */ + private String material_uuid; + + /** 产品工艺路线标识 */ + private String processroute_uuid; + + /** 成材率百分比 */ + private BigDecimal yield_rate; + + /** 成品率百分比 */ + private BigDecimal endproduct_rate; + + /** BOM单状态 */ + private String bom_status; + + /** 明细数 */ + private BigDecimal detail_count; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private Long create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java new file mode 100644 index 000000000..e1918955c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java @@ -0,0 +1,79 @@ +package org.nl.wms.pdm.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; + +/** + * @author geng by + * @description / + * @date 2022-05-25 + **/ +@Data +public class DeviceDto implements Serializable { + + /** 设备标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long device_id; + + /** + * 设备编码 + */ + private String device_code; + + /** + * 设备名称 + */ + private String device_name; + + /** + * 设备型号 + */ + private String device_model; + + /** + * 外部编码 + */ + private String extend_code; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_active; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 设备产能 + */ + private BigDecimal productivity; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceitemDto.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceitemDto.java new file mode 100644 index 000000000..dc36e1a15 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceitemDto.java @@ -0,0 +1,54 @@ +package org.nl.wms.pdm.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; + +/** + * @author geng by + * @description / + * @date 2022-05-25 + **/ +@Data +public class DeviceitemDto implements Serializable { + + /** 项点标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long item_id; + + /** + * 项点编码 + */ + private String item_code; + + /** + * 项点名称 + */ + private String item_name; + + /** + * 默认值 + */ + private String default_value; + + /** + * 备注 + */ + private String remark; + + /** + * 顺序 + */ + private BigDecimal order_seq; + + /** + * 默认值类型 + */ + private String data_type; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/ProcessrouteDto.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/ProcessrouteDto.java new file mode 100644 index 000000000..bbaabc202 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/ProcessrouteDto.java @@ -0,0 +1,76 @@ +package org.nl.wms.pdm.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 Lxy +* @date 2022-03-21 +**/ +@Data +public class ProcessrouteDto implements Serializable { + + /** 工艺路线标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long processroute_id; + + /** 工艺路线编码 */ + private String processroute_code; + + /** 工艺路线名称 */ + private String processroute_name; + + /** 状态 */ + private String processroute_status; + + /** 明细数 */ + private BigDecimal detail_count; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; + + /** 审核人 */ + private Long audit_optid; + + /** 审核人姓名 */ + private String audit_optname; + + /** 审核时间 */ + private String audit_time; + + /** 部门ID */ + private Long sysdeptid; + + /** 公司ID */ + private Long syscompanyid; + + /** 是否删除 */ + private String is_delete; + + /** 外部标识 */ + private String ext_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/ProductprocessrouteDto.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/ProductprocessrouteDto.java new file mode 100644 index 000000000..4a800eeb2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/ProductprocessrouteDto.java @@ -0,0 +1,78 @@ +package org.nl.wms.pdm.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 2022-03-22 +**/ +@Data +public class ProductprocessrouteDto implements Serializable { + + /** 产品工艺路线标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long productprocess_id; + + /** 物料标识 */ + private Long material_id; + + /** 工艺路线标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long processroute_id; + + /** 产品工艺路线状态 */ + private String productprocess_status; + + /** 明细数 */ + private BigDecimal detail_count; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; + + /** 修改时间 */ + private String update_time; + + /** 审核人 */ + private Long audit_optid; + + /** 审核人姓名 */ + private String audit_optname; + + /** 审核时间 */ + private String audit_time; + + /** 部门ID */ + private Long sysdeptid; + + /** 公司ID */ + private Long syscompanyid; + + /** 是否删除 */ + private String is_delete; + + /** 外部标识 */ + private String ext_id; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkProcedureDto.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkProcedureDto.java new file mode 100644 index 000000000..e4c693429 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkProcedureDto.java @@ -0,0 +1,110 @@ +package org.nl.wms.pdm.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author ldjun + * @description / + * @date 2021-12-19 + **/ +@Data +public class WorkProcedureDto implements Serializable { + + /** 工序标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long workprocedure_id; + private Long sysdeptid; + private Long syscompanyid; + + /** + * 工序编码 + */ + private String workprocedure_code; + + /** + * 工序名称 + */ + private String workprocedure_name; + + /** + * 是否关键工序 + */ + private String is_keyworkprocedure; + + /** + * 是否完工汇报 + */ + private String is_finishback; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 外部标识 + */ + private String ext_id; + + /** + * 业务组织标识 + */ + private Long org_id; + + /** + * 业务组织编码 + */ + private String org_code; + + /** + * 业务组织名字 + */ + private String org_name; + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; +} + diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java new file mode 100644 index 000000000..96a4792d9 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java @@ -0,0 +1,140 @@ + +package org.nl.wms.pdm.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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-05-25 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class DeviceServiceImpl implements DeviceService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = MapUtil.getStr(whereJson, "search"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + if (!StrUtil.isEmpty(search)) { + map.put("search", "%" + search + "%"); + } + JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("em_bi_deviceinfo"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(DeviceDto.class); + return null; + } + + @Override + public DeviceDto findById(Long device_id) { + WQLObject wo = WQLObject.getWQLObject("em_bi_deviceinfo"); + JSONObject json = wo.query("device_id = '" + device_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DeviceDto.class); + } + return null; + } + + @Override + public DeviceDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("em_bi_deviceinfo"); + JSONObject json = wo.query("device_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DeviceDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(DeviceDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //编码唯一性校验 + String device_code = dto.getDevice_code(); + DeviceDto byCode = this.findByCode(device_code); + if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); + dto.setDevice_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("em_bi_deviceinfo"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(DeviceDto dto) { + DeviceDto entity = this.findById(dto.getDevice_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + //编码唯一性校验 + WQLObject wo = WQLObject.getWQLObject("em_bi_deviceinfo"); + String where = "is_delete = '0' and device_code = '" + dto.getDevice_code() + "' and device_id != '" + dto.getDevice_id() + "'"; + + JSONObject jsonObject = wo.query(where).uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + throw new BadRequestException("编码已存在!"); + } + + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + WQLObject wo = WQLObject.getWQLObject("em_bi_deviceinfo"); + WQLObject wo_value = WQLObject.getWQLObject("PDM_BI_DeviceItemValue"); + for (Long device_id : ids) { + wo.delete("device_id = '" + device_id + "'"); + wo_value.delete("device_id = '" + device_id + "'"); + } + } + + @Override + public void changeActive(JSONObject json) { + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + WQLObject.getWQLObject("em_bi_deviceinfo").update(json); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceitemServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceitemServiceImpl.java new file mode 100644 index 000000000..37487382b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceitemServiceImpl.java @@ -0,0 +1,123 @@ + +package org.nl.wms.pdm.service.impl; + + +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.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.wms.pdm.service.DeviceitemService; +import org.nl.wms.pdm.service.dto.DeviceitemDto; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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-05-25 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class DeviceitemServiceImpl implements DeviceitemService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_deviceitem"); + final String search = MapUtil.getStr(whereJson, "search"); + String where = ""; + if (!StrUtil.isEmpty(search)) { + where = " AND (item_code like '%" + search + "%' OR item_name like '%" + search + "%' ) "; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "1 = 1" + where, "order_seq"); + final JSONObject json = rb.pageResult(); + final JSONArray array = json.getJSONArray("content"); + for (int i = 0; i < array.size(); i++) { + final JSONObject jsonObject = array.getJSONObject(i); + jsonObject.put("is_show","1"); + } + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_deviceitem"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(DeviceitemDto.class); + return null; + } + + @Override + public DeviceitemDto findById(Long item_id) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_deviceitem"); + JSONObject json = wo.query("item_id = '" + item_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DeviceitemDto.class); + } + return null; + } + + @Override + public DeviceitemDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_deviceitem"); + JSONObject json = wo.query("item_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DeviceitemDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(DeviceitemDto dto) { + //编码唯一性校验 + String item_code = dto.getItem_code(); + DeviceitemDto byCode = this.findByCode(item_code); + if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); + dto.setItem_id(IdUtil.getSnowflake(1, 1).nextId()); + WQLObject wo = WQLObject.getWQLObject("pdm_bi_deviceitem"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(DeviceitemDto dto) { + DeviceitemDto entity = this.findById(dto.getItem_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + //编码唯一性校验 + WQLObject wo = WQLObject.getWQLObject("PDM_BI_DeviceItem"); + String where = "item_code = '" + dto.getItem_code() + "' and item_id != '" + dto.getItem_id()+"'"; + + JSONObject jsonObject = wo.query(where).uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + throw new BadRequestException("编码已存在!"); + } + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_deviceitem"); + for (Long item_id : ids) { + wo.delete("item_id = '" + item_id + "'"); + } + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProcessrouteServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProcessrouteServiceImpl.java new file mode 100644 index 000000000..ef93d5479 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/ProcessrouteServiceImpl.java @@ -0,0 +1,250 @@ + +package org.nl.wms.pdm.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.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.common.utils.dto.CurrentUser; +import org.nl.modules.system.service.dto.UserDto; +import org.nl.wms.pdm.service.ProcessrouteService; +import org.nl.wms.pdm.service.dto.ProcessrouteDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Zz + * @description 服务实现 + * @date 2022-03-21 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class ProcessrouteServiceImpl implements ProcessrouteService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String processroute_code = MapUtil.getStr(whereJson, "processroute_code"); + HashMap map = new HashMap<>(); + + map.put("flag", "1"); + map.put("processroute_status", MapUtil.getStr(whereJson, "processroute_status")); + if (StrUtil.isNotEmpty(processroute_code)) map.put("processroute_code", "%" + processroute_code + "%"); + + JSONObject json = WQL.getWO("QP_BI_PROCESSROUTE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_processroute"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(ProcessrouteDto.class); + return list; + } + + @Override + public ProcessrouteDto findById(String processroute_id) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_processroute"); + JSONObject json = wo.query("processroute_id = '" + processroute_id + "'").uniqueResult(0); + final ProcessrouteDto obj = json.toJavaObject(ProcessrouteDto.class); + return obj; + } + + @Override + public ProcessrouteDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_processroute"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + final ProcessrouteDto obj = json.toJavaObject(ProcessrouteDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(JSONObject json) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + Long deptId = SecurityUtils.getDeptId(); + + WQLObject mstTab = WQLObject.getWQLObject("pdm_bi_processroute"); // 工艺路线主表 + WQLObject dtlTab = WQLObject.getWQLObject("PDM_BI_ProcessRouteDtl"); // 工艺路线明细表 + WQLObject workTab = WQLObject.getWQLObject("pdm_bi_workprocedure"); // 工序表 + JSONArray jsonDataArr = json.getJSONArray("tableData"); + + // 插入主表 + JSONObject jsonMst = new JSONObject(); + jsonMst.put("processroute_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonMst.put("processroute_code", json.getString("processroute_code")); + jsonMst.put("processroute_name", json.getString("processroute_name")); + jsonMst.put("processroute_status", "10"); + jsonMst.put("detail_count", jsonDataArr.size()); + jsonMst.put("remark", json.getString("remark")); + jsonMst.put("create_id", currentUserId); + jsonMst.put("create_name", nickName); + jsonMst.put("create_time", now); + jsonMst.put("sysdeptid", deptId); + jsonMst.put("syscompanyid", deptId); + mstTab.insert(jsonMst); + // 插入明细表 + for (int i = 0; i < jsonDataArr.size(); i++) { + JSONObject jsonObject = jsonDataArr.getJSONObject(i); + JSONObject jsonWork = workTab.query("workprocedure_id = '" + jsonObject.getString("workprocedure_id") + "'").uniqueResult(0); + + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("processroutedtl_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonDtl.put("processroute_id", jsonMst.get("processroute_id")); + jsonDtl.put("workprocedure_no", i+1); + jsonDtl.put("workprocedure_id", jsonWork.get("workprocedure_id")); + jsonDtl.put("workprocedure_code", jsonWork.getString("workprocedure_code")); + jsonDtl.put("workprocedure_name", jsonWork.getString("workprocedure_name")); + jsonDtl.put("process_explain", jsonObject.getString("process_explain")); + jsonDtl.put("is_check", jsonObject.getString("is_check")); + dtlTab.insert(jsonDtl); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject whereJson) { + String processroute_id = MapUtil.getStr(whereJson, "processroute_id"); + ProcessrouteDto entity = this.findById(processroute_id); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + + WQLObject mstTab = WQLObject.getWQLObject("pdm_bi_processroute"); // 工艺路线主表 + WQLObject dtlTab = WQLObject.getWQLObject("PDM_BI_ProcessRouteDtl"); // 工艺路线明细表 + WQLObject workTab = WQLObject.getWQLObject("pdm_bi_workprocedure"); // 工序表 + + JSONArray dataArr = whereJson.getJSONArray("tableData"); + // 更新主表 + JSONObject jsonMst = mstTab.query("processroute_id= '" + processroute_id + "'").uniqueResult(0); + jsonMst.put("processroute_code", whereJson.getString("processroute_code")); + jsonMst.put("processroute_name", whereJson.getString("processroute_name")); + jsonMst.put("remark", whereJson.getString("remark")); + jsonMst.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonMst.put("update_optname", SecurityUtils.getCurrentNickName()); + jsonMst.put("update_time", DateUtil.now()); + jsonMst.put("detail_count", dataArr.size()); + mstTab.update(jsonMst); + // 更新明细表 + JSONArray dtlArr = dtlTab.query("processroute_id = '" + processroute_id + "'").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(dtlArr)) dtlTab.delete("processroute_id = '" + processroute_id + "'"); + for (int i = 0; i < dataArr.size(); i++) { + JSONObject jsonObject = dataArr.getJSONObject(i); + JSONObject jsonWork = workTab.query("workprocedure_id = '" + jsonObject.getString("workprocedure_id") + "'").uniqueResult(0); + + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("processroutedtl_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonDtl.put("processroute_id", jsonMst.get("processroute_id")); + jsonDtl.put("workprocedure_no", i+1); + jsonDtl.put("workprocedure_id", jsonObject.get("workprocedure_id")); + jsonDtl.put("workprocedure_code", jsonWork.getString("workprocedure_code")); + jsonDtl.put("workprocedure_name", jsonWork.getString("workprocedure_name")); + jsonDtl.put("process_explain", jsonObject.getString("process_explain")); + jsonDtl.put("is_check", jsonObject.getString("is_check")); + dtlTab.insert(jsonDtl); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_processroute"); + for (Long processroute_id : ids) { + JSONObject param = new JSONObject(); + param.put("processroute_id", String.valueOf(processroute_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONArray getWorkList() { + JSONArray resultJSONArray = WQL.getWO("QP_BI_PROCESSROUTE01").addParam("flag", "2").process().getResultJSONArray(0); + return resultJSONArray; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONArray getDtl(Map map) { + String processroute_id = MapUtil.getStr(map, "processroute_id"); + WQLObject dtlTab = WQLObject.getWQLObject("PDM_BI_ProcessRouteDtl"); + + JSONArray dtlArr = dtlTab.query("processroute_id ='" + processroute_id + "' order by workprocedure_no ASC").getResultJSONArray(0); + return dtlArr; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void submit(JSONObject whereJson) { + JSONArray dataArr = whereJson.getJSONArray("data"); + + WQLObject mstTab = WQLObject.getWQLObject("pdm_bi_processroute"); // 工艺路线主表 + + for (int i = 0; i < dataArr.size(); i++) { + JSONObject json = dataArr.getJSONObject(i); + JSONObject jsonMst = mstTab.query("processroute_id ='" + json.getString("processroute_id") + "' and is_delete = '0'").uniqueResult(0); + if (!StrUtil.equals(jsonMst.getString("processroute_status"), "10")) { + throw new BadRequestException("只能对生成状态的提交"); + } + jsonMst.put("processroute_status", "20"); + jsonMst.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonMst.put("update_optname", SecurityUtils.getCurrentNickName()); + jsonMst.put("update_time", DateUtil.now()); + jsonMst.put("audit_optid", SecurityUtils.getCurrentUserId()); + jsonMst.put("audit_optname", SecurityUtils.getCurrentNickName()); + jsonMst.put("audit_time", DateUtil.now()); + mstTab.update(jsonMst); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void CancelSubmit(JSONObject whereJson) { + JSONArray dataArr = whereJson.getJSONArray("data"); + + WQLObject mstTab = WQLObject.getWQLObject("pdm_bi_processroute"); // 工艺路线主表 + + for (int i = 0; i < dataArr.size(); i++) { + JSONObject json = dataArr.getJSONObject(i); + JSONObject jsonMst = mstTab.query("processroute_id ='" + json.getString("processroute_id") + "' and is_delete = '0'").uniqueResult(0); + if (!StrUtil.equals(jsonMst.getString("processroute_status"), "20")) { + throw new BadRequestException("只能对提交状态的取消提交"); + } + jsonMst.put("processroute_status", "10"); + jsonMst.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonMst.put("update_optname", SecurityUtils.getCurrentNickName()); + jsonMst.put("update_time", DateUtil.now()); + jsonMst.put("audit_optid", ""); + jsonMst.put("audit_optname", ""); + jsonMst.put("audit_time", ""); + mstTab.update(jsonMst); + } + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkProcedureServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkProcedureServiceImpl.java new file mode 100644 index 000000000..76c0537e1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkProcedureServiceImpl.java @@ -0,0 +1,157 @@ + +package org.nl.wms.pdm.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.modules.common.utils.SecurityUtils; +import org.nl.modules.common.utils.dto.CurrentUser; +import org.nl.modules.system.service.dto.UserDto; +import org.nl.wms.pdm.service.WorkProcedureService; +import org.nl.wms.pdm.service.dto.WorkProcedureDto; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +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 ldjun + * @description 服务实现 + * @date 2021-12-19 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class WorkProcedureServiceImpl implements WorkProcedureService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String where = ""; + WQLObject wo = WQLObject.getWQLObject("PDM_BI_WorkProcedure"); + String search = (String) whereJson.get("search"); + if (!StrUtil.isEmpty(search)) { + where = " AND (workprocedure_code like '%" + search + "%' OR workprocedure_name like '%" + search + "%' ) "; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete= '0' " + where, "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(WorkProcedureDto.class); + return list; + } + + @Override + public WorkProcedureDto findById(Long workProcedure_id) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); + JSONObject json = wo.query("workProcedure_id =" + workProcedure_id + "").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final WorkProcedureDto obj = json.toJavaObject(WorkProcedureDto.class); + return obj; + } + + @Override + public WorkProcedureDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); + JSONObject json = wo.query("workprocedure_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) return null; + final WorkProcedureDto obj = json.toJavaObject(WorkProcedureDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(WorkProcedureDto dto) { + //判断编码是否存在 + String workprocedure_code = dto.getWorkprocedure_code(); + WorkProcedureDto byCode = this.findByCode(workprocedure_code); + if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + Long deptId = SecurityUtils.getDeptId(); + + dto.setWorkprocedure_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setSyscompanyid(deptId); + dto.setSysdeptid(deptId); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(WorkProcedureDto dto) { + WorkProcedureDto entity = this.findById(dto.getWorkprocedure_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String workprocedure_code = entity.getWorkprocedure_code(); + WorkProcedureDto byCode = this.findByCode(workprocedure_code); + if (ObjectUtil.isNotEmpty(byCode) && !dto.getWorkprocedure_id().equals(byCode.getWorkprocedure_id())) + throw new BadRequestException("存在相同的编码!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); + for (Long workProcedure_id : ids) { + JSONObject param = new JSONObject(); + param.put("workprocedure_id", String.valueOf(workProcedure_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.delete(param); + } + } + + @Override + public JSONArray downSelect() { + //工序表【PDM_BI_WorkProcedure】 + WQLObject workProcedureTab = WQLObject.getWQLObject("PDM_BI_WorkProcedure"); + JSONArray resultJSONArray = workProcedureTab.query("is_delete = '0' and is_used ='1'", "workprocedure_code").getResultJSONArray(0); + return resultJSONArray; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql new file mode 100644 index 000000000..7f4e565b7 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql @@ -0,0 +1,58 @@ +[交易说明] + 交易名: 设备查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + device.* + FROM + em_bi_deviceinfo device + WHERE + device.is_delete = '0' + + OPTION 输入.search <> "" + (device.device_code like 输入.search or + device.device_name like 输入.search) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/wql/QPDM_FACTORYCALENDAR.wql b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/QPDM_FACTORYCALENDAR.wql new file mode 100644 index 000000000..ce2058b7e --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/QPDM_FACTORYCALENDAR.wql @@ -0,0 +1,64 @@ +[交易说明] + 交易名: 工厂日历分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.processroute_code TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + dar.*, + ( + case when dar.is_active = '0' then '否' + when dar.is_active = '1' then '是' end) AS active_name + FROM + pdm_bi_factorycalendar dar + WHERE + 1=1 + OPTION 输入.search <> "" + (dar.factorycalendar_code like 输入.search or + dar.factorycalendar_name like 输入.search) + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/wql/QP_BI_PROCESSROUTE01.wql b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/QP_BI_PROCESSROUTE01.wql new file mode 100644 index 000000000..4f28a9533 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/QP_BI_PROCESSROUTE01.wql @@ -0,0 +1,82 @@ +[交易说明] + 交易名: 工艺路线分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.processroute_status TYPEAS s_string + 输入.processroute_code TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + PDM_BI_ProcessRoute + WHERE + is_delete = '0' + + OPTION 输入.processroute_code <> "" + (processroute_code like 输入.processroute_code or + processroute_name like 输入.processroute_code) + ENDOPTION + + OPTION 输入.processroute_status <> "" + processroute_status = 输入.processroute_status + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + workprocedure_id AS value, + workprocedure_name AS label, + workprocedure_code AS code + FROM + PDM_BI_WorkProcedure + WHERE + is_delete = '0' + AND is_used = '1' + + ENDSELECT + ENDQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/wql/em.xls b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/em.xls new file mode 100644 index 000000000..cece5ded9 Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/em.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls new file mode 100644 index 000000000..b02460d3b Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java b/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java new file mode 100644 index 000000000..9ed8523af --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java @@ -0,0 +1,52 @@ + +package org.nl.wms.sch; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.system.service.impl.ParamServiceImpl; +import org.nl.modules.wql.util.SpringContextHolder; +import org.springframework.http.HttpStatus; + +/** + * ACS连接工具类: + */ +public class AcsUtil { + public static JSONObject notifyAcs(String api, JSONArray list) { + //判断是否连接ACS系统 + String isConnect = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("IS_CONNECT_ACS").getValue(); + JSONObject result = new JSONObject(); + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接ACS!"); + result.put("data", new JSONObject()); + return result; + } + + //ACS地址:127.0.0.1:8010 + String acsUrl = SpringContextHolder.getBean(ParamServiceImpl.class).findByCode("ACS_URL").getValue(); + + String url = acsUrl + api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(list)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + + } catch (Exception e) { + String msg = e.getMessage(); + //ConnectException: Connection refused: connect + //网络不通 + System.out.println(msg); + result.put("status", HttpStatus.BAD_REQUEST); + result.put("message", "网络不通,操作失败!"); + result.put("data", new JSONObject()); + } + //acs抛异常这里 + /*if (result.getString("status").equals(String.valueOf(HttpStatus.BAD_REQUEST.value()))) + throw new BadRequestException(result.getString("message"));*/ + + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java new file mode 100644 index 000000000..2a94a7d44 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -0,0 +1,157 @@ +package org.nl.wms.sch.manage; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.AcsUtil; +import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.modules.wql.core.bean.WQLObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Title: AbstractAcsTask.java Description:任务抽象类 + *

+ * Task状态:01生成 ,02:确定起点,03、确定终点,04、起点和终点都确认,05:下发,可以下发, 06、执行中 07、完成 + * 完成方式:01自动,02:wcs删除,03、wms删除,04、发给wcs失败自动删除 + * + * @author ldjun + * @created 2020年6月12日 下午5:53:28 + */ +public abstract class AbstractAcsTask { + + + /** + * @discription 在如果任务无法形成会一直定时刷新判断 + * @author ldjun + * @created 2020年6月12日 下午5:55:25 + */ + public List schedule() { + this.autoCreate(); + this.findStartPoint(); + this.findNextPoint(); + return addTask(); + } + + /** + * 添加任务进行下发 + * + * @return + */ + public List addTask() { + //任务基础表【sch_base_task】 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = taskTab.query("handle_class = '" + this.getClass().getName() + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + List arr = new ArrayList<>(); + for (int i = 0, j = tasks.size(); i < j; i++) { + JSONObject json = tasks.getJSONObject(i); + AcsTaskDto taskDto = new AcsTaskDto(); + taskDto.setTask_id(json.getString("task_id")); + taskDto.setTask_code(json.getString("task_code")); + taskDto.setTask_type("1"); + taskDto.setRoute_plan_code("normal"); + taskDto.setStart_device_code(json.getString("start_point_code")); + taskDto.setNext_device_code(json.getString("next_point_code")); + taskDto.setVehicle_code(json.getString("vehicle_code")); + arr.add(taskDto); + } + return arr; + } + + /** + * @param taskObj 代表一条任务对象 + * @param status 代表wcs任务完成状态: //1:执行中,2:完成 ,3:acs取消 + * @return + * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 + * @author ldjun + * @created 2019年4月17日 下午8:51:50 + */ + public abstract void updateTaskStatus(JSONObject taskObj, String status); + + /** + * @returninvoke + * @discription 确定任务起点 + * @author ldjun + * @created 2020年6月12日 下午6:01:30 + */ + + public abstract void findStartPoint(); + + /** + * @return + * @discription 确定下一点位 + * @author ldjun + * @created 2020年6月12日 下午6:01:06 + */ + public abstract void findNextPoint(); + + /** + * @param form 创建任务需要的参数 + * @return 返回任务标识 + */ + public abstract String createTask(JSONObject form); + + /** + * 自动生成任务 + */ + public void autoCreate() { + + } + + + /** + * @return WCS的任务集合 + * @discription 重新下发给wcs任务 + * @author ldjun + * @created 2020年6月12日 下午5:52:28 + */ + public JSONObject renotifyAcs(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + JSONArray jsonArray = new JSONArray(); + JSONArray arr = taskTab.query("task_id = '" + task_id + "'").getResultJSONArray(0); + for (int i = 0, j = arr.size(); i < j; i++) { + JSONObject json = arr.getJSONObject(i); + AcsTaskDto taskDto = new AcsTaskDto(); + taskDto.setTask_id(json.getString("task_id")); + taskDto.setTask_code(json.getString("task_code")); + taskDto.setStart_device_code(json.getString("start_point_code")); + taskDto.setNext_device_code(json.getString("next_point_code")); + taskDto.setPriority("1"); + taskDto.setVehicle_code(json.getString("vehicle_code")); + taskDto.setTask_type("1"); + taskDto.setRoute_plan_code("normal"); + + jsonArray.add(JSONObject.parse(JSON.toJSONString(taskDto))); + + } + return AcsUtil.notifyAcs("api/wms/task", jsonArray); + } + + /** + * @param task_id 任务标识 + * @return + * @discription 强制结束完成任务 + * @author ldjun + * @created 2020年6月19日 上午10:34:58 + */ + public abstract void forceFinish(String task_id); + + /** + * @param task_id + * @return + * @discription 任务搬回原起点。 + * @author ldjun + * @created 2020年6月22日 下午8:40:58 + */ + public abstract void pullBack(String task_id); + + /** + * 取消任务 + * + * @param task_id + */ + public abstract void cancel(String task_id); + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/manage/FinishTypeEnum.java b/nladmin-system/src/main/java/org/nl/wms/sch/manage/FinishTypeEnum.java new file mode 100644 index 000000000..a64986ffc --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/manage/FinishTypeEnum.java @@ -0,0 +1,25 @@ +package org.nl.wms.sch.manage; + +/** + * 完成方式:00自动,01:手动 + */ +public enum FinishTypeEnum { + AUTO("00", "自动"), + WCS_DELETE("01", "手动"); + private String name; + private String code; + + private FinishTypeEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public String getName() { + return name; + } + + public String getCode() { + return code; + } +} + diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java b/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java new file mode 100644 index 000000000..a432fa1b4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java @@ -0,0 +1,31 @@ +package org.nl.wms.sch.manage; + +/** + * Task状态:00生成 ,01:下发,02、执行中,03、完成 + */ +public enum TaskStatusEnum { + CREATED("01", "生成"), + SURE_START("02", "确定起点"), + SURE_END("03", "确定终点"), + START_AND_POINT("04", "起点终点确认"), + ISSUE("05", "下发"), + EXECUTING("06", "执行中"), + FINISHED("07", "完成"); + + private String name; + private String code; + + private TaskStatusEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public String getName() { + return name; + } + + public String getCode() { + return code; + } +} + diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java b/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java new file mode 100644 index 000000000..e65458932 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java @@ -0,0 +1,106 @@ + +package org.nl.wms.sch.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author ldjun + * @date 2021-08-19 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "点位管理") +@RequestMapping("/api/point") +@Slf4j +public class PointController { + + private final PointService pointService; + + @GetMapping + @Log("查询点位") + @ApiOperation("查询点位") + //@PreAuthorize("@el.check('point:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(pointService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增点位") + @ApiOperation("新增点位") + //@PreAuthorize("@el.check('point:add')") + public ResponseEntity create(@Validated @RequestBody PointDto dto) { + pointService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改点位") + @ApiOperation("修改点位") + //@PreAuthorize("@el.check('point:edit')") + public ResponseEntity update(@Validated @RequestBody PointDto dto) { + pointService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除点位") + @ApiOperation("删除点位") + //@PreAuthorize("@el.check('point:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + pointService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + //@PreAuthorize("@el.check('store:edit')") + public ResponseEntity update(@RequestBody JSONObject json) { + pointService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getPoint") + @Log("查询点位下拉框") + @ApiOperation("查询点位下拉框") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity queryPoint(@RequestBody Map whereJson) { + return new ResponseEntity<>(pointService.getPoint(whereJson), HttpStatus.OK); + } + + @PutMapping("/syncStruct") + @Log("仓位同步") + @ApiOperation("仓位同步") + //@PreAuthorize("@el.check('store:edit')") + public ResponseEntity syncStruct() { + pointService.syncStruct(); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @GetMapping("/selectPoint") + @Log("查询点位管理") + @ApiOperation("查询点位管理") + //@PreAuthorize("@el.check('Point:list')") + public ResponseEntity selectPoint(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(pointService.selectPoint(whereJson,page),HttpStatus.OK); + } + @GetMapping("/getRegion") + @Log("获取区域") + @ApiOperation("获取区域") + public ResponseEntity getRegion(){ + return new ResponseEntity<>(pointService.getRegion(),HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java b/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java new file mode 100644 index 000000000..4a4d9aee6 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java @@ -0,0 +1,79 @@ + +package org.nl.wms.sch.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.sch.service.RegionService; +import org.nl.wms.sch.service.dto.RegionDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Liuxy + * @date 2022-08-11 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "区域管理管理") +@RequestMapping("/api/region") +@Slf4j +public class RegionController { + + private final RegionService regionService; + + @GetMapping + @Log("查询区域管理") + @ApiOperation("查询区域管理") + //@PreAuthorize("@el.check('region:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(regionService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增区域管理") + @ApiOperation("新增区域管理") + //@PreAuthorize("@el.check('region:add')") + public ResponseEntity create(@Validated @RequestBody RegionDto dto) { + regionService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域管理") + @ApiOperation("修改区域管理") + //@PreAuthorize("@el.check('region:edit')") + public ResponseEntity update(@Validated @RequestBody RegionDto dto) { + regionService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域管理") + @ApiOperation("删除区域管理") + //@PreAuthorize("@el.check('region:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + regionService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + //@PreAuthorize("@el.check('store:edit')") + public ResponseEntity update(@RequestBody JSONObject json) { + regionService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java b/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java new file mode 100644 index 000000000..65dfe7ccd --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java @@ -0,0 +1,131 @@ + +package org.nl.wms.sch.rest; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.sch.manage.FinishTypeEnum; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.TaskService; +import org.nl.wms.sch.service.dto.TaskDto; +import org.nl.wms.sch.tasks.TaskTypeEnum; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author ldjun + * @date 2021-08-19 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "任务管理") +@RequestMapping("/api/task") +@Slf4j +public class TaskController { + + private final TaskService taskService; + + @GetMapping + @Log("查询任务") + @ApiOperation("查询任务") + //@PreAuthorize("@el.check('task:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增任务") + @ApiOperation("新增任务") + //@PreAuthorize("@el.check('task:add')") + public ResponseEntity create(@Validated @RequestBody TaskDto dto) { + taskService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改任务") + @ApiOperation("修改任务") + //@PreAuthorize("@el.check('task:edit')") + public ResponseEntity update(@Validated @RequestBody TaskDto dto) { + taskService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除任务") + @ApiOperation("删除任务") + //@PreAuthorize("@el.check('task:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + taskService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/taskStatus") + @Log("获取任务状态列表") + @ApiOperation("获取任务状态列表") + public ResponseEntity getTaskStatus() { + TaskStatusEnum[] values = TaskStatusEnum.values(); + JSONArray arr = new JSONArray(); + for (TaskStatusEnum value : values) { + JSONObject json = new JSONObject(); + json.put("code", value.getCode()); + json.put("name", value.getName()); + arr.add(json); + } + //增加未完成状态 + JSONObject unFinish = new JSONObject(); + unFinish.put("code", "-1"); + unFinish.put("name", "未完成"); + arr.add(unFinish); + return new ResponseEntity<>(arr, HttpStatus.OK); + } + + @GetMapping("/taskType") + @Log("获取任务类型列表") + @ApiOperation("获取任务类型列表") + public ResponseEntity getTaskType() { + TaskTypeEnum[] values = TaskTypeEnum.values(); + JSONArray arr = new JSONArray(); + for (TaskTypeEnum value : values) { + JSONObject json = new JSONObject(); + json.put("code", value.getCode()); + json.put("name", value.getName()); + arr.add(json); + } + return new ResponseEntity<>(arr, HttpStatus.OK); + } + + @GetMapping("/finishType") + @Log("获取任务类型列表") + @ApiOperation("获取任务类型列表") + public ResponseEntity getFinishType() { + FinishTypeEnum[] values = FinishTypeEnum.values(); + JSONArray arr = new JSONArray(); + for (FinishTypeEnum value : values) { + JSONObject json = new JSONObject(); + json.put("code", value.getCode()); + json.put("name", value.getName()); + arr.add(json); + } + return new ResponseEntity<>(arr, HttpStatus.OK); + } + + @PutMapping("/operation") + @Log("任务操作") + @ApiOperation("任务操作") + //@PreAuthorize("@el.check('task:edit')") + public ResponseEntity update(@RequestBody Map map) { + taskService.operation(map); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java new file mode 100644 index 000000000..eb9280f74 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java @@ -0,0 +1,88 @@ + +package org.nl.wms.sch.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.service.dto.PointDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @description 服务接口 + * @author ldjun + * @date 2021-12-07 + **/ +public interface PointService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param point_id ID + * @return Point + */ + PointDto findById(Long point_id); + + /** + * 根据编码查询 + * @param code code + * @return Point + */ + PointDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(PointDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(PointDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 编辑 + * + * @param json / + */ + void changeActive(JSONObject json); + + JSONArray getPoint(Map wherJson); + + void syncStruct(); + /** + * + * 获取点位 + */ + Map selectPoint(Map whereJson, Pageable page); + + /** + * + * 获取区域 + */ + JSONArray getRegion(); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java new file mode 100644 index 000000000..3c9de3014 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java @@ -0,0 +1,74 @@ + +package org.nl.wms.sch.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.service.dto.RegionDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-11 + **/ +public interface RegionService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param region_id ID + * @return Region + */ + RegionDto findById(Long region_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Region + */ + RegionDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(RegionDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(RegionDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + void changeActive(JSONObject json); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java new file mode 100644 index 000000000..941189529 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/TaskService.java @@ -0,0 +1,87 @@ + +package org.nl.wms.sch.service; + +import org.nl.wms.sch.service.dto.TaskDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务接口 + * @date 2021-08-19 + **/ +public interface TaskService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param task_id + * @return Task + */ + TaskDto findById(String task_id); + + /** + * 根据ID查询 + * + * @param taskdtl_id ID + * @return Task + */ + TaskDto findByDtlId(String taskdtl_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Task + */ + TaskDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(TaskDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(TaskDto dto); + + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(String[] ids); + + /** + * 任务操作 + * + * @param param + */ + void operation(Map param); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java new file mode 100644 index 000000000..70e14417f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java @@ -0,0 +1,136 @@ +package org.nl.wms.sch.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author ldjun + * @description / + * @date 2021-12-07 + **/ +@Data +public class PointDto implements Serializable { + + /** 点位标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long point_id; + + /** + * 点位编码 + */ + private String point_code; + + /** + * 点位名称 + */ + private String point_name; + + /** + * 所属区域 + */ + private Long region_id; + + /** + * 点位类型 + */ + private String point_type; + + /** + * 点位状态 + */ + private String point_status; + + /** + * 锁定类型 + */ + private String lock_type; + + /** + * 载具编码 + */ + private String vehicle_code; + + /** + * 载具数量 + */ + private Integer vehicle_qty; + + /** + * 载具类型 + */ + private String vehicle_type; + + /** + * 是否专机 + */ + private String is_host; + + /** + * 来源标识 + */ + private Long source_id; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 设备点位类型 + */ + private String device_point_type; + /** + * 生产区域 + */ + private String product_area; + /** + * 点位位置 + */ + private String point_location; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/RegionDto.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/RegionDto.java new file mode 100644 index 000000000..29aefe781 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/RegionDto.java @@ -0,0 +1,77 @@ +package org.nl.wms.sch.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Liuxy + * @description / + * @date 2022-08-11 + **/ +@Data +public class RegionDto implements Serializable { + + /** 区域标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long region_id; + + /** + * 区域编码 + */ + private String region_code; + + /** + * 区域名称 + */ + private String region_name; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + /** + * 生产区域 + */ + private String product_area; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java new file mode 100644 index 000000000..de4d68b62 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java @@ -0,0 +1,80 @@ +package org.nl.wms.sch.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** + * @description / + * @author ldjun + * @date 2021-12-23 + **/ +@Data +public class TaskDto implements Serializable { + /** 任务编码 */ + private String task_code; + + /** 任务类型 */ + private String task_type; + + /** 任务明细类型 */ + private String taskdtl_type; + + /** 指令状态 */ + private String task_status; + + /** 起始点位 */ + private String start_point_code; + + /** 下一点位 */ + private String next_point_code; + + /** 载具编码 */ + private String vehicle_code; + + /** 处理类 */ + private String handle_class; + + /** 任务完成类型 */ + private String finished_type; + + /** 备注 */ + private String remark; + + /** 是否删除 */ + private String is_delete; + + /** 创建时间 */ + private String create_time; + + /** 修改时间 */ + private String update_time; + + /** 任务明细标识 */ + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + private Long taskdtl_id; + + /** 任务标识 */ + private Long task_id; + + /** 物料编码 */ + private String material_code; + + /** 车号 */ + private String car_no; + + /** 创建人 */ + private Long create_id; + + /** 创建人姓名 */ + private String create_name; + + /** 修改人 */ + private Long update_optid; + + /** 修改人姓名 */ + private String update_optname; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java new file mode 100644 index 000000000..b274de8f9 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskQueryDto.java @@ -0,0 +1,95 @@ +package org.nl.wms.sch.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author ldjun + * @description / + * @date 2021-12-23 + **/ +@Data +public class TaskQueryDto implements Serializable { + /** + * 任务编码 + */ + private String task_code; + + /** + * 任务类型 + */ + private String task_type; + + /** + * 任务明细类型 + */ + private String taskdtl_type; + + /** + * 指令状态 + */ + private String[] task_status; + + /** + * 起始点位 + */ + private String start_point_code; + + /** + * 下一点位 + */ + private String next_point_code; + + /** + * 载具编码 + */ + private String vehicle_code; + + /** + * 任务完成类型 + */ + private String finished_type; + + /** + * 备注 + */ + private String remark; + + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改时间 + */ + private String update_time; + + /** 任务明细标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long taskdtl_id; + + /** + * 任务标识 + */ + private Long task_id; + + /** + * 物料编码 + */ + private String material_code; + + /** + * 车号 + */ + private String car_no; + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java new file mode 100644 index 000000000..47a819c52 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -0,0 +1,269 @@ +package org.nl.wms.sch.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务实现 + * @date 2021-08-19 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class PointServiceImpl implements PointService { + @Override + public Map queryAll(Map whereJson, Pageable page) { + HashMap map = new HashMap(); + map.put("flag", "1"); + map.put("region_id", whereJson.get("region_id")); + map.put("ids", whereJson.get("ids")); + map.put("lock_type", whereJson.get("lock_type")); + map.put("point_status", whereJson.get("point_status")); + map.put("is_used", whereJson.get("is_used")); + map.put("point_type", whereJson.get("point_type")); + map.put("name", whereJson.get("name")); + JSONObject json = WQL.getWO("QSCH_BASE_POINT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "point_code asc"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(PointDto.class); + return list; + } + + @Override + public PointDto findById(Long point_id) { + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + JSONObject json = wo.query("point_id =" + point_id + "").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(PointDto.class); + } + final PointDto obj = json.toJavaObject(PointDto.class); + return obj; + } + + + @Override + public PointDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + JSONObject json = wo.query("point_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(PointDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(PointDto dto) { + String point_code = dto.getPoint_code(); + PointDto byCode = this.findByCode(point_code); + if (ObjectUtil.isNotEmpty(byCode)) { + throw new BadRequestException("存在相同的点位编码"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setPoint_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + Long region_id = dto.getRegion_id(); + JSONObject region_jo = WQLObject.getWQLObject("sch_base_region").query("region_id = '"+region_id+"'").uniqueResult(0); + dto.setProduct_area(region_jo.getString("product_area")); + + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(PointDto dto) { + PointDto entity = this.findById(dto.getPoint_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + for (Long point_id : ids) { + JSONObject param = new JSONObject(); + param.put("point_id", String.valueOf(point_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(JSONObject json) { + + //如果是仓位点位,更新状态前,先去查询仓位点位所对应的库区是否启用,如果禁用抛出异常 + String struct_id = json.getString("point_id"); + String point_type = json.getString("point_type"); + if (point_type.equals("01")) { + JSONObject st_ivt_bsRealStorAttr = WQLObject.getWQLObject("ST_IVT_StructAttr").query(" struct_id = '" + struct_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(st_ivt_bsRealStorAttr)) { + String sect_id = st_ivt_bsRealStorAttr.getString("sect_id"); + JSONObject st_ivt_sectAttr = WQLObject.getWQLObject("ST_IVT_SectAttr").query(" sect_id = '" + sect_id + "' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(st_ivt_sectAttr)) { + throw new BadRequestException("启用失败,请检查仓位点位所属库区是否启用!"); + } + } + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("sch_base_point").update(json); + + //如果启用,则同步更新仓位的状态 + json = new JSONObject(); + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + json.put("struct_id", struct_id); + WQLObject.getWQLObject("ST_IVT_StructAttr").update(json, " struct_id = '" + struct_id + "'"); + } + + @Override + public JSONArray getPoint(Map wherJson) { + String area_type = (String) wherJson.get("area_type"); + JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("area_type IN (" + area_type + ") AND is_used = '1' AND is_delete = '0' order by point_code").getResultJSONArray(0); + return point_rows; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void syncStruct() { + WQLObject.getWQLObject("sch_base_point").delete(" point_type = '01'"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONObject map = new JSONObject(); + map.put("flag", "2"); + JSONArray arrStruct = WQL.getWO("QSCH_BASE_POINT").addParamMap(map).process().getResultJSONArray(0); + WQLObject wo = WQLObject.getWQLObject("sch_base_point"); + for (int i = 0; i < arrStruct.size(); i++) { + JSONObject json = arrStruct.getJSONObject(i); + JSONObject structMap = new JSONObject(); + structMap.put("point_id", json.getString("struct_id")); + structMap.put("point_code", json.getString("struct_code")); + structMap.put("point_name", json.getString("struct_name")); + structMap.put("region_id", json.getString("region_id")); + structMap.put("source_id", json.getString("struct_id")); + structMap.put("point_type", "01"); + structMap.put("is_host", "0"); + structMap.put("is_used", json.getString("is_used")); + structMap.put("create_id", currentUserId); + structMap.put("create_name", nickName); + structMap.put("create_time", now); + structMap.put("update_optid", currentUserId); + structMap.put("update_optname", nickName); + structMap.put("update_time", now); + wo.insert(structMap); + } + } + + @Override + public Map selectPoint(Map whereJson, Pageable page) { + String search = MapUtil.getStr(whereJson, "search"); + String region_id = MapUtil.getStr(whereJson, "region_id"); + + JSONObject map = new JSONObject(); + + map.put("flag", "3"); + map.put("region_id", region_id); + if (ObjectUtil.isNotEmpty(search)) { + map.put("search", "%" + search + "%"); + } + JSONObject json = WQL.getWO("SCH_Point_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "point.point_code"); + return json; + } + + @Override + public JSONArray getRegion() { + JSONArray resultJSONArray = WQLObject.getWQLObject("SCH_BASE_Region").query("is_used = '1'").getResultJSONArray(0); + return resultJSONArray; + } + + //根据重量返回最大的 级数 + public String getLoadSeriesByqty(Double qty) { + JSONArray dictArr = WQLObject.getWQLObject("sys_dict_detail").query("dict_id ='108'", "label").getResultJSONArray(0); + String load_series = "4"; + for (int i = 0; i < dictArr.size(); i++) { + JSONObject dictObj = dictArr.getJSONObject(i); + double flag = dictObj.getDouble("label"); + if (flag >= qty) { + load_series = dictObj.getString("value"); + break; + } + } + return load_series; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java new file mode 100644 index 000000000..8f96f5103 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java @@ -0,0 +1,150 @@ + +package org.nl.wms.sch.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.sch.service.RegionService; +import org.nl.wms.sch.service.dto.RegionDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2022-08-11 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RegionServiceImpl implements RegionService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String region_code = MapUtil.getStr(whereJson, "region_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + if (ObjectUtil.isNotEmpty(region_code)) map.put("region_code",region_code+"%"); + + JSONObject json = WQL.getWO("QSCH_REGION_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "region.region_code ASC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionDto.class); + return null; + } + + @Override + public RegionDto findById(Long region_id) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = wo.query("region_id = '" + region_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(RegionDto.class); + } + return null; + } + + @Override + public RegionDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(RegionDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionDto dto) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONObject jsonDto = wo.query("region_code = '" + dto.getRegion_code() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDto)) throw new BadRequestException("编码已存在"); + + dto.setRegion_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionDto dto) { + RegionDto entity = this.findById(dto.getRegion_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + for (Long region_id : ids) { + wo.delete("region_id ='"+region_id+"'"); + } + } + + @Override + public void changeActive(JSONObject json) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("sch_base_region").update(json); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java new file mode 100644 index 000000000..a10dc861f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -0,0 +1,220 @@ + +package org.nl.wms.sch.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.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.modules.common.utils.SecurityUtils; +import org.nl.wms.sch.service.TaskService; +import org.nl.wms.sch.service.dto.TaskDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务实现 + * @date 2021-08-19 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class TaskServiceImpl implements TaskService { + + @Override + public Map queryAll(Map form, Pageable page) { + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + + JSONObject whereJson = JSONObject.parseObject(JSON.toJSONString(form)); + + String task_status = whereJson.getString("task_status"); + if (StrUtil.isNotEmpty(task_status)) { + task_status = task_status.replace("[\"", "").replace("\"]", "").replace("\"", ""); + } + map.put("task_status", task_status); + //处理状态为未完成 + if (StrUtil.isNotEmpty(task_status) && task_status.contains("-1")) { + map.put("unFinish", "-1"); + map.put("task_status", task_status.replace("-1", "")); + } + if (StrUtil.isNotEmpty(whereJson.getString("task_code"))) { + map.put("task_code", "%" + whereJson.getString("task_code") + "%"); + } + if (StrUtil.isNotEmpty(whereJson.getString("start_point_code"))) { + map.put("start_point_code", "%" + whereJson.getString("start_point_code") + "%"); + } + if (StrUtil.isNotEmpty(whereJson.getString("next_point_code"))) { + map.put("next_point_code", "%" + whereJson.getString("next_point_code") + "%"); + } + if (StrUtil.isNotEmpty(whereJson.getString("vehicle_code"))) { + map.put("vehicle_code", "%" + whereJson.getString("vehicle_code") + "%"); + } + if (StrUtil.isNotEmpty(whereJson.getString("task_type"))) { + map.put("task_type", whereJson.getString("task_type")); + } + if (StrUtil.isNotEmpty(whereJson.getString("taskdtl_type"))) { + map.put("taskdtl_type", whereJson.getString("taskdtl_type")); + } + if (StrUtil.isNotEmpty(whereJson.getString("finishTypeList"))) { + map.put("finishTypeList", whereJson.getString("finishTypeList")); + } + if (StrUtil.isNotEmpty(whereJson.getString("begin_time"))) { + map.put("begin_time", whereJson.getString("begin_time")); + } + if (StrUtil.isNotEmpty(whereJson.getString("end_time"))) { + map.put("end_time", whereJson.getString("end_time")); + } + JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "task.update_time desc"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(TaskDto.class); + return list; + } + + @Override + public TaskDto findById(String task_id) { + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + JSONObject json = wo.query("task_id = '" + task_id + "'").uniqueResult(0); + final TaskDto obj = json.toJavaObject(TaskDto.class); + return obj; + } + + @Override + public TaskDto findByDtlId(String taskdtl_id) { + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + JSONObject json = wo.query("task_id = '" + taskdtl_id + "'").uniqueResult(0); + final TaskDto obj = json.toJavaObject(TaskDto.class); + return obj; + } + + @Override + public TaskDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + JSONObject json = wo.query("task_code ='" + code + "'").uniqueResult(0); + final TaskDto obj = json.toJavaObject(TaskDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(TaskDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + + dto.setTaskdtl_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setTask_id(dto.getTaskdtl_id()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(TaskDto dto) { + TaskDto entity = this.findById(dto.getTask_id() + ""); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + for (String taskdtl_id : ids) { + wo.delete("taskdtl_id = '" + taskdtl_id + "'"); + } + } + + @Override + public void operation(Map map) { + String task_id = MapUtil.getStr(map, "task_id"); + String method_name = MapUtil.getStr(map, "method_name"); + TaskDto dto = this.findByDtlId(task_id); + // 任务处理类 + String processing_class = dto.getHandle_class(); + String message = ""; + // 根据任务类型获取对应的任务操作类 + try { + Class clz = Class.forName(processing_class); + Object obj = clz.newInstance(); + // 调用每个任务类的method_name()强制结束方法 + Method m = obj.getClass().getMethod(method_name, String.class); + JSONObject result = (JSONObject) m.invoke(obj, task_id); + if (ObjectUtil.isEmpty(result)) return; + JSONArray arr = result.getJSONArray("errArr"); + WQLObject wo = WQLObject.getWQLObject("sch_base_task"); + if (ObjectUtil.isNotEmpty(arr)) { + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + JSONObject param = new JSONObject(); + param.put("taskdtl_id", json.getString("taskdtl_id")); + param.put("remark", json.getString("message")); + wo.update(param); + } + throw new BadRequestException("任务操作失败!"); + } else { + JSONObject param = new JSONObject(); + param.put("task_id", task_id); + param.put("remark", "操作成功"); + wo.update(param); + } + } catch (InvocationTargetException e) { + if (ObjectUtil.isNull(e.getTargetException().getMessage())) { + message = e.getTargetException().toString(); + } else { + message = e.getTargetException().getMessage(); + } + throw new BadRequestException(message); + } catch (Exception e) { + e.printStackTrace(); + throw new BadRequestException("任务操作失败!"); + } + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql new file mode 100644 index 000000000..221d83b48 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql @@ -0,0 +1,132 @@ +[交易说明] + 交易名: 基础点位分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_id TYPEAS s_string + 输入.lock_type TYPEAS s_string + 输入.name TYPEAS s_string + 输入.point_type TYPEAS s_string + 输入.point_status TYPEAS s_string + 输入.is_used TYPEAS s_string + 输入.ids TYPEAS f_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + point.point_id, + point.point_code, + point.point_name, + point.region_id, + region.region_name, + point.point_type, + point.point_status, + point.lock_type, + d1.label as point_type_name, + d4.label as point_status_name, + d3.label as lock_type_name, + point.vehicle_code, + point.source_id, + point.remark, + point.taskdtl_type, + point.taskdtl_id, + point.task_code, + point.inv_type, + point.inv_id, + point.inv_code, + point.is_used, + point.is_delete, + point.vehicle_qty, + point.create_name, + point.create_time, + point.update_optname, + point.update_time, + point.vehicle_type, + point.is_host, + point.device_point_type + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + LEFT JOIN sys_dict_detail d1 ON point.point_type = d1.value and d1.name='sch_point_type' + LEFT JOIN sys_dict_detail d3 ON point.lock_type = d3.value and d3.name='d_lock_type' + LEFT JOIN sys_dict_detail d4 ON point.point_status = d4.value and d4.name='sch_point_status' + WHERE + point.is_delete = '0' + OPTION 输入.region_id <> "" + point.region_id = 输入.region_id + ENDOPTION + OPTION 输入.ids <> "" + point.area_type in (输入.ids) + ENDOPTION + OPTION 输入.point_type <> "" + point.point_type = 输入.point_type + ENDOPTION + OPTION 输入.lock_type <> "" + point.lock_type = 输入.lock_type + ENDOPTION + OPTION 输入.point_status <> "" + point.point_status = 输入.point_status + ENDOPTION + OPTION 输入.lock_type = "00" + (point.vehicle_code is null or point.vehicle_code = '') + ENDOPTION + OPTION 输入.is_used <> "" + point.is_used = 输入.is_used + ENDOPTION + OPTION 输入.name <> "" + ( point.point_code like "%" 输入.name "%" or point.point_name like "%" 输入.name "%" ) + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + struct.*,region.region_id + FROM + ST_IVT_StructAttr struct + left join + SCH_BASE_Region region on struct.region_id = region.region_id + WHERE + struct.is_delete = '0' + ENDSELECT + ENDQUERY + ENDIF + + + diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql new file mode 100644 index 000000000..9bb640f32 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql @@ -0,0 +1,57 @@ +[交易说明] + 交易名: 区域分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + region.* + FROM + SCH_BASE_Region region + WHERE + 1=1 + + OPTION 输入.region_code <> "" + (region.region_code like 输入.region_code or + region.region_name like 输入.region_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql new file mode 100644 index 000000000..7d266e30a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql @@ -0,0 +1,112 @@ +[交易说明] + 交易名: 任务分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.task_status TYPEAS s_string + 输入.finished_type TYPEAS s_string + 输入.task_type TYPEAS s_string + 输入.start_point_code TYPEAS s_string + 输入.next_point_code TYPEAS s_string + 输入.task_code TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.unFinish TYPEAS s_string + 输入.taskdtl_type TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + task.*, + p1.point_name AS start_point_name, + region1.region_name AS start_area_name, + p2.point_name AS next_point_name, + region2.region_name AS next_area_name, + d3.label AS task_type_name, + d4.label AS taskdtl_type_name + FROM + sch_base_task task + LEFT JOIN sch_base_point p1 ON task.start_point_code = p1.point_code + LEFT JOIN SCH_BASE_Region region1 ON region1.region_id = p1.region_id + LEFT JOIN sch_base_point p2 ON task.next_point_code = p2.point_code + LEFT JOIN SCH_BASE_Region region2 ON region2.region_id = p2.region_id + LEFT JOIN sys_dict_detail d3 ON d3.`value` = task.task_type AND d3.`name` = 'SCH_TASK_TYPE' + LEFT JOIN sys_dict_detail d4 ON d4.`value` = task.taskdtl_type AND d4.`name` = 'SCH_TASK_TYPE_DTL' + WHERE + task.is_delete = '0' + OPTION 输入.task_type <> "" + task.task_type = 输入.task_type + ENDOPTION + OPTION 输入.taskdtl_type <> "" + task.taskdtl_type = 输入.taskdtl_type + ENDOPTION + OPTION 输入.finished_type <> "" + task.finished_type = 输入.finished_type + ENDOPTION + OPTION 输入.begin_time <> "" + task.create_time >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + task.create_time <= 输入.end_time + ENDOPTION + OPTION 输入.unFinish <> "" + task.task_status <> '07' + ENDOPTION + OPTION 输入.task_status <> "" + find_in_set( task.task_status, 输入.task_status) + ENDOPTION + OPTION 输入.vehicle_code <> "" + (task.vehicle_code like 输入.vehicle_code) + ENDOPTION + OPTION 输入.task_code <> "" + (task.task_code like 输入.task_code) + ENDOPTION + OPTION 输入.start_point_code <> "" + (task.start_point_code like 输入.start_point_code) + ENDOPTION + OPTION 输入.next_point_code <> "" + (task.next_point_code like 输入.next_point_code) + ENDOPTION + OPTION 输入.begin_time <> "" + task.create_time >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + task.create_time <= 输入.end_time + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql new file mode 100644 index 000000000..7f179c721 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql @@ -0,0 +1,121 @@ +[交易说明] + 交易名: 点位管理查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.search TYPEAS s_string + 输入.point_type TYPEAS s_string + 输入.point_code TYPEAS s_string + 输入.region_id TYPEAS s_string + 输入.point_status TYPEAS s_string + 输入.lock_type TYPEAS s_string + 输入.is_used TYPEAS s_string + 输入.material_id TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + a.*,b.device_name + FROM + sch_base_point a + left join + pdm_base_device b on a.device_id = b.device_id + WHERE + a.is_delete = '0' + OPTION 输入.search <> "" + (a.point_code like 输入.search or + a.point_name like 输入.search) + ENDOPTION + OPTION 输入.point_type <> "" + a.point_type = 输入.point_type + ENDOPTION + OPTION 输入.area_type <> "" + a.area_type = 输入.area_type + ENDOPTION + OPTION 输入.point_status <> "" + a.point_status = 输入.point_status + ENDOPTION + OPTION 输入.lock_type <> "" + a.lock_type = 输入.lock_type + ENDOPTION + OPTION 输入.is_used <> "" + a.is_used = 输入.is_used + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + a.*,b.sect_code + FROM + ST_IVT_StructAttr a + left join + ST_IVT_SectAttr b on a.sect_id = b.sect_id + WHERE + a.is_delete = '0' + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "3" + PAGEQUERY + SELECT + point.*, + region.region_name + FROM + sch_base_point point + LEFT JOIN sch_base_region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.is_used = '1' + AND point.is_delete = '0' + AND point.point_status = '00' + + OPTION 输入.search <> "" + (point.point_code like 输入.search or + point.point_name like 输入.search) + ENDOPTION + + OPTION 输入.region_id <> "" + point.region_id = 输入.region_id + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls new file mode 100644 index 000000000..6f5bbf559 Binary files /dev/null and b/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls differ diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java new file mode 100644 index 000000000..4b8810aca --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java @@ -0,0 +1,30 @@ +package org.nl.wms.sch.tasks; + +import lombok.Data; + +@Data +public class AcsTaskDto { + //任务标识 + private String task_id; + //任务编码 + private String task_code; + //任务类型 + private String task_type; + //起点 + private String start_device_code; + //下一点 + private String next_device_code; + //载具号 + private String vehicle_code; + //载具类型 + private String vehicle_type; + //优先级 + private String priority; + //备注 + private String remark; + //扩展参数 + private String params; + //路由类型 + private String route_plan_code; + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java new file mode 100644 index 000000000..22442f556 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpVehicleTask.java @@ -0,0 +1,292 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CallEmpVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = CallEmpVehicleTask.class.getName(); + + @Override + @Transactional + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status,"0")) { + // 取消删除任务 + taskTab.delete("task_id = '"+task_id+"'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if(StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更改任务状态为完成 + jsonTask.put("task_status",TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + PointService point = SpringContextHolder.getBean(PointService.class); + // 校验起点是否存在 + PointDto start_point_code = point.findByCode(jsonTask.getString("start_point_code")); + if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("未找到可用点位:" + start_point_code); + // 校验终点是否存在 + PointDto next_point_code = point.findByCode(jsonTask.getString("next_point_code")); + if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("未找到可用点位:" + next_point_code); + + // 1.更新点位数量 2.解锁点位 + JSONObject jsonEmp = empTab.query("task_uuid = '" + task_id + "'").uniqueResult(0); + int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(start_point_code)).getIntValue("vehicle_qty"); + BigDecimal vehicle_qty_point = NumberUtil.sub(String.valueOf(vehicle_qty), String.valueOf(jsonEmp.getIntValue("vehicle_qty"))); + + start_point_code.setVehicle_qty(Integer.valueOf(vehicle_qty_point.toString())); + if (StrUtil.equals(vehicle_qty_point.toString(), "0")) { + start_point_code.setPoint_status("00"); + start_point_code.setVehicle_type(""); + } + start_point_code.setLock_type("00"); + pointTab.update(JSONObject.parseObject(JSON.toJSONString(start_point_code))); + + // 完成单据状态 + jsonEmp.put("bill_status", "50"); + jsonEmp.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonEmp.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonEmp.put("update_time", DateUtil.now()); + empTab.update(jsonEmp); + } + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + String qty = form.getString("qty"); + String record_uuid = form.getString("record_uuid"); + String vehicle_type = form.getString("vehicle_type"); + + // 出库终点不能为空 + if (ObjectUtil.isEmpty(next_point_code)) { + throw new BadRequestException("终点不能为空"); + } else { + // 判断终点是否有正在执行的任务 + JSONObject beforTaskObj = taskTab.query("is_delete='0' and next_point_code='" + next_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + // 载具数量不能为空 + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("载具数量不能为空"); + + /* + * 1. 点对点: 起点和终点都确定,直接创建任务 + * 2. 终点确定: 需要找到对应起点,在创建任务 具体找起点货位的规则在findBeginPoint()中 + */ + // 终点确定:找起点 + if (ObjectUtil.isEmpty(start_point_code)) { + JSONObject param = new JSONObject(); + param.put("next_point_code",next_point_code); + param.put("vehicle_qty",qty); + JSONObject json = this.findBeginPoint(param); + start_point_code = json.getString("start_point_code"); + vehicle_type = json.getString("vehicle_type"); + } else { + // 判断终点是否是空位 + JSONObject jsonPoint = pointTab.query("point_code = '" + start_point_code + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("起点点位不可用或不存在"); + } + // 创建任务 + JSONObject jsonTask = new JSONObject(); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + + jsonTask.put("task_id", task_id); + jsonTask.put("taskdtl_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + jsonTask.put("task_type", "04"); + jsonTask.put("taskdtl_type", "04"); + jsonTask.put("task_status", "01"); + jsonTask.put("start_point_code", start_point_code); + jsonTask.put("next_point_code", next_point_code); + jsonTask.put("handle_class", THIS_CLASS); + jsonTask.put("vehicle_type", vehicle_type); + jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); + jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); + jsonTask.put("create_time", DateUtil.now()); + jsonTask.put("acs_task_type", "1"); + taskTab.insert(jsonTask); + + // 锁定起点点位 + JSONObject jsonPoint = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0); + jsonPoint.put("lock_type", "02"); + pointTab.update(jsonPoint); + + // 更新空载具单据状态 + if (ObjectUtil.isNotEmpty(record_uuid)) { + JSONObject jsonEmp = empTab.query("record_uuid ='" + record_uuid + "'").uniqueResult(0); + jsonEmp.put("bill_status","20"); + empTab.update(jsonEmp); + } + return task_id; + } + + @Override + @Transactional + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + + @Transactional + public JSONObject findBeginPoint(JSONObject json) { + String next_point_code = json.getString("next_point_code"); + String vehicle_qty = json.getString("vehicle_qty"); + if (ObjectUtil.isEmpty(next_point_code)) throw new BadRequestException("终点不能为空"); + if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + // 根据终点区域判断优先的起点区域 + JSONObject jsonPointEnd = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); + JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0); + + // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 + String device_code = next_point_code.substring(0, next_point_code.indexOf("_")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + /* + * 空托盘出库任务: + * 1.叠盘架B区、养生A区 --> 共挤线 (优先级:1叠盘架B区 2养生A区) + * 2.叠盘架A区、养生A区 --> 油漆线 (优先级:1叠盘架A区 2养生A区) + */ + String start_point_code = ""; + JSONObject map = new JSONObject(); + if (StrUtil.equals(jsonRegionEnd.getString("region_code"),RegionTypeEnum.GJQY.getCode())) { + // 共挤线呼叫空托盘业务:查找叠盘架B区是否有满足条件的点位 + map.put("flag", "1"); + map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); + map.put("region_code", RegionTypeEnum.DPJQB.getCode()); + JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) { + start_point_code = jsonStartPointDPB.getString("point_code"); + } else { + // 为空说明叠盘架B区没有,则去养生A区找 : 只能找数量为1的空托盘 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) { + start_point_code = jsonStartPointYSA.getString("point_code"); + } else { + throw new BadRequestException("没有满足需求数量的点位"); + /* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中 + map.put("flag", "1"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + // 起点 + JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位"); + // 终点 + JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足"); + + JSONObject parem = new JSONObject(); + parem.put("start_point_code",jsonStart.getString("point_code")); + parem.put("next_point_code",jsonEnd.getString("point_code")); + parem.put("qty",jsonStart.getString("vehicle_qty")); + parem.put("vehicle_type",jsonStart.getString("vehicle_qty")); + String task_id = this.createTask(parem); + + // 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code + start_point_code = jsonEnd.getString("point_code");*/ + } + + } + } else if (StrUtil.equals(jsonRegionEnd.getString("region_code"),RegionTypeEnum.YQQY.getCode())) { + // 油漆线呼叫空托盘业务:查找叠盘架A区是否有满足条件的点位 + map.put("flag", "1"); + map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); + map.put("region_code", RegionTypeEnum.DPJQA.getCode()); + JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) { + start_point_code = jsonStartPointDPA.getString("point_code"); + } else { + // 为空说明叠盘架A区没有,则去养生A区找 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); + start_point_code = jsonStartPointYSA.getString("point_code"); + } + } + JSONObject resuft = new JSONObject(); + resuft.put("start_point_code",start_point_code); + resuft.put("vehicle_type",jsonOrder.getString("vehicle_type")); + return resuft; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java new file mode 100644 index 000000000..13762077c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java @@ -0,0 +1,306 @@ +package org.nl.wms.sch.tasks; + +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.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.st.IvtChangeTypeEnum; +import org.nl.wms.basedata.st.StoreIvtServiceImpl; +import org.nl.wms.common.StructFindUtil; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wms.sch.service.impl.PointServiceImpl; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; + +@Service +public class CallMaterialTask extends AbstractAcsTask { + private final String THIS_CLASS = CallMaterialTask.class.getName(); + + @Override + @Transactional + public void updateTaskStatus(JSONObject taskObj, String status) { + /** + *改变任务状态 + **/ + String task_id = taskObj.getString("task_id"); + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status,"0")) { + // 取消删除任务 + taskTab.delete("task_id = '"+task_id+"'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + //更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + HashMap map = new HashMap(); + map.put("bill_status", "40"); + map.put("update_optid", SecurityUtils.getCurrentUserId()); + map.put("update_optname", SecurityUtils.getCurrentNickName()); + map.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_regionIO").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); + + } + + if (TaskStatusEnum.FINISHED.getCode().equals(status)) { + // 更新任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode")); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("remark", "任务执行完成"); + ///审核单据 增加库存 改变出入库表的状态 + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); + //审核 加库存可和用数量 + StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + mstObj.put("bill_status", "50"); + mstObj.put("confirm_optid", SecurityUtils.getCurrentUserId()); + mstObj.put("confirm_optname", SecurityUtils.getCurrentNickName()); + mstObj.put("confirm_time", DateUtil.now()); + mstTab.update(mstObj); + + String iostorinv_id = mstObj.getString("iostorinv_id"); + String next_point_code = mstObj.getString("end_point_code"); + String start_point_code = mstObj.getString("start_point_code"); + JSONObject param = new JSONObject(); + param.put("material_id", mstObj.getString("material_id")); + param.put("bill_id", iostorinv_id); + param.put("qty_unit_id", mstObj.getString("qty_unit_id")); + param.put("pcsn", mstObj.getString("pcsn")); + param.put("change_qty", mstObj.getString("qty")); + param.put("vehicle_code", mstObj.getString("vehicle_code")); + PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); + PointDto nextPointDto = pointService.findByCode(next_point_code); + if (ObjectUtil.isNull(nextPointDto)) { + throw new BadRequestException("未找到可用点位:" + next_point_code); + } + PointDto startPointDto = pointService.findByCode(start_point_code); + if (ObjectUtil.isNull(startPointDto)) { + throw new BadRequestException("未找到可用点位:" + start_point_code); + } + param.put("struct_id", startPointDto.getPoint_id()); + ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); + + //解锁仓位,托盘信息,回写到点位上去 + String vehicle_code = jsonTask.getString("vehicle_code"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); + startPointObj.put("lock_type", "00"); + startPointObj.put("point_status", "00"); + startPointObj.put("vehicle_code", ""); + startPointObj.put("vehicle_type", ""); + pointTab.update(startPointObj); + taskTab.update(jsonTask); + } + + } + + @Override + public void findStartPoint() { + String task_status = TaskStatusEnum.SURE_START.getCode(); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); + for (int i = 0; i < taskArry.size(); i++) { + JSONObject taskObj = taskArry.getJSONObject(i); + String task_id = taskObj.getString("task_id"); + //1 将任务修改为分配 2将终点写入,完成分配,3 加锁点位 + //找一个合适的仓位 + WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject IosObj = ProcedureIOStable.query("task_id='" + task_id + "' and is_delete ='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(IosObj)) { + throw new BadRequestException("未找到任务号为'" + taskObj.getString("task_code") + "'的入库单据!"); + } + JSONObject param = new JSONObject(); + param.put("material_id", IosObj.getString("material_id")); + param.put("area_type", IosObj.getString("start_area")); + JSONObject inStructObj = StructFindUtil.getOutStruct(param); + if (ObjectUtil.isEmpty(inStructObj)) { + throw new BadRequestException("未找到合适的出库仓位!"); + } + //修改单据状态,将终点填入 + IosObj.put("bill_status", "20"); + IosObj.put("start_point_code", inStructObj.getString("struct_code")); + ProcedureIOStable.update(IosObj); + //终点加锁 + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "01"); + WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + inStructObj.getString("struct_code") + "'"); + //修改任务状态 + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); + taskObj.put("update_optname", SecurityUtils.getCurrentNickName()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + + } + + @Override + public void findNextPoint() { + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + //请求参数 载具、起点、终点 + String vehicle_code = form.getString("vehicle_code"); + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + String vehicle_type = form.getString("vehicle_type"); + + String task_status = TaskStatusEnum.START_AND_POINT.getCode(); + String material_id = form.getString("material_id"); + String create_mode = form.getString("create_mode"); + String iostorinv_id = form.getString("iostorinv_id"); + + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject regionTable = WQLObject.getWQLObject("ST_IVT_regionIO"); + + if (StrUtil.isEmpty(next_point_code)) { + throw new BadRequestException("终点不能为空!"); + } + if (StrUtil.isEmpty(material_id)) { + throw new BadRequestException("物料标识不能为空!"); + } + if (StrUtil.isEmpty(create_mode)) { + throw new BadRequestException("创建方式不能为空!"); + } + //判断终点有没有未完成的指令 + JSONObject beforTaskObj = taskTable. + query("is_delete='0' and next_point_code='" + next_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) { + throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String start_area = ""; + String qty = ""; + String qty_unit_id = ""; + + if (StrUtil.isEmpty(start_point_code)) { + // 起点为空找到对应的起点 + JSONObject param = new JSONObject(); + param.put("next_point_code",next_point_code); + param.put("vehicle_type",vehicle_type); + param.put("material_id",material_id); + JSONObject ivtObj = this.findBeginPoint(param); + + qty = ivtObj.getString("canuse_qty"); + qty_unit_id = ivtObj.getString("qty_unit_id"); + start_point_code = ivtObj.getString("struct_code"); + } else { + // 不能空则为点对点,查找对应出入库单据 + if (ObjectUtil.isEmpty(iostorinv_id)) throw new BadRequestException("出库单id不能为空"); + JSONObject jsonRegion = regionTable.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + qty = jsonRegion.getString("qty"); + qty_unit_id = jsonRegion.getString("qty_unit_id"); + } + + PointDto startPoint = pointService.findByCode(start_point_code); + //起点点加锁 + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject startPointObj = pointTable.query("point_code='" + start_point_code + "'").uniqueResult(0); + startPointObj.put("lock_type", "01"); + pointTable.update(startPointObj); + + //减少库存可用数量 + StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + JSONObject param = new JSONObject(); + param.put("material_id", material_id); + param.put("bill_id", iostorinv_id); + param.put("qty_unit_id", qty_unit_id); + param.put("change_qty", qty); + param.put("struct_id", startPoint.getPoint_id()); + param.put("vehicle_code", startPoint.getVehicle_code()); + + ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", task_id); + taskObj.put("taskdtl_id", task_id); + taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + taskObj.put("task_type", "02"); + taskObj.put("taskdtl_type", "02"); + taskObj.put("task_status", task_status); + taskObj.put("start_point_code", start_point_code); + taskObj.put("start_area", start_area); + taskObj.put("request_param", form.toJSONString()); + taskObj.put("next_point_code", next_point_code); + taskObj.put("vehicle_code", vehicle_code); + taskObj.put("handle_class", THIS_CLASS); + taskObj.put("is_auto_issue", "1"); + taskObj.put("create_name", SecurityUtils.getCurrentUsername()); + taskObj.put("create_id", SecurityUtils.getCurrentUserId()); + taskObj.put("create_time", DateUtil.now()); + taskObj.put("is_delete", "0"); + taskTable.insert(taskObj); + return task_id; + } + + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + + @Transactional + public JSONObject findBeginPoint(JSONObject json) { + String next_point_code = json.getString("next_point_code"); + String vehicle_type = json.getString("vehicle_type"); + String material_id = json.getString("material_id"); + + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + + // 根据起点判断是什么区域 然后要入到什么区 + PointDto endDto = SpringContextHolder.getBean(PointService.class).findByCode(next_point_code); + if (ObjectUtil.isEmpty(endDto)) throw new BadRequestException("终点点位不存在"); + JSONObject jsonEndRegion = regionTab.query("region_id = '" + endDto.getRegion_id() + "'").uniqueResult(0); + + /* + * 物料出库业务:目前只有1个业务,如果区域不正确则报错 + * 1.养生A区 --> 油漆线 + */ + JSONObject resuft = new JSONObject(); + if (StrUtil.equals(jsonEndRegion.getString("region_code"),RegionTypeEnum.YQQY.getCode())) { + JSONObject map = new JSONObject(); + map.put("flag", "3"); + map.put("vehicle_type", vehicle_type); + map.put("material_id", material_id); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + resuft = WQL.getWO("ST_REGION_OUT_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(resuft)) throw new BadRequestException("库存不足"); + } else { + throw new BadRequestException("业务类型错误"); + } + return resuft; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java new file mode 100644 index 000000000..307a001d1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java @@ -0,0 +1,120 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 普通点对点任务 + */ +@Service +public class PointToPointTask extends AbstractAcsTask { + @Override + @Transactional + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status,"0")) { + // 取消删除任务 + taskTab.delete("task_id = '"+task_id+"'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if(StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 完成 + jsonTask.put("task_status",TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + } + + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + String vehicle_code = form.getString("vehicle_code"); + String now = DateUtil.now(); + if (StrUtil.isEmpty(start_point_code)) { + throw new BadRequestException("起点不能为空!"); + } + /* if (StrUtil.isEmpty(next_point_code)) { + throw new BadRequestException("终点不能为空!"); + } + if (StrUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("载具不能为空!"); + }*/ + String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + JSONObject task = new JSONObject(); + task.put("taskdtl_id", taskdtl_id); + task.put("task_id", taskdtl_id); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_type", "05"); + task.put("taskdtl_type", "05"); + task.put("task_status", "01"); + task.put("start_point_code", start_point_code); + task.put("next_point_code", next_point_code); + task.put("vehicle_code", vehicle_code); + task.put("handle_class", this.getClass().getName()); + task.put("finished_type", "00"); + task.put("is_delete", "0"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + task.put("create_id", currentUserId); + task.put("create_name", SecurityUtils.getCurrentNickName()); + task.put("update_optid", currentUserId); + task.put("update_optname", SecurityUtils.getCurrentNickName()); + task.put("create_time", now); + task.put("update_time", now); + task.put("priority", "1"); + WQLObject.getWQLObject("SCH_BASE_Task").insert(task); + return taskdtl_id; + } + + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String taskdtl_id) { + + } + + @Override + public void cancel(String taskdtl_id) { + + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java new file mode 100644 index 000000000..3e17c1003 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java @@ -0,0 +1,44 @@ +package org.nl.wms.sch.tasks; + +/** + * 任务状态枚举 + */ +public enum RegionTypeEnum { + CPQYA(1, "CPQYA01", "成品区域A","1557538851726168064"), + YSQA(2, "YSQA01", "养生A区","1557539288307077120"), + YSQB(3, "YSQB01", "养生B区","1557539423292362752"), + GJQY(4, "GJQY01", "共挤区","1557539744848678912"), + YQQY(5, "YQQY01", "油漆区","1557913112412295168"), + DPJQA(6, "DPJQA01", "叠盘架A区","1558015562792177664"), + DPJQB(7, "DPJQB01", "叠盘架B区","1558015634472833024"), + KTPHCQA(8, "KTPHCQA01", "空托盘缓存A区","1558015810096730112"), + KTPHCQB(9, "KTPHCQB01", "空托盘缓存B区","1558015870570205184"), + HKQY(10, "HKQY01", "豪凯区域","1564862312702152704"), + CPQYB(11, "CPQYB01", "成品区域B","1564874102089584640"), + SSX(12, "SSX01", "输送线区域","1559374522581389312"); + + private int index; + private String code; + private String name; + private String id; + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } + + RegionTypeEnum(int index, String code, String name, String id) { + this.index = index; + this.id = id; + this.code = code; + this.name = name; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java new file mode 100644 index 000000000..5974e211c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java @@ -0,0 +1,310 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.master.service.StoragevehicleinfoService; +import org.nl.wms.basedata.master.service.dto.StoragevehicleinfoDto; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.HashMap; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SendEmpVehicleTask extends AbstractAcsTask { + private final String THIS_CLASS = SendEmpVehicleTask.class.getName(); + + @Override + @Transactional + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status,"0")) { + // 取消删除任务 + taskTab.delete("task_id = '"+task_id+"'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + } + + if(StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更改任务状态为完成 + jsonTask.put("task_status",TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + String start_point_code = jsonTask.getString("start_point_code"); + + PointService point = SpringContextHolder.getBean(PointService.class); + // 校验起点是否存在 + PointDto startDto = point.findByCode(start_point_code); + if (ObjectUtil.isEmpty(startDto)) throw new BadRequestException("未找到可用点位:" + startDto); + // 校验终点是否存在 + PointDto nextDto = point.findByCode(jsonTask.getString("next_point_code")); + if (ObjectUtil.isEmpty(nextDto)) throw new BadRequestException("未找到可用点位:" + nextDto); + + // 1.更新点位数量 2.解锁点位 + JSONObject jsonEmp = empTab.query("task_uuid = '" + task_id + "'").uniqueResult(0); + int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(nextDto)).getIntValue("vehicle_qty"); + BigDecimal vehicle_qty_point = NumberUtil.add(String.valueOf(vehicle_qty), String.valueOf(jsonEmp.getIntValue("vehicle_qty"))); + + nextDto.setVehicle_qty(Integer.valueOf(vehicle_qty_point.toString())); + nextDto.setPoint_status("01"); + nextDto.setLock_type("00"); + nextDto.setVehicle_type(jsonTask.getString("vehicle_type")); + nextDto.setVehicle_code(jsonTask.getString("vehicle_code")); + pointTab.update(JSONObject.parseObject(JSON.toJSONString(nextDto))); + + // 完成单据状态 + jsonEmp.put("bill_status", "50"); + jsonEmp.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonEmp.put("update_optname", SecurityUtils.getCurrentUsername()); + jsonEmp.put("update_time", DateUtil.now()); + empTab.update(jsonEmp); + } + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + String vehicle_code = form.getString("vehicle_code"); + String qty = form.getString("qty"); + String record_uuid = form.getString("record_uuid"); + + String vehicle_type = ""; + // 入库起点不能为空 + if (ObjectUtil.isEmpty(start_point_code)) { + throw new BadRequestException("起点不能为空"); + } else { + // 判断起点是否有正在执行的任务 + JSONObject beforTaskObj = taskTab.query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + // 载具数量不能为空 + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("载具数量不能为空"); + + /* + * 1. 点对点: 起点和终点都确定,直接创建任务 + * 2. 起点确定: 需要找到对应终点,在创建任务 具体找终点货位的规则在findEndPoint()中 + */ + // 起点确定:找终点 + if (ObjectUtil.isEmpty(next_point_code)) { + JSONObject param = new JSONObject(); + param.put("start_point_code",start_point_code); + param.put("vehicle_qty",qty); + param.put("vehicle_code",vehicle_code); + JSONObject json = this.findEndPoint(param); + next_point_code = json.getString("EndPoint_code"); + vehicle_type = json.getString("vehicle_type"); + } else { + // 判断终点是否是空位 + JSONObject jsonPoint = pointTab.query("point_code = '" + next_point_code + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint)) throw new BadRequestException("终点点位不不可用或不存在"); + } + // 创建任务 + JSONObject jsonTask = new JSONObject(); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + + jsonTask.put("task_id", task_id); + jsonTask.put("taskdtl_id", task_id); + jsonTask.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + jsonTask.put("task_type", "03"); + jsonTask.put("taskdtl_type", "03"); + jsonTask.put("task_status", "01"); + jsonTask.put("start_point_code", start_point_code); + jsonTask.put("next_point_code", next_point_code); + jsonTask.put("vehicle_type", vehicle_type); + jsonTask.put("vehicle_code", vehicle_code); + jsonTask.put("handle_class", THIS_CLASS); + jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); + jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); + jsonTask.put("create_time", DateUtil.now()); + jsonTask.put("acs_task_type", "1"); + taskTab.insert(jsonTask); + + // 锁定终点点位 + JSONObject jsonPoint = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0); + jsonPoint.put("lock_type", "02"); + pointTab.update(jsonPoint); + + // 更新空载具单据状态 + if (ObjectUtil.isNotEmpty(record_uuid)) { + JSONObject jsonEmp = empTab.query("record_uuid ='" + record_uuid + "'").uniqueResult(0); + jsonEmp.put("bill_status","20"); + empTab.update(jsonEmp); + } + return task_id; + } + + @Override + @Transactional + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + + @Transactional + public JSONObject findEndPoint(JSONObject json) { + String start_point_code = json.getString("start_point_code"); + String vehicle_qty = json.getString("vehicle_qty"); + String vehicle_code = json.getString("vehicle_code"); + + if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("起点不能为空"); + if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); // 区域表 + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); //空载具记录表 + WQLObject velicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); // 载具表 + // 根据起点区域判断优先的终点区域 + JSONObject jsonPointStart = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPointStart)) throw new BadRequestException("起点点位不存在"); + JSONObject jsonRegionStart = regionTab.query("region_id ='" + jsonPointStart.getString("region_id") + "'").uniqueResult(0); + + // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 + String device_code = ""; + if (ObjectUtil.isEmpty(vehicle_code)) { + device_code = start_point_code.substring(0, start_point_code.indexOf("_")); + } + + String vehicle_type = ""; + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) { + // 如果说明是货梯业务:则判断载具号是否为空 + if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("起点点位错误"); + // 根据载具号找对应的载具类型 + StoragevehicleinfoDto vehicleDto = SpringContextHolder.getBean(StoragevehicleinfoService.class).findByCode(vehicle_code); + if (ObjectUtil.isEmpty(vehicleDto)) throw new BadRequestException("载具不存在"); + vehicle_type = vehicleDto.getStoragevehicle_type(); + } else { + // 不为空说明不是货梯业务:则根据工单找到对应类型 + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + vehicle_type = jsonOrder.getString("vehicle_type"); + } + + /* + * 空托盘入库业务: + * 1.油漆线 --> 叠盘架A区、养生区A区 (优先级:1叠盘架A区 2.养生A区) + * 2.货梯 --> 叠盘架B区、养生区A区 (优先级:1叠盘架B区 2.养生A区) + */ + String EndPoint_code = ""; + HashMap map = new HashMap<>(); + if (StrUtil.equals(jsonRegionStart.getString("region_code"), RegionTypeEnum.YQQY.getCode())) { + // 油漆线入库:查找叠盘架A区是否有满足的空位 + map.put("flag", "1"); + map.put("vehicle_qty",vehicle_qty); + map.put("vehicle_type",vehicle_type); + map.put("region_code",RegionTypeEnum.DPJQA.getCode()); + JSONObject jsonEndPointDPA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonEndPointDPA)) { + EndPoint_code = jsonEndPointDPA.getString("point_code"); + } else { + // 为空说明没有相同的载具类型 + map.put("flag", "2"); + map.put("vehicle_type",""); + JSONObject jsonEndPointDPA2 = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonEndPointDPA2)) { + EndPoint_code = jsonEndPointDPA2.getString("point_code"); + } else { + // 为空说明叠盘架A区上货位不足,则需要入库到养生A区 + map.put("flag", "3"); + map.put("region_code",RegionTypeEnum.YSQA.getCode() ); + JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); + EndPoint_code = jsonEndPointYSA.getString("point_code"); + } + } + } else { + // 货梯入库:查找叠盘架B区是否有满足的空位 + map.put("flag", "1"); + map.put("vehicle_qty",vehicle_qty); + map.put("vehicle_type",vehicle_type); + map.put("region_code",RegionTypeEnum.DPJQB.getCode()); + JSONObject jsonEndPointDPB = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonEndPointDPB)) { + EndPoint_code = jsonEndPointDPB.getString("point_code"); + } else { + // 为空说明没有相同的载具类型 + map.put("flag", "2"); + map.put("vehicle_type",""); + JSONObject jsonEndPointDPB2 = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonEndPointDPB2)) { + EndPoint_code = jsonEndPointDPB2.getString("point_code"); + } else { + // 为空说明叠盘架B区上货位不足,则需要入库到养生A区 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); + EndPoint_code = jsonEndPointYSA.getString("point_code"); + } + } + } + JSONObject resuft = new JSONObject(); + resuft.put("EndPoint_code",EndPoint_code); + resuft.put("vehicle_type",vehicle_type); + return resuft; + } +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java new file mode 100644 index 000000000..e168e2177 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java @@ -0,0 +1,311 @@ +package org.nl.wms.sch.tasks; + +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.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.st.IvtChangeTypeEnum; +import org.nl.wms.basedata.st.StoreIvtServiceImpl; +import org.nl.wms.common.StructFindUtil; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wms.sch.service.impl.PointServiceImpl; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SendMaterialTask extends AbstractAcsTask { + private final String THIS_CLASS = SendMaterialTask.class.getName(); + + + @Override + @Transactional + public void updateTaskStatus(JSONObject taskObj, String status) { + /** + *改变任务状态 + **/ + String task_id = taskObj.getString("task_id"); + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + JSONObject jsonTask = taskTab.query("task_id='" + task_id + "'").uniqueResult(0); + + if (StrUtil.equals(status,"0")) { + // 取消删除任务 + taskTab.delete("task_id = '"+task_id+"'"); + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + //更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); + taskTab.update(jsonTask); + HashMap map = new HashMap(); + map.put("update_optid", SecurityUtils.getCurrentUserId()); + map.put("update_optname", SecurityUtils.getCurrentNickName()); + map.put("update_time", DateUtil.now()); + map.put("bill_status", "40"); + WQLObject.getWQLObject("ST_IVT_regionIO").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); + } + + if (TaskStatusEnum.FINISHED.getCode().equals(status)) { + // 更新任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode")); + jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("remark", "任务执行完成"); + ///审核单据 增加库存 改变出入库表的状态 + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); + //审核 加库存可和用数量 + StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); + mstObj.put("bill_status", "50"); + mstObj.put("confirm_optid", SecurityUtils.getCurrentUserId()); + mstObj.put("confirm_optname", SecurityUtils.getCurrentNickName()); + mstObj.put("confirm_time", DateUtil.now()); + mstTab.update(mstObj); + + String iostorinv_id = mstObj.getString("iostorinv_id"); + String bill_code = mstObj.getString("bill_code"); + String bill_type_scode =mstObj.getString("bill_type"); + String next_point_code = mstObj.getString("end_point_code"); + String start_point_code = mstObj.getString("start_point_code"); + JSONObject param = new JSONObject(); + param.put("material_id", mstObj.getString("material_id")); + param.put("bill_code", bill_code); + param.put("bill_type_scode", bill_type_scode); + param.put("bill_id", iostorinv_id); + param.put("qty_unit_id", mstObj.getString("qty_unit_id")); + param.put("pcsn", mstObj.getString("pcsn")); + param.put("change_qty", mstObj.getString("qty")); + param.put("vehicle_code", mstObj.getString("vehicle_code")); + param.put("region_id", mstObj.getString("start_region_id")); + param.put("is_full", mstObj.getString("is_full")); + param.put("stewing_time", mstObj.getString("stewing_time")); + param.put("producetask_id", mstObj.getString("producetask_id")); + param.put("io_type", mstObj.getString("io_type")); + + PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); + PointDto nextPointDto = pointService.findByCode(next_point_code); + if (ObjectUtil.isNull(nextPointDto)) { + throw new BadRequestException("未找到可用点位:" + next_point_code); + } + PointDto startPointDto = pointService.findByCode(start_point_code); + if (ObjectUtil.isNull(startPointDto)) { + throw new BadRequestException("未找到可用点位:" + start_point_code); + } + param.put("struct_id", nextPointDto.getPoint_id()); + ivtService.addIvtFlow(param, IvtChangeTypeEnum.ADD_IVT_AND_CAN_USE); + // 解锁点位 + String vehicle_code = jsonTask.getString("vehicle_code"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONObject endpointObj = pointTab.query("point_code='" + jsonTask.getString("next_point_code") + "'").uniqueResult(0); + endpointObj.put("lock_type", "00"); + endpointObj.put("point_status", "02"); + endpointObj.put("vehicle_code", vehicle_code); + endpointObj.put("vehicle_type", jsonTask.getString("vehicle_type")); + pointTab.update(endpointObj); + taskTab.update(jsonTask); + + /* JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); + startPointObj.put("lock_type", "00"); + startPointObj.put("point_status", "00"); + startPointObj.put("vehicle_code", ""); + pointTab.update(startPointObj); + taskTab.update(jsonTask);*/ + } + + } + + @Override + public void findStartPoint() { + + } + + @Override + public void findNextPoint() { + String task_status = TaskStatusEnum.SURE_START.getCode(); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONArray taskArry = taskTab.query("task_status='" + task_status + "' AND handle_class='" + THIS_CLASS + "' AND is_delete='0' ").getResultJSONArray(0); + for (int i = 0; i < taskArry.size(); i++) { + JSONObject taskObj = taskArry.getJSONObject(i); + String task_id = taskObj.getString("task_id"); + //1 将任务修改为分配 2将终点写入,完成分配,3 加锁点位 + //找一个合适的仓位 + WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject IosObj = ProcedureIOStable.query("task_id='" + task_id + "' and is_delete ='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(IosObj)) { + throw new BadRequestException("未找到任务号为'" + taskObj.getString("task_code") + "'的入库单据!"); + } + JSONObject param = new JSONObject(); + param.put("material_id", IosObj.getString("material_id")); + param.put("area_type", IosObj.getString("end_area")); + param.put("vehicle_code", IosObj.getString("vehicle_code")); + JSONObject inStructObj = StructFindUtil.getInStruct(param); + if (ObjectUtil.isEmpty(inStructObj)) { + throw new BadRequestException("未找到合适的入库仓位!"); + } + //修改单据状态,将终点填入 + IosObj.put("bill_status", "20"); + IosObj.put("end_point_code", inStructObj.getString("struct_code")); + ProcedureIOStable.update(IosObj); + //终点加锁 + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "01"); + WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + inStructObj.getString("struct_code") + "'"); + //修改任务状态 + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); + taskObj.put("update_optname", SecurityUtils.getCurrentNickName()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + //请求参数 载具、起点、终点 + String vehicle_code = form.getString("vehicle_code"); + String vehicle_type = form.getString("vehicle_type"); + String start_point_code = form.getString("start_point_code"); + String next_point_code = form.getString("next_point_code"); + + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_regionIO"); + + + if (StrUtil.isEmpty(start_point_code)) { + throw new BadRequestException("起点不能为空!"); + } + //判断起点有没有未完成的指令 + JSONObject beforTaskObj = taskTable. + query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(beforTaskObj)) { + throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); + } + + + if (StrUtil.isEmpty(next_point_code)) { + // 终点为空需要找终点 + JSONObject param = new JSONObject(); + param.put("start_point_code",start_point_code); + JSONObject endPoint = this.findEndPoint(param); + next_point_code = endPoint.getString("next_point_code"); + } + + //终点点加锁 + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); + JSONObject endPointObj = pointTable.query("point_code='" + next_point_code + "'").uniqueResult(0); + endPointObj.put("lock_type", "01"); + pointTable.update(endPointObj); + + // 创建任务 + PointService pointService = SpringContextHolder.getBean(PointService.class); + + JSONObject taskObj = new JSONObject(); + CodeUtil.getNewCode("TASK_CODE"); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + taskObj.put("task_id", task_id); + taskObj.put("taskdtl_id", task_id); + taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + taskObj.put("task_type", "01"); + taskObj.put("vehicle_type", vehicle_type); + taskObj.put("taskdtl_type", "01"); + taskObj.put("acs_task_type", "1"); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("start_point_code", start_point_code); + PointDto startPoint = pointService.findByCode(start_point_code); + taskObj.put("start_area", startPoint.getRegion_id()); + taskObj.put("request_param", form.toJSONString()); + taskObj.put("next_point_code", next_point_code); + PointDto nextPoint = pointService.findByCode(next_point_code); + taskObj.put("next_area", nextPoint.getRegion_id()); + taskObj.put("vehicle_code", vehicle_code); + taskObj.put("handle_class", THIS_CLASS); + taskObj.put("is_auto_issue", "1"); + taskObj.put("create_name", SecurityUtils.getCurrentUsername()); + taskObj.put("create_id", SecurityUtils.getCurrentUserId()); + taskObj.put("create_time", DateUtil.now()); + taskObj.put("is_delete", "0"); + taskTable.insert(taskObj); + return task_id; + } + + + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + @Override + public void pullBack(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } + + @Transactional + public JSONObject findEndPoint(JSONObject json) { + String start_point_code = json.getString("start_point_code"); + + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + + // 根据起点判断是什么区域 然后要入到什么区 + PointDto startDto = SpringContextHolder.getBean(PointService.class).findByCode(start_point_code); + if (ObjectUtil.isEmpty(startDto)) throw new BadRequestException("起点点位不存在"); + JSONObject jsonStartRegion = regionTab.query("region_id = '" + startDto.getRegion_id() + "'").uniqueResult(0); + + /* + * 物料入库业务:目前只有2个业务,如果区域不正确则报错 + * 1.共挤线 --> 养生区A + * 2.豪凯线 --> 成品区 + */ + String next_point_code = ""; + if (StrUtil.equals(jsonStartRegion.getString("region_code"),RegionTypeEnum.GJQY.getCode())) { + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonEndPoint = WQL.getWO("ST_REGION_IN_01").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isEmpty(jsonEndPoint)) throw new BadRequestException("仓位不足"); + next_point_code = jsonEndPoint.getString("point_code"); + } else if (StrUtil.equals(jsonStartRegion.getString("region_code"),RegionTypeEnum.HKQY.getCode())) { + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("region_code", RegionTypeEnum.CPQYA.getCode()); + JSONObject jsonEndPoint = WQL.getWO("ST_REGION_IN_01").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isEmpty(jsonEndPoint)) throw new BadRequestException("仓位不足"); + next_point_code = jsonEndPoint.getString("point_code"); + } + + JSONObject resuft = new JSONObject(); + resuft.put("next_point_code",next_point_code); + return resuft; + } + + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskTypeEnum.java b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskTypeEnum.java new file mode 100644 index 000000000..9b0e82daf --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskTypeEnum.java @@ -0,0 +1,33 @@ +package org.nl.wms.sch.tasks; + +/** + * 任务状态枚举 + */ +public enum TaskTypeEnum { + IN_TASK(1, "01", "入库"), + Out_TASK(2, "02", "出库"), + IN_EMPTY_VEHICLE_TASK(3, "03", "入空载具"), + OUT_EMPTY_VEHICLE_TASK(4, "04", "出空载具"), + DUMPINV_TASK(5, "05", "转储"), + QUALITY_TASK(6, "06", "质检"), + MATERIAL_BACK_TASK(7, "07", "余料回库"); + + private int index; + private String code; + private String name; + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + + TaskTypeEnum(int index, String code, String name) { + this.index = index; + this.code = code; + this.name = name; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java b/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java new file mode 100644 index 000000000..6f237a2a0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java @@ -0,0 +1,77 @@ + +package org.nl.wms.st.inbill.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.st.inbill.service.RegionioInService; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Liuxy + * @date 2022-08-11 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "区域入库管理") +@RequestMapping("/api/regionioIn") +@Slf4j +public class RegionioInController { + + private final RegionioInService rgionioInService; + + @GetMapping + @Log("查询区域入库") + @ApiOperation("查询区域入库") + //@PreAuthorize("@el.check('regionio:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(rgionioInService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增区域入库") + @ApiOperation("新增区域入库") + //@PreAuthorize("@el.check('regionio:add')") + public ResponseEntity create(@Validated @RequestBody RegionioDto dto) { + rgionioInService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域入库") + @ApiOperation("修改区域入库") + //@PreAuthorize("@el.check('regionio:edit')") + public ResponseEntity update(@Validated @RequestBody RegionioDto dto) { + rgionioInService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域入库") + @ApiOperation("删除区域入库") + //@PreAuthorize("@el.check('regionio:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + rgionioInService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("生成任务") + @ApiOperation("生成任务") + @PostMapping("/createTask") + public ResponseEntity createTask(@RequestBody JSONObject jsonObject) { + rgionioInService.createTask(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java b/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java new file mode 100644 index 000000000..c9435d311 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java @@ -0,0 +1,79 @@ + +package org.nl.wms.st.inbill.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-11 + **/ +public interface RegionioInService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param qty_unit_id ID + * @return Regionio + */ + RegionioDto findById(Long qty_unit_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Regionio + */ + RegionioDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(RegionioDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(RegionioDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 生成任务 + * + * @param jsonObject / + */ + void createTask(JSONObject jsonObject); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java b/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java new file mode 100644 index 000000000..8083a9eb4 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java @@ -0,0 +1,156 @@ +package org.nl.wms.st.inbill.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; + +/** + * @author Liuxy + * @description / + * @date 2022-08-11 + **/ +@Data +public class RegionioDto implements Serializable { + + /** 出入单标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long iostorinv_id; + + /** + * 单据编号 + */ + private String bill_code; + + /** + * 出入类型 + */ + private String io_type; + + /** + * 物料标识 + */ + private Long material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 载具编码 + */ + private String vehicle_code; + + /** + * 数量 + */ + private BigDecimal qty; + + /** 数量单位标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long qty_unit_id; + + /** + * 单据状态 + */ + private String bill_status; + + /** + * 起始点位编码 + */ + private String start_point_code; + + /** + * 终点点位编码 + */ + private String end_point_code; + + /** + * 起始区域 + */ + private String start_region_id; + + /** + * 终点区域 + */ + private String end_region_id; + + /** + * 客户标识 + */ + private Long cust_id; + + /** + * 生成方式 + */ + private String create_mode; + + /** + * 任务标识 + */ + private Long task_id; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 确认人 + */ + private Long confirm_optid; + + /** + * 确认人姓名 + */ + private String confirm_optname; + + /** + * 确认时间 + */ + private String confirm_time; + + /** + * 是否删除 + */ + private String is_delete; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java new file mode 100644 index 000000000..76706aa8f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java @@ -0,0 +1,231 @@ + +package org.nl.wms.st.inbill.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 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.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.tasks.SendMaterialTask; +import org.nl.wms.st.inbill.service.RegionioInService; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** +* @description 服务实现 +* @author Liuxy +* @date 2022-08-11 +**/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RegionioInServiceImpl implements RegionioInService { + + @Override + public Map queryAll(Map whereJson, Pageable page){ + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); + String material_code = MapUtil.getStr(whereJson, "material_code"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); + String start_point_code = MapUtil.getStr(whereJson, "start_point_code"); + String end_point_code = MapUtil.getStr(whereJson, "end_point_code"); + String start_region_code = MapUtil.getStr(whereJson, "start_region_code"); + String end_region_code = MapUtil.getStr(whereJson, "end_region_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + map.put("bill_status",MapUtil.getStr(whereJson, "bill_status")); + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code", bill_code + "%"); + if (ObjectUtil.isNotEmpty(vehicle_code)) map.put("vehicle_code", vehicle_code + "%"); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", material_code + "%"); + if (ObjectUtil.isNotEmpty(pcsn)) map.put("pcsn", pcsn + "%"); + if (ObjectUtil.isNotEmpty(start_point_code)) map.put("start_point_code", start_point_code + "%"); + if (ObjectUtil.isNotEmpty(end_point_code)) map.put("end_point_code", end_point_code + "%"); + if (ObjectUtil.isNotEmpty(start_region_code)) map.put("start_region_code", start_region_code + "%"); + if (ObjectUtil.isNotEmpty(end_region_code)) map.put("end_region_code", end_region_code + "%"); + + JSONObject json = WQL.getWO("ST_REGION_IN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ios.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson){ + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionioDto.class); + return null; + } + + @Override + public RegionioDto findById(Long qty_unit_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("qty_unit_id = '" + qty_unit_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + public RegionioDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionioDto dto) { + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + String bill_code = CodeUtil.getNewCode("IN_STORE_CODE"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setBill_code(bill_code); + dto.setIo_type("0"); + dto.setBill_status("10"); + dto.setCreate_mode("01"); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionioDto dto) { + RegionioDto entity = this.findById(dto.getQty_unit_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setBill_status("10"); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + for (Long iostorinv_id: ids) { + JSONObject param = wo.query("iostorinv_id = '" + String.valueOf(iostorinv_id) + "'").uniqueResult(0); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createTask(JSONObject jsonObject) { + String iostorinv_id = jsonObject.getString("iostorinv_id"); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + + JSONObject jsonIn = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + String start_point_code = jsonIn.getString("start_point_code"); + + // 准备参数 并调用入库处理类中的创建任务方法 + JSONObject form = new JSONObject(); + form.put("vehicle_code", jsonIn.getString("vehicle_code")); + form.put("start_point_code", start_point_code); + form.put("next_point_code", jsonIn.getString("end_point_code")); + form.put("material_id", jsonIn.getString("material_id")); + form.put("qty", jsonIn.getString("qty")); + form.put("cust_id", jsonIn.getString("cust_id")); + form.put("create_mode", jsonIn.getString("create_mode")); + form.put("pcsn", jsonIn.getString("pcsn")); + form.put("iostorinv_id", iostorinv_id); + + // 根据起点点位 找到对应设备,根据设备找到对应工单,根据工单获取载具类型 + String device_code = start_point_code.substring(0, start_point_code.indexOf("_")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + form.put("vehicle_type", jsonOrder.getString("vehicle_type")); + SendMaterialTask sendMaterialTask = new SendMaterialTask(); + String task_id = sendMaterialTask.createTask(form); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("update_optid", SecurityUtils.getCurrentUserId()); + json.put("update_optname", SecurityUtils.getCurrentNickName()); + json.put("update_time", DateUtil.now()); + json.put("bill_status", "20"); + wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql b/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql new file mode 100644 index 000000000..31114c040 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql @@ -0,0 +1,139 @@ +[交易说明] + 交易名: 区域入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.bill_code TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.pcsn TYPEAS s_string + 输入.start_point_code TYPEAS s_string + 输入.end_point_code TYPEAS s_string + 输入.start_region_code TYPEAS s_string + 输入.end_region_code TYPEAS s_string + 输入.region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + ios.*, + mater.material_code, + mater.material_name, + unit.unit_name, + region1.region_name AS start_region_name, + region2.region_name AS end_region_name, + point1.point_name AS start_point_name, + point2.point_name AS end_point_name + FROM + ST_IVT_regionIO ios + LEFT JOIN md_me_materialbase mater ON mater.material_id = ios.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ios.qty_unit_id + LEFT JOIN SCH_BASE_Region region1 ON region1.region_id = ios.start_region_id + LEFT JOIN SCH_BASE_Region region2 ON region2.region_id = ios.end_region_id + LEFT JOIN sch_base_point point1 ON point1.point_code = ios.start_point_code + LEFT JOIN sch_base_point point2 ON point2.point_code = ios.end_point_code + WHERE + ios.is_delete = '0' + AND ios.io_type = '0' + + OPTION 输入.bill_code <> "" + ios.bill_code like 输入.bill_code + ENDOPTION + + OPTION 输入.bill_status <> "" + ios.bill_status = 输入.bill_status + ENDOPTION + + OPTION 输入.vehicle_code <> "" + ios.vehicle_code like 输入.vehicle_code + ENDOPTION + + OPTION 输入.pcsn <> "" + ios.pcsn like 输入.pcsn + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + + OPTION 输入.start_point_code <> "" + (point1.point_code like 输入.start_point_code or + point1.point_name like 输入.start_point_code) + ENDOPTION + + OPTION 输入.end_point_code <> "" + (point2.point_code like 输入.end_point_code or + point2.point_name like 输入.end_point_code) + ENDOPTION + + OPTION 输入.start_region_code <> "" + (region1.region_code like 输入.start_region_code or + region1.region_name like 输入.start_region_code) + ENDOPTION + + OPTION 输入.end_region_code <> "" + (region2.region_code like 输入.end_region_code or + region2.region_name like 输入.end_region_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.point_status = '00' + AND point.lock_type = '00' + AND point.is_used = '1' + AND point.is_delete = '0' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java b/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java new file mode 100644 index 000000000..42b566f83 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java @@ -0,0 +1,84 @@ + +package org.nl.wms.st.outbill.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.nl.wms.st.outbill.service.RegionioOutService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Liuxy + * @date 2022-08-11 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "区域出库管理") +@RequestMapping("/api/regionioOut") +@Slf4j +public class RegionioOutController { + + private final RegionioOutService regionioOutService; + + @GetMapping + @Log("查询区域出库") + @ApiOperation("查询区域出库") + //@PreAuthorize("@el.check('regionio:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(regionioOutService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增区域出库") + @ApiOperation("新增区域出库") + //@PreAuthorize("@el.check('regionio:add')") + public ResponseEntity create(@Validated @RequestBody RegionioDto dto) { + regionioOutService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域入库") + @ApiOperation("修改区域入库") + //@PreAuthorize("@el.check('regionio:edit')") + public ResponseEntity update(@Validated @RequestBody RegionioDto dto) { + regionioOutService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域出库") + @ApiOperation("删除区域出库") + //@PreAuthorize("@el.check('regionio:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + regionioOutService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("生成任务") + @ApiOperation("生成任务") + @PostMapping("/createTask") + public ResponseEntity createTask(@RequestBody JSONObject jsonObject) { + regionioOutService.createTask(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getMaterial") + @Log("选择物料") + @ApiOperation("选择物料") + public ResponseEntity getMaterial(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(regionioOutService.getMaterial(whereJson,page),HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/RegionioOutService.java b/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/RegionioOutService.java new file mode 100644 index 000000000..9fc2b9d7f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/RegionioOutService.java @@ -0,0 +1,87 @@ + +package org.nl.wms.st.outbill.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-11 + **/ +public interface RegionioOutService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param qty_unit_id ID + * @return Regionio + */ + RegionioDto findById(Long qty_unit_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Regionio + */ + RegionioDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(RegionioDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(RegionioDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 生成任务 + * + * @param jsonObject / + */ + void createTask(JSONObject jsonObject); + + /** + * 选择出库物料 + * + * @param whereJson 条件参数 + * @return List + */ + Map getMaterial(Map whereJson, Pageable page); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java new file mode 100644 index 000000000..c10d88f7b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java @@ -0,0 +1,226 @@ + +package org.nl.wms.st.outbill.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 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.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.wms.sch.tasks.CallMaterialTask; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.nl.wms.st.outbill.service.RegionioOutService; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** +* @description 服务实现 +* @author Liuxy +* @date 2022-08-11 +**/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RegionioOutServiceImpl implements RegionioOutService { + + @Override + public Map queryAll(Map whereJson, Pageable page){ + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); + String material_code = MapUtil.getStr(whereJson, "material_code"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); + String start_point_code = MapUtil.getStr(whereJson, "start_point_code"); + String end_point_code = MapUtil.getStr(whereJson, "end_point_code"); + String start_region_code = MapUtil.getStr(whereJson, "start_region_code"); + String end_region_code = MapUtil.getStr(whereJson, "end_region_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + map.put("bill_status",MapUtil.getStr(whereJson, "bill_status")); + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code", bill_code + "%"); + if (ObjectUtil.isNotEmpty(vehicle_code)) map.put("vehicle_code", vehicle_code + "%"); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", material_code + "%"); + if (ObjectUtil.isNotEmpty(pcsn)) map.put("pcsn", pcsn + "%"); + if (ObjectUtil.isNotEmpty(start_point_code)) map.put("start_point_code", start_point_code + "%"); + if (ObjectUtil.isNotEmpty(end_point_code)) map.put("end_point_code", end_point_code + "%"); + if (ObjectUtil.isNotEmpty(start_region_code)) map.put("start_region_code", start_region_code + "%"); + if (ObjectUtil.isNotEmpty(end_region_code)) map.put("end_region_code", end_region_code + "%"); + + JSONObject json = WQL.getWO("ST_REGION_OUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ios.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson){ + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionioDto.class); + return null; + } + + @Override + public RegionioDto findById(Long qty_unit_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("qty_unit_id = '" + qty_unit_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + public RegionioDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionioDto dto) { + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + String bill_code = CodeUtil.getNewCode("OUT_STORE_CODE"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setBill_code(bill_code); + dto.setIo_type("1"); + dto.setBill_status("10"); + dto.setCreate_mode("01"); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionioDto dto) { + RegionioDto entity = this.findById(dto.getQty_unit_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setBill_status("10"); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + for (Long iostorinv_id: ids) { + JSONObject param = wo.query("iostorinv_id = '" + String.valueOf(iostorinv_id) + "'").uniqueResult(0); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createTask(JSONObject jsonObject) { + String iostorinv_id = jsonObject.getString("iostorinv_id"); + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject jsonIn = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + + // 准备参数 并调用入库处理类中的创建任务方法 + JSONObject form = new JSONObject(); + form.put("vehicle_code", jsonIn.getString("vehicle_code")); + form.put("start_point_code", jsonIn.getString("start_point_code")); + form.put("next_point_code", jsonIn.getString("end_point_code")); + form.put("material_id", jsonIn.getString("material_id")); + form.put("qty", jsonIn.getString("qty")); + form.put("cust_id", jsonIn.getString("cust_id")); + form.put("create_mode", jsonIn.getString("create_mode")); + form.put("pcsn", jsonIn.getString("pcsn")); + form.put("iostorinv_id", iostorinv_id); + CallMaterialTask callMaterialTask = new CallMaterialTask(); + String task_id = callMaterialTask.createTask(form); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("update_optid", SecurityUtils.getCurrentUserId()); + json.put("update_optname", SecurityUtils.getCurrentNickName()); + json.put("update_time", DateUtil.now()); + json.put("bill_status", "20"); + wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); + } + + @Override + public Map getMaterial(Map whereJson, Pageable page) { + String material_code = MapUtil.getStr(whereJson, "material_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "2"); + map.put("region_id", MapUtil.getStr(whereJson, "region_id")); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code",material_code); + + JSONObject json = WQL.getWO("ST_REGION_OUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.instorage_time DESC"); + return json; + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql b/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql new file mode 100644 index 000000000..81c766228 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql @@ -0,0 +1,180 @@ +[交易说明] + 交易名: 区域入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.bill_code TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.material_id TYPEAS s_string + 输入.pcsn TYPEAS s_string + 输入.start_point_code TYPEAS s_string + 输入.end_point_code TYPEAS s_string + 输入.start_region_code TYPEAS s_string + 输入.end_region_code TYPEAS s_string + 输入.region_id TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + 输入.region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + ios.*, + mater.material_code, + mater.material_name, + unit.unit_name, + region1.region_name AS start_region_name, + region2.region_name AS end_region_name, + point1.point_name AS start_point_name, + point2.point_name AS end_point_name + FROM + ST_IVT_regionIO ios + LEFT JOIN md_me_materialbase mater ON mater.material_id = ios.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ios.qty_unit_id + LEFT JOIN SCH_BASE_Region region1 ON region1.region_id = ios.start_region_id + LEFT JOIN SCH_BASE_Region region2 ON region2.region_id = ios.end_region_id + LEFT JOIN sch_base_point point1 ON point1.point_code = ios.start_point_code + LEFT JOIN sch_base_point point2 ON point2.point_code = ios.end_point_code + WHERE + ios.is_delete = '0' + AND ios.io_type = '1' + + OPTION 输入.bill_code <> "" + ios.bill_code like 输入.bill_code + ENDOPTION + + OPTION 输入.bill_status <> "" + ios.bill_status = 输入.bill_status + ENDOPTION + + OPTION 输入.vehicle_code <> "" + ios.vehicle_code like 输入.vehicle_code + ENDOPTION + + OPTION 输入.pcsn <> "" + ios.pcsn like 输入.pcsn + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + + OPTION 输入.start_point_code <> "" + (point1.point_code like 输入.start_point_code or + point1.point_name like 输入.start_point_code) + ENDOPTION + + OPTION 输入.end_point_code <> "" + (point2.point_code like 输入.end_point_code or + point2.point_name like 输入.end_point_code) + ENDOPTION + + OPTION 输入.start_region_code <> "" + (region1.region_code like 输入.start_region_code or + region1.region_name like 输入.start_region_code) + ENDOPTION + + OPTION 输入.end_region_code <> "" + (region2.region_code like 输入.end_region_code or + region2.region_name like 输入.end_region_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + ivt.*, + mater.material_code, + mater.material_name, + mater.material_spec, + mater.material_model, + unit.unit_name, + point.vehicle_code + FROM + ST_IVT_StructIvt ivt + LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + WHERE + 1=1 + + OPTION 输入.region_id <> "" + point.region_id = 输入.region_id + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "3" + PAGEQUERY + SELECT + ivt.* + FROM + ST_IVT_StructIvt ivt + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + LEFT JOIN SCH_BASE_Region region ON region.region_id = point.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '02' + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.material_id <> "" + ivt.material_id = 输入.material_id + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/rest/InEmptyvehiclerecordController.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/rest/InEmptyvehiclerecordController.java new file mode 100644 index 000000000..ff0fce01c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/rest/InEmptyvehiclerecordController.java @@ -0,0 +1,77 @@ + +package org.nl.wms.st.vehiclebill.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.st.vehiclebill.service.InEmptyvehiclerecordService; +import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Liuxy + * @date 2022-08-12 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "空载具入库管理") +@RequestMapping("/api/inemptyvehicle") +@Slf4j +public class InEmptyvehiclerecordController { + + private final InEmptyvehiclerecordService inEmptyvehiclerecordService; + + @GetMapping + @Log("查询空载具入库") + @ApiOperation("查询空载具入库") + //@PreAuthorize("@el.check('emptyvehiclerecord:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(inEmptyvehiclerecordService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增空载具入库") + @ApiOperation("新增空载具入库") + //@PreAuthorize("@el.check('emptyvehiclerecord:add')") + public ResponseEntity create(@Validated @RequestBody EmptyvehiclerecordDto dto) { + inEmptyvehiclerecordService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改空载具入库") + @ApiOperation("修改空载具入库") + //@PreAuthorize("@el.check('emptyvehiclerecord:edit')") + public ResponseEntity update(@Validated @RequestBody EmptyvehiclerecordDto dto) { + inEmptyvehiclerecordService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除空载具入库") + @ApiOperation("删除空载具入库") + //@PreAuthorize("@el.check('emptyvehiclerecord:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + inEmptyvehiclerecordService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("生成任务") + @ApiOperation("生成任务") + @PostMapping("/createTask") + public ResponseEntity createTask(@RequestBody JSONObject whereJson) { + inEmptyvehiclerecordService.createTask(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/rest/OutEmptyvehiclerecordController.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/rest/OutEmptyvehiclerecordController.java new file mode 100644 index 000000000..96b9c1b05 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/rest/OutEmptyvehiclerecordController.java @@ -0,0 +1,77 @@ + +package org.nl.wms.st.vehiclebill.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.st.vehiclebill.service.OutEmptyvehiclerecordService; +import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Liuxy + * @date 2022-08-12 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "空载具出库管理") +@RequestMapping("/api/outemptyvehicle") +@Slf4j +public class OutEmptyvehiclerecordController { + + private final OutEmptyvehiclerecordService outEmptyvehiclerecordService; + + @GetMapping + @Log("查询空载具出库") + @ApiOperation("查询空载具出库") + //@PreAuthorize("@el.check('emptyvehiclerecord:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(outEmptyvehiclerecordService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增空载具出库") + @ApiOperation("新增空载具出库") + //@PreAuthorize("@el.check('emptyvehiclerecord:add')") + public ResponseEntity create(@Validated @RequestBody EmptyvehiclerecordDto dto) { + outEmptyvehiclerecordService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改空载具出库") + @ApiOperation("修改空载具出库") + //@PreAuthorize("@el.check('emptyvehiclerecord:edit')") + public ResponseEntity update(@Validated @RequestBody EmptyvehiclerecordDto dto) { + outEmptyvehiclerecordService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除空载具出库") + @ApiOperation("删除空载具出库") + //@PreAuthorize("@el.check('emptyvehiclerecord:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + outEmptyvehiclerecordService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("生成任务") + @ApiOperation("生成任务") + @PostMapping("/createTask") + public ResponseEntity createTask(@RequestBody JSONObject whereJson) { + outEmptyvehiclerecordService.createTask(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/InEmptyvehiclerecordService.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/InEmptyvehiclerecordService.java new file mode 100644 index 000000000..fc1bc34cb --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/InEmptyvehiclerecordService.java @@ -0,0 +1,79 @@ + +package org.nl.wms.st.vehiclebill.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-12 + **/ +public interface InEmptyvehiclerecordService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param record_uuid ID + * @return Emptyvehiclerecord + */ + EmptyvehiclerecordDto findById(Long record_uuid); + + /** + * 根据编码查询 + * + * @param code code + * @return Emptyvehiclerecord + */ + EmptyvehiclerecordDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(EmptyvehiclerecordDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(EmptyvehiclerecordDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 生成任务 + * + * @param whereJson / + */ + void createTask(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/OutEmptyvehiclerecordService.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/OutEmptyvehiclerecordService.java new file mode 100644 index 000000000..d1365c82a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/OutEmptyvehiclerecordService.java @@ -0,0 +1,79 @@ + +package org.nl.wms.st.vehiclebill.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-12 + **/ +public interface OutEmptyvehiclerecordService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param record_uuid ID + * @return Emptyvehiclerecord + */ + EmptyvehiclerecordDto findById(Long record_uuid); + + /** + * 根据编码查询 + * + * @param code code + * @return Emptyvehiclerecord + */ + EmptyvehiclerecordDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(EmptyvehiclerecordDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(EmptyvehiclerecordDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 生成任务 + * + * @param whereJson / + */ + void createTask(JSONObject whereJson); +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/dto/EmptyvehiclerecordDto.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/dto/EmptyvehiclerecordDto.java new file mode 100644 index 000000000..d79646783 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/dto/EmptyvehiclerecordDto.java @@ -0,0 +1,109 @@ +package org.nl.wms.st.vehiclebill.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; + +/** + * @author Liuxy + * @description / + * @date 2022-08-12 + **/ +@Data +public class EmptyvehiclerecordDto implements Serializable { + + /** 记录标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long record_uuid; + + /** + * 单据编号 + */ + private String bill_code; + + /** + * 单据类型 + */ + private String io_type; + + /** + * 单据状态 + */ + private String bill_status; + + /** + * 载具数量 + */ + private BigDecimal vehicle_qty; + + /** + * 起始点位 + */ + private String start_point_code; + + /** + * 下一点位 + */ + private String next_point_code; + + /** + * 起始区域 + */ + private Long start_region_id; + + /** + * 终点区域 + */ + private Long end_region_id; + + /** + * 任务标识 + */ + private Long task_uuid; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 是否删除 + */ + private String is_delete; +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/impl/InEmptyvehiclerecordServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/impl/InEmptyvehiclerecordServiceImpl.java new file mode 100644 index 000000000..198188eb0 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/impl/InEmptyvehiclerecordServiceImpl.java @@ -0,0 +1,202 @@ + +package org.nl.wms.st.vehiclebill.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 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.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.tasks.SendEmpVehicleTask; +import org.nl.wms.st.vehiclebill.service.InEmptyvehiclerecordService; +import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2022-08-12 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class InEmptyvehiclerecordServiceImpl implements InEmptyvehiclerecordService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code",bill_code + "%"); + + JSONObject json = WQL.getWO("ST_VEHICLE_IN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "st.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(EmptyvehiclerecordDto.class); + return null; + } + + @Override + public EmptyvehiclerecordDto findById(Long record_uuid) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = wo.query("record_uuid = '" + record_uuid + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(EmptyvehiclerecordDto.class); + } + return null; + } + + @Override + public EmptyvehiclerecordDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(EmptyvehiclerecordDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(EmptyvehiclerecordDto dto) { + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String start_point_code = dto.getStart_point_code(); + String next_point_code = dto.getNext_point_code(); + // 判断起点是否为空! 入库起点不能为空 + if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("起点不能为空"); + // 根据点位编码找到对应的所属区域 + Long start_region_id = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0).getLongValue("region_id"); + if (ObjectUtil.isNotEmpty(next_point_code)) { + Long end_region_id = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0).getLongValue("region_id"); + dto.setEnd_region_id(end_region_id); + } + + dto.setRecord_uuid(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setBill_code(CodeUtil.getNewCode("KZJ_BILL_CODE")); + dto.setIo_type("0"); + dto.setBill_status("10"); + dto.setStart_region_id(start_region_id); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(EmptyvehiclerecordDto dto) { + EmptyvehiclerecordDto entity = this.findById(dto.getRecord_uuid()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String start_point_code = dto.getStart_point_code(); + String next_point_code = dto.getNext_point_code(); + // 判断起点是否为空! 入库起点不能为空 + if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("起点不能为空"); + // 根据点位编码找到对应的所属区域 + Long start_region_id = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0).getLongValue("region_id"); + if (ObjectUtil.isNotEmpty(next_point_code)) { + Long end_region_id = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0).getLongValue("region_id"); + dto.setEnd_region_id(end_region_id); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setStart_region_id(start_region_id); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + for (Long record_uuid : ids) { + JSONObject param = new JSONObject(); + param.put("record_uuid", String.valueOf(record_uuid)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createTask(JSONObject whereJson) { + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + + JSONObject jsonEmp = empTab.query("record_uuid = '" + whereJson.getString("record_uuid") + "'").uniqueResult(0); + // 准备参数 调用空载具处理类中的 创建任务的方法 + JSONObject param = new JSONObject(); + param.put("start_point_code", jsonEmp.getString("start_point_code")); + param.put("next_point_code", jsonEmp.getString("next_point_code")); + param.put("qty", jsonEmp.getString("vehicle_qty")); + param.put("record_uuid", jsonEmp.getString("record_uuid")); + + String task_id = new SendEmpVehicleTask().createTask(param); + // 更新空载具表中的任务id和单据状态 + PointService pointDto = SpringContextHolder.getBean(PointService.class); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + jsonEmp.put("task_uuid", Long.valueOf(task_id)); + jsonEmp.put("bill_status","20"); + jsonEmp.put("next_point_code",jsonTask.getString("next_point_code")); + jsonEmp.put("end_region_id",pointDto.findByCode(jsonTask.getString("next_point_code")).getRegion_id()); + jsonEmp.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonEmp.put("update_optname", SecurityUtils.getCurrentNickName()); + jsonEmp.put("update_time", DateUtil.now()); + empTab.update(jsonEmp); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/impl/OutEmptyvehiclerecordServiceImpl.java b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/impl/OutEmptyvehiclerecordServiceImpl.java new file mode 100644 index 000000000..bad1efc36 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/service/impl/OutEmptyvehiclerecordServiceImpl.java @@ -0,0 +1,202 @@ + +package org.nl.wms.st.vehiclebill.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 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.modules.system.util.CodeUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.tasks.CallEmpVehicleTask; +import org.nl.wms.st.vehiclebill.service.OutEmptyvehiclerecordService; +import org.nl.wms.st.vehiclebill.service.dto.EmptyvehiclerecordDto; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2022-08-12 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class OutEmptyvehiclerecordServiceImpl implements OutEmptyvehiclerecordService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code",bill_code + "%"); + + JSONObject json = WQL.getWO("ST_VEHICLE_OUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "st.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(EmptyvehiclerecordDto.class); + return null; + } + + @Override + public EmptyvehiclerecordDto findById(Long record_uuid) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = wo.query("record_uuid = '" + record_uuid + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(EmptyvehiclerecordDto.class); + } + return null; + } + + @Override + public EmptyvehiclerecordDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(EmptyvehiclerecordDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(EmptyvehiclerecordDto dto) { + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + String start_point_code = dto.getStart_point_code(); + String next_point_code = dto.getNext_point_code(); + // 判断终点是否为空! 出库终点不能为空 + if (ObjectUtil.isEmpty(next_point_code)) throw new BadRequestException("终点不能为空"); + // 根据点位编码找到对应的所属区域 + Long end_region_id = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0).getLongValue("region_id"); + if (ObjectUtil.isNotEmpty(start_point_code)) { + Long start_region_id = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0).getLongValue("region_id"); + dto.setStart_region_id(start_region_id); + } + + dto.setRecord_uuid(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setBill_code(CodeUtil.getNewCode("KZJ_BILL_CODE")); + dto.setIo_type("1"); + dto.setBill_status("10"); + dto.setEnd_region_id(end_region_id); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(EmptyvehiclerecordDto dto) { + EmptyvehiclerecordDto entity = this.findById(dto.getRecord_uuid()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String start_point_code = dto.getStart_point_code(); + String next_point_code = dto.getNext_point_code(); + // 判断起点是否为空! 入库起点不能为空 + if (ObjectUtil.isEmpty(next_point_code)) throw new BadRequestException("终点不能为空"); + // 根据点位编码找到对应的所属区域 + Long end_region_id = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0).getLongValue("region_id"); + if (ObjectUtil.isNotEmpty(start_point_code)) { + Long start_region_id = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0).getLongValue("region_id"); + dto.setStart_region_id(start_region_id); + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setStart_region_id(end_region_id); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_emptyvehiclerecord"); + for (Long record_uuid : ids) { + JSONObject param = new JSONObject(); + param.put("record_uuid", String.valueOf(record_uuid)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createTask(JSONObject whereJson) { + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord"); + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + + JSONObject jsonEmp = empTab.query("record_uuid = '" + whereJson.getString("record_uuid") + "'").uniqueResult(0); + // 准备参数 调用空载具处理类中的 创建任务的方法 + JSONObject param = new JSONObject(); + param.put("start_point_code", jsonEmp.getString("start_point_code")); + param.put("next_point_code", jsonEmp.getString("next_point_code")); + param.put("qty", jsonEmp.getString("vehicle_qty")); + param.put("record_uuid", jsonEmp.getString("record_uuid")); + + String task_id = new CallEmpVehicleTask().createTask(param); + // 更新空载具表中的任务id和单据状态 + PointService pointDto = SpringContextHolder.getBean(PointService.class); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + jsonEmp.put("task_uuid", Long.valueOf(task_id)); + jsonEmp.put("bill_status","20"); + jsonEmp.put("start_point_code",jsonTask.getString("start_point_code")); + jsonEmp.put("start_region_id",pointDto.findByCode(jsonTask.getString("start_point_code")).getRegion_id()); + jsonEmp.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonEmp.put("update_optname", SecurityUtils.getCurrentNickName()); + jsonEmp.put("update_time", DateUtil.now()); + empTab.update(jsonEmp); + } + +} diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_01.wql b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_01.wql new file mode 100644 index 000000000..74724e57d --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_01.wql @@ -0,0 +1,61 @@ +[交易说明] + 交易名: 空载具入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.bill_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + st.*, + region1.region_name AS start_region_name, + region2.region_name AS endt_region_name + FROM + st_ivt_EmptyVehicleRecord st + LEFT JOIN sch_base_region region1 ON st.start_region_id = region1.region_id + LEFT JOIN sch_base_region region2 ON st.end_region_id = region2.region_id + WHERE + st.is_delete = '0' + AND st.io_type = '0' + + OPTION 输入.bill_code <> "" + st.bill_code like 输入.bill_code + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql new file mode 100644 index 000000000..bdbbfb47a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql @@ -0,0 +1,108 @@ +[交易说明] + 交易名: 空载具入库业务 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.vehicle_qty TYPEAS s_string + 输入.region_code TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND (12 - IFNULL(point.vehicle_qty,0)) >= 输入.vehicle_qty + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + order by point.vehicle_qty DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND IFNULL(point.vehicle_qty,0) = '0' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.vehicle_qty DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '00' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_01.wql b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_01.wql new file mode 100644 index 000000000..7c4919ce1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_01.wql @@ -0,0 +1,61 @@ +[交易说明] + 交易名: 空载具出库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.bill_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + st.*, + region1.region_name AS start_region_name, + region2.region_name AS endt_region_name + FROM + st_ivt_EmptyVehicleRecord st + LEFT JOIN sch_base_region region1 ON st.start_region_id = region1.region_id + LEFT JOIN sch_base_region region2 ON st.end_region_id = region2.region_id + WHERE + st.is_delete = '0' + AND st.io_type = '1' + + OPTION 输入.bill_code <> "" + st.bill_code like 输入.bill_code + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql new file mode 100644 index 000000000..c49d544f9 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql @@ -0,0 +1,114 @@ +[交易说明] + 交易名: 空载具出库业务 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.vehicle_qty TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + 输入.region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '01' + AND IFNULL(point.vehicle_qty,0) >= 输入.vehicle_qty + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + order by point.vehicle_qty ASC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '01' + AND IFNULL(point.vehicle_qty,0) == 输入.vehicle_qty + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '00' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF diff --git a/nladmin-system/src/main/resources/config/application-dev.yml b/nladmin-system/src/main/resources/config/application-dev.yml index 29b41e4db..d1e0057f3 100644 --- a/nladmin-system/src/main/resources/config/application-dev.yml +++ b/nladmin-system/src/main/resources/config/application-dev.yml @@ -10,6 +10,9 @@ spring: # url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} # username: ${DB_USER:root} + url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:lzhl_one_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true +# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:nladmin}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:root} password: ${DB_PWD:P@ssw0rd} # password: ${DB_PWD:12356} # 初始连接数 diff --git a/nladmin-system/src/main/resources/template/generator/admin/Controller.ftl b/nladmin-system/src/main/resources/template/generator/admin/Controller.ftl index 2e211ff26..53f849f0b 100644 --- a/nladmin-system/src/main/resources/template/generator/admin/Controller.ftl +++ b/nladmin-system/src/main/resources/template/generator/admin/Controller.ftl @@ -4,7 +4,7 @@ package ${package}.rest; import org.springframework.data.domain.Pageable; import lombok.RequiredArgsConstructor; -import org.nl.annotation.Log; +import org.nl.modules.logging.annotation.Log; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import cn.dev33.satoken.annotation.SaCheckPermission; diff --git a/nladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl b/nladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl index b43ef85f7..6d4cfc703 100644 --- a/nladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl +++ b/nladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl @@ -14,10 +14,10 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import org.nl.utils.SecurityUtils; -import org.nl.wql.core.bean.ResultBean; -import org.nl.wql.core.bean.WQLObject; -import org.nl.wql.util.WqlUtil; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; import lombok.extern.slf4j.Slf4j; import cn.hutool.core.util.ObjectUtil; @@ -71,7 +71,7 @@ public List<${className}Dto> queryAll(Map whereJson){ @Transactional(rollbackFor = Exception.class) public void create(${className}Dto dto) { Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); + String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); dto.set${pkChangeColName ? cap_first }(IdUtil.getSnowflake(1, 1).nextId()); @@ -94,7 +94,7 @@ public List<${className}Dto> queryAll(Map whereJson){ if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); + String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); dto.setUpdate_time(now); @@ -110,7 +110,7 @@ public List<${className}Dto> queryAll(Map whereJson){ @Transactional(rollbackFor = Exception.class) public void deleteAll(${pkColumnType}[] ids) { Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); + String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); WQLObject wo = WQLObject.getWQLObject("${tableName}"); diff --git a/nladmin-system/src/main/resources/template/generator/front/index.ftl b/nladmin-system/src/main/resources/template/generator/front/index.ftl index fa74766af..1c4665fed 100644 --- a/nladmin-system/src/main/resources/template/generator/front/index.ftl +++ b/nladmin-system/src/main/resources/template/generator/front/index.ftl @@ -113,14 +113,13 @@ + + diff --git a/nladmin-ui/src/views/wms/basedata/master/customer/customerbase.js b/nladmin-ui/src/views/wms/basedata/master/customer/customerbase.js new file mode 100644 index 000000000..6523c0388 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/customer/customerbase.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/customerbase', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/customerbase/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/customerbase', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/nladmin-ui/src/views/wms/basedata/master/customer/index.vue b/nladmin-ui/src/views/wms/basedata/master/customer/index.vue new file mode 100644 index 000000000..9facbe86b --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/customer/index.vue @@ -0,0 +1,345 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/master/material/index.vue b/nladmin-ui/src/views/wms/basedata/master/material/index.vue new file mode 100644 index 000000000..46c32a441 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/material/index.vue @@ -0,0 +1,437 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js b/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js new file mode 100644 index 000000000..719b2a112 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/Materialbase', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/Materialbase/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/Materialbase', + method: 'put', + data + }) +} + +export function getMaterOptType(data) { + return request({ + url: 'api/Materialbase/getMaterOptType', + method: 'post', + data + }) +} + +export function isAlongMaterType(data) { + return request({ + url: 'api/Materialbase/isAlongMaterType', + method: 'post', + data + }) +} + +export function synchronize(data) { + return request({ + url: 'api/Materialbase/synchronize', + method: 'post', + data + }) +} + +export function getProductSeries() { + return request({ + url: 'api/Materialbase/getProductSeries', + method: 'get' + }) +} + +export default { add, edit, del, getMaterOptType, isAlongMaterType, synchronize, getProductSeries } diff --git a/nladmin-ui/src/views/wms/basedata/master/measure/index.vue b/nladmin-ui/src/views/wms/basedata/master/measure/index.vue new file mode 100644 index 000000000..e54da575d --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/measure/index.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/master/measure/mdPbMeasureunit.js b/nladmin-ui/src/views/wms/basedata/master/measure/mdPbMeasureunit.js new file mode 100644 index 000000000..ae700b992 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/measure/mdPbMeasureunit.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/mdPbMeasureunit', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/mdPbMeasureunit/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/mdPbMeasureunit', + method: 'put', + data + }) +} + +export function getUnit(params) { + return request({ + url: 'api/mdPbMeasureunit/getUnit', + method: 'get', + params + }) +} + +export default { add, edit, del, getUnit } diff --git a/nladmin-ui/src/views/wms/basedata/master/storagevehicleinfo/index.vue b/nladmin-ui/src/views/wms/basedata/master/storagevehicleinfo/index.vue new file mode 100644 index 000000000..327856bc6 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/storagevehicleinfo/index.vue @@ -0,0 +1,366 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/master/storagevehicleinfo/storagevehicleinfo.js b/nladmin-ui/src/views/wms/basedata/master/storagevehicleinfo/storagevehicleinfo.js new file mode 100644 index 000000000..63fdfc688 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/storagevehicleinfo/storagevehicleinfo.js @@ -0,0 +1,42 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/storagevehicleinfo', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/storagevehicleinfo/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/storagevehicleinfo', + method: 'put', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/storagevehicleinfo/changeActive', + method: 'put', + data + }) +} + +export function getVehicle(code) { + return request({ + url: 'api/storagevehicleinfo/getVehicle/' + code, + method: 'get' + }) +} + +export default { add, edit, del, changeActive, getVehicle } diff --git a/nladmin-ui/src/views/wms/basedata/master/supp/index.vue b/nladmin-ui/src/views/wms/basedata/master/supp/index.vue new file mode 100644 index 000000000..d01b6b761 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/supp/index.vue @@ -0,0 +1,344 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/master/supp/supplierbase.js b/nladmin-ui/src/views/wms/basedata/master/supp/supplierbase.js new file mode 100644 index 000000000..d04cf8b2b --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/master/supp/supplierbase.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/supplierbase', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/supplierbase/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/supplierbase', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue b/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue new file mode 100644 index 000000000..895d698b7 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/st/ivt/structivt.js b/nladmin-ui/src/views/wms/basedata/st/ivt/structivt.js new file mode 100644 index 000000000..2e3f029f0 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/ivt/structivt.js @@ -0,0 +1,49 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/structivt', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/structivt/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/structivt', + method: 'put', + data + }) +} + +export function getStruct() { + return request({ + url: 'api/structivt/getStruct', + method: 'get' + }) +} + +export function getStructById(data) { + return request({ + url: 'api/structivt/getStructById', + method: 'post', + data + }) +} + +export function getUnits() { + return request({ + url: 'api/structivt/getUnits', + method: 'get' + }) +} + +export default { add, edit, del, getStruct, getStructById, getUnits } diff --git a/nladmin-ui/src/views/wms/basedata/st/sect/index.vue b/nladmin-ui/src/views/wms/basedata/st/sect/index.vue new file mode 100644 index 000000000..506b7d0f2 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/sect/index.vue @@ -0,0 +1,324 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/st/sect/sectattr.js b/nladmin-ui/src/views/wms/basedata/st/sect/sectattr.js new file mode 100644 index 000000000..18b511af7 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/sect/sectattr.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/sectattr', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/sectattr/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/sectattr', + method: 'put', + data + }) +} + +export function getSect(params) { + return request({ + url: 'api/sectattr/getSect', + method: 'get', + params + }) +} + +export function changeActive(data) { + return request({ + url: 'api/sectattr/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, getSect, changeActive } diff --git a/nladmin-ui/src/views/wms/basedata/st/stor/index.vue b/nladmin-ui/src/views/wms/basedata/st/stor/index.vue new file mode 100644 index 000000000..7fab20ea9 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/stor/index.vue @@ -0,0 +1,400 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/st/stor/storattr.js b/nladmin-ui/src/views/wms/basedata/st/stor/storattr.js new file mode 100644 index 000000000..747d12b52 --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/stor/storattr.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/Storattr', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/Storattr/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/Storattr', + method: 'put', + data + }) +} + +export function getStor(params) { + return request({ + url: 'api/Storattr/getStor', + method: 'get', + params + }) +} + +export function changeActive(data) { + return request({ + url: 'api/Storattr/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, getStor, changeActive } diff --git a/nladmin-ui/src/views/wms/basedata/st/struct/index.vue b/nladmin-ui/src/views/wms/basedata/st/struct/index.vue new file mode 100644 index 000000000..7767e230c --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/struct/index.vue @@ -0,0 +1,457 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js b/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js new file mode 100644 index 000000000..fbcd30c8e --- /dev/null +++ b/nladmin-ui/src/views/wms/basedata/st/struct/structattr.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/structattr', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/structattr/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/structattr', + method: 'put', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/structattr/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, changeActive } diff --git a/nladmin-ui/src/views/wms/mps/device/device.js b/nladmin-ui/src/views/wms/mps/device/device.js new file mode 100644 index 000000000..b9017553f --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/device/device.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/device', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/device/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/device', + method: 'put', + data + }) +} + +export function getWorkprocedure() { + return request({ + url: 'api/device/getWorkprocedure', + method: 'get' + }) +} + +export function getItemByDevice(data) { + return request({ + url: 'api/device/getItemByDevice', + method: 'post', + data + }) +} + +export function savaDeviceItem(data) { + return request({ + url: 'api/device/savaDeviceItem', + method: 'post', + data + }) +} + +export function getItemByDeviceId(data) { + return request({ + url: 'api/device/getItemByDeviceId', + method: 'post', + data + }) +} + +export function copyAdd(data) { + return request({ + url: 'api/device/copyAdd', + method: 'post', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/device/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, getWorkprocedure, getItemByDeviceId, copyAdd, changeActive } diff --git a/nladmin-ui/src/views/wms/mps/device/index.vue b/nladmin-ui/src/views/wms/mps/device/index.vue new file mode 100644 index 000000000..bd3e6a59b --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/device/index.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/item/deviceitem.js b/nladmin-ui/src/views/wms/mps/item/deviceitem.js new file mode 100644 index 000000000..287219b3b --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/item/deviceitem.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/deviceitem', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/deviceitem/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/deviceitem', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/nladmin-ui/src/views/wms/mps/item/index.vue b/nladmin-ui/src/views/wms/mps/item/index.vue new file mode 100644 index 000000000..312d2f076 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/item/index.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/personcorrdevice/DevicesDialog.vue b/nladmin-ui/src/views/wms/mps/personcorrdevice/DevicesDialog.vue new file mode 100644 index 000000000..7a6ebf466 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/personcorrdevice/DevicesDialog.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/personcorrdevice/SelectDeviceDialog.vue b/nladmin-ui/src/views/wms/mps/personcorrdevice/SelectDeviceDialog.vue new file mode 100644 index 000000000..464acc7ac --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/personcorrdevice/SelectDeviceDialog.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/personcorrdevice/SelectPeersonDialog.vue b/nladmin-ui/src/views/wms/mps/personcorrdevice/SelectPeersonDialog.vue new file mode 100644 index 000000000..30230e9fb --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/personcorrdevice/SelectPeersonDialog.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/personcorrdevice/index.vue b/nladmin-ui/src/views/wms/mps/personcorrdevice/index.vue new file mode 100644 index 000000000..f30f60865 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/personcorrdevice/index.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/personcorrdevice/personcorrdevice.js b/nladmin-ui/src/views/wms/mps/personcorrdevice/personcorrdevice.js new file mode 100644 index 000000000..b6af73072 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/personcorrdevice/personcorrdevice.js @@ -0,0 +1,67 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/personcorrdevice', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/personcorrdevice/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/personcorrdevice', + method: 'put', + data + }) +} + +export function addPersons(data) { + return request({ + url: 'api/personcorrdevice/addPersons', + method: 'post', + data + }) +} + +export function getHeader(data) { + return request({ + url: 'api/personcorrdevice/getHeader', + method: 'post', + data + }) +} + +export function getDeviceIdByUserId(data) { + return request({ + url: 'api/personcorrdevice/getDeviceIdByUserId', + method: 'post', + data + }) +} + +export function addDevices(data) { + return request({ + url: 'api/personcorrdevice/addDevices', + method: 'post', + data + }) +} + +export function deleteRow(data) { + return request({ + url: 'api/personcorrdevice/deleteRow', + method: 'delete', + data + }) +} + +export default { add, edit, del, addPersons, getHeader, getDeviceIdByUserId, deleteRow, addDevices } diff --git a/nladmin-ui/src/views/wms/mps/produce/OutMaterDialog.vue b/nladmin-ui/src/views/wms/mps/produce/OutMaterDialog.vue new file mode 100644 index 000000000..e630ff705 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/produce/OutMaterDialog.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/produce/ViewDialog.vue b/nladmin-ui/src/views/wms/mps/produce/ViewDialog.vue new file mode 100644 index 000000000..edfd79cde --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/produce/ViewDialog.vue @@ -0,0 +1,383 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/produce/bigScreen.vue b/nladmin-ui/src/views/wms/mps/produce/bigScreen.vue new file mode 100644 index 000000000..6edb509d6 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/produce/bigScreen.vue @@ -0,0 +1,314 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/produce/index.vue b/nladmin-ui/src/views/wms/mps/produce/index.vue new file mode 100644 index 000000000..29f96482a --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/produce/index.vue @@ -0,0 +1,536 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/produce/outmaterial.js b/nladmin-ui/src/views/wms/mps/produce/outmaterial.js new file mode 100644 index 000000000..8ee469f48 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/produce/outmaterial.js @@ -0,0 +1,51 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/Materialbase', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/Materialbase/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/Materialbase', + method: 'put', + data + }) +} + +export function getMaterOptType(data) { + return request({ + url: 'api/Materialbase/getMaterOptType', + method: 'post', + data + }) +} + +export function isAlongMaterType(data) { + return request({ + url: 'api/Materialbase/isAlongMaterType', + method: 'post', + data + }) +} + +export function synchronize(data) { + return request({ + url: 'api/Materialbase/synchronize', + method: 'post', + data + }) +} + +export default { add, edit, del, getMaterOptType, isAlongMaterType, synchronize } diff --git a/nladmin-ui/src/views/wms/mps/produce/produceshiftorder.js b/nladmin-ui/src/views/wms/mps/produce/produceshiftorder.js new file mode 100644 index 000000000..fc7e636ad --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/produce/produceshiftorder.js @@ -0,0 +1,99 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/produceshiftorder', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/produceshiftorder/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/produceshiftorder', + method: 'put', + data + }) +} + +export function submits(data) { + return request({ + url: 'api/produceshiftorder/submits', + method: 'put', + data + }) +} + +export function getDevice(data) { + return request({ + url: 'api/produceshiftorder/getDevice', + method: 'post', + data + }) +} + +export function getTable(data) { + return request({ + url: 'api/produceshiftorder/getTable', + method: 'post', + data + }) +} + +export function openStart(data) { + return request({ + url: 'api/produceshiftorder/openStart', + method: 'post', + data + }) +} + +export function saveReport(data) { + return request({ + url: 'api/produceshiftorder/saveReport', + method: 'post', + data + }) +} + +export function finish(data) { + return request({ + url: 'api/produceshiftorder/finish', + method: 'post', + data + }) +} + +export function forceFinish(data) { + return request({ + url: 'api/produceshiftorder/forceFinish', + method: 'post', + data + }) +} + +export function getReportWork(data) { + return request({ + url: 'api/produceshiftorder/getReportWork', + method: 'post', + data + }) +} + +export function getDtl(data) { + return request({ + url: 'api/produceshiftorder/getDtl', + method: 'post', + data + }) +} + +export default { add, edit, del, submits, getDevice, getTable, openStart, saveReport, finish, getReportWork, forceFinish, getDtl } diff --git a/nladmin-ui/src/views/wms/mps/teamcorrperson/PersonDialog.vue b/nladmin-ui/src/views/wms/mps/teamcorrperson/PersonDialog.vue new file mode 100644 index 000000000..47f77eadd --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/teamcorrperson/PersonDialog.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/teamcorrperson/SelectPeersonDialog.vue b/nladmin-ui/src/views/wms/mps/teamcorrperson/SelectPeersonDialog.vue new file mode 100644 index 000000000..27381f9c8 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/teamcorrperson/SelectPeersonDialog.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/teamcorrperson/index.vue b/nladmin-ui/src/views/wms/mps/teamcorrperson/index.vue new file mode 100644 index 000000000..84628136c --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/teamcorrperson/index.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/mps/teamcorrperson/teamcorrperson.js b/nladmin-ui/src/views/wms/mps/teamcorrperson/teamcorrperson.js new file mode 100644 index 000000000..87dc011c9 --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/teamcorrperson/teamcorrperson.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/teamcorrperson', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/teamcorrperson/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/teamcorrperson', + method: 'put', + data + }) +} + +export function getPersonIdByTeamId(data) { + return request({ + url: 'api/teamcorrperson/getPersonIdByTeamId', + method: 'post', + data + }) +} + +export function addPersons(data) { + return request({ + url: 'api/teamcorrperson/addPersons', + method: 'post', + data + }) +} + +export default { add, edit, del, getPersonIdByTeamId, addPersons } diff --git a/nladmin-ui/src/views/wms/mps/teamcorrperson/workteam.js b/nladmin-ui/src/views/wms/mps/teamcorrperson/workteam.js new file mode 100644 index 000000000..824f1600d --- /dev/null +++ b/nladmin-ui/src/views/wms/mps/teamcorrperson/workteam.js @@ -0,0 +1,42 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/workteam', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/workteam/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/workteam', + method: 'put', + data + }) +} + +export function getClasssystem() { + return request({ + url: 'api/workteam/getClasssystem', + method: 'get' + }) +} + +export function changeActive(data) { + return request({ + url: 'api/workteam/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, getClasssystem, changeActive } diff --git a/nladmin-ui/src/views/wms/pdm/base/routing/AddDialog.vue b/nladmin-ui/src/views/wms/pdm/base/routing/AddDialog.vue new file mode 100644 index 000000000..ac7b8ddc6 --- /dev/null +++ b/nladmin-ui/src/views/wms/pdm/base/routing/AddDialog.vue @@ -0,0 +1,274 @@ + + + + + + + diff --git a/nladmin-ui/src/views/wms/pdm/base/routing/index.vue b/nladmin-ui/src/views/wms/pdm/base/routing/index.vue new file mode 100644 index 000000000..d7b0d999b --- /dev/null +++ b/nladmin-ui/src/views/wms/pdm/base/routing/index.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/pdm/base/routing/processroute.js b/nladmin-ui/src/views/wms/pdm/base/routing/processroute.js new file mode 100644 index 000000000..b28bd9c9e --- /dev/null +++ b/nladmin-ui/src/views/wms/pdm/base/routing/processroute.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/processroute', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/processroute/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/processroute', + method: 'put', + data + }) +} + +export function getWorkList() { + return request({ + url: 'api/processroute/getWorkList', + method: 'get' + }) +} + +export function getDtl(params) { + return request({ + url: 'api/processroute/getDtl', + method: 'get', + params + }) +} + +export function submit(data) { + return request({ + url: 'api/processroute/submit', + method: 'put', + data + }) +} + +export function CancelSubmit(data) { + return request({ + url: 'api/processroute/CancelSubmit', + method: 'put', + data + }) +} + +export default { add, edit, del, getWorkList, getDtl, submit, CancelSubmit } diff --git a/nladmin-ui/src/views/wms/pdm/base/workProcedure/index.vue b/nladmin-ui/src/views/wms/pdm/base/workProcedure/index.vue new file mode 100644 index 000000000..f29f90b4b --- /dev/null +++ b/nladmin-ui/src/views/wms/pdm/base/workProcedure/index.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/pdm/base/workProcedure/workProcedure.js b/nladmin-ui/src/views/wms/pdm/base/workProcedure/workProcedure.js new file mode 100644 index 000000000..3cc498fc3 --- /dev/null +++ b/nladmin-ui/src/views/wms/pdm/base/workProcedure/workProcedure.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/workProcedure', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/workProcedure/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/workProcedure', + method: 'put', + data + }) +} + +export function downSelect() { + return request({ + url: 'api/workProcedure/downSelect' + }) +} + +export default { add, edit, del, downSelect } diff --git a/nladmin-ui/src/views/wms/pub/DeviceDialog.vue b/nladmin-ui/src/views/wms/pub/DeviceDialog.vue new file mode 100644 index 000000000..2c81c4053 --- /dev/null +++ b/nladmin-ui/src/views/wms/pub/DeviceDialog.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/pub/MaterDialog.vue b/nladmin-ui/src/views/wms/pub/MaterDialog.vue new file mode 100644 index 000000000..c2e942f4d --- /dev/null +++ b/nladmin-ui/src/views/wms/pub/MaterDialog.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/pub/PointDialog.vue b/nladmin-ui/src/views/wms/pub/PointDialog.vue new file mode 100644 index 000000000..84901eb45 --- /dev/null +++ b/nladmin-ui/src/views/wms/pub/PointDialog.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/sch/point/index.vue b/nladmin-ui/src/views/wms/sch/point/index.vue new file mode 100644 index 000000000..a18fd7379 --- /dev/null +++ b/nladmin-ui/src/views/wms/sch/point/index.vue @@ -0,0 +1,462 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/sch/point/point.js b/nladmin-ui/src/views/wms/sch/point/point.js new file mode 100644 index 000000000..19f681767 --- /dev/null +++ b/nladmin-ui/src/views/wms/sch/point/point.js @@ -0,0 +1,63 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/point', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/point/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/point', + method: 'put', + data + }) +} + +export function syncStruct() { + return request({ + url: 'api/point/syncStruct', + method: 'put' + }) +} + +export function findPoints(area_type) { + return request({ + url: 'api/point/area_type/' + area_type + }) +} + +export function changeActive(data) { + return request({ + url: 'api/point/changeActive', + method: 'put', + data + }) +} + +export function getPoint(data) { + return request({ + url: '/api/point/getPoint', + method: 'post', + data + }) +} + +export function getRegion() { + return request({ + url: '/api/point/getRegion', + method: 'get' + }) +} + +export default { add, edit, del, syncStruct, changeActive, findPoints, getPoint, getRegion } diff --git a/nladmin-ui/src/views/wms/sch/region/index.vue b/nladmin-ui/src/views/wms/sch/region/index.vue new file mode 100644 index 000000000..1d793ba64 --- /dev/null +++ b/nladmin-ui/src/views/wms/sch/region/index.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/sch/region/region.js b/nladmin-ui/src/views/wms/sch/region/region.js new file mode 100644 index 000000000..723ae2601 --- /dev/null +++ b/nladmin-ui/src/views/wms/sch/region/region.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/region', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/region/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/region', + method: 'put', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/region/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, changeActive } diff --git a/nladmin-ui/src/views/wms/sch/task/index.vue b/nladmin-ui/src/views/wms/sch/task/index.vue new file mode 100644 index 000000000..eab155cce --- /dev/null +++ b/nladmin-ui/src/views/wms/sch/task/index.vue @@ -0,0 +1,381 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/sch/task/task.js b/nladmin-ui/src/views/wms/sch/task/task.js new file mode 100644 index 000000000..678aaccd6 --- /dev/null +++ b/nladmin-ui/src/views/wms/sch/task/task.js @@ -0,0 +1,64 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/task', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/task/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/task', + method: 'put', + data + }) +} + +export function getTaskStatus() { + return request({ + url: 'api/task/taskStatus', + method: 'get' + }) +} + +export function getTaskType() { + return request({ + url: 'api/task/taskType', + method: 'get' + }) +} + +export function getFinishType() { + return request({ + url: 'api/task/finishType', + method: 'get' + }) +} + +export function operation(data) { + return request({ + url: 'api/task/operation', + method: 'put', + data + }) +} + +export default { + add, + edit, + del, + operation, + getTaskStatus, + getTaskType, + getFinishType +} diff --git a/nladmin-ui/src/views/wms/st/inbill/index.vue b/nladmin-ui/src/views/wms/st/inbill/index.vue new file mode 100644 index 000000000..c2a5e9b5d --- /dev/null +++ b/nladmin-ui/src/views/wms/st/inbill/index.vue @@ -0,0 +1,449 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/st/inbill/regionioIn.js b/nladmin-ui/src/views/wms/st/inbill/regionioIn.js new file mode 100644 index 000000000..0bb1ff811 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/inbill/regionioIn.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/regionioIn', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/regionioIn/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/regionioIn', + method: 'put', + data + }) +} + +export function createTask(data) { + return request({ + url: 'api/regionioIn/createTask', + method: 'post', + data + }) +} + +export default { add, edit, del, createTask } diff --git a/nladmin-ui/src/views/wms/st/outbill/MaterDialog.vue b/nladmin-ui/src/views/wms/st/outbill/MaterDialog.vue new file mode 100644 index 000000000..6a90bc566 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/outbill/MaterDialog.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/st/outbill/index.vue b/nladmin-ui/src/views/wms/st/outbill/index.vue new file mode 100644 index 000000000..acbf4eaf0 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/outbill/index.vue @@ -0,0 +1,451 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/st/outbill/regionioOut.js b/nladmin-ui/src/views/wms/st/outbill/regionioOut.js new file mode 100644 index 000000000..8b82168bb --- /dev/null +++ b/nladmin-ui/src/views/wms/st/outbill/regionioOut.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/regionioOut', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/regionioOut/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/regionioOut', + method: 'put', + data + }) +} + +export function createTask(data) { + return request({ + url: 'api/regionioOut/createTask', + method: 'post', + data + }) +} + +export default { add, edit, del, createTask } diff --git a/nladmin-ui/src/views/wms/st/vehiclebill/PointDialog.vue b/nladmin-ui/src/views/wms/st/vehiclebill/PointDialog.vue new file mode 100644 index 000000000..88013d402 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/vehiclebill/PointDialog.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/st/vehiclebill/in/index.vue b/nladmin-ui/src/views/wms/st/vehiclebill/in/index.vue new file mode 100644 index 000000000..04db461b0 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/vehiclebill/in/index.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/st/vehiclebill/in/inemptyvehicl.js b/nladmin-ui/src/views/wms/st/vehiclebill/in/inemptyvehicl.js new file mode 100644 index 000000000..9ab525761 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/vehiclebill/in/inemptyvehicl.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/inemptyvehicle', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/inemptyvehicle/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/inemptyvehicle', + method: 'put', + data + }) +} + +export function createTask(data) { + return request({ + url: 'api/inemptyvehicle/createTask', + method: 'post', + data + }) +} + +export default { add, edit, del, createTask } diff --git a/nladmin-ui/src/views/wms/st/vehiclebill/out/index.vue b/nladmin-ui/src/views/wms/st/vehiclebill/out/index.vue new file mode 100644 index 000000000..8fe6d6919 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/vehiclebill/out/index.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/st/vehiclebill/out/outemptyvehicl.js b/nladmin-ui/src/views/wms/st/vehiclebill/out/outemptyvehicl.js new file mode 100644 index 000000000..6143dde75 --- /dev/null +++ b/nladmin-ui/src/views/wms/st/vehiclebill/out/outemptyvehicl.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/outemptyvehicle', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/outemptyvehicle/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/outemptyvehicle', + method: 'put', + data + }) +} + +export function createTask(data) { + return request({ + url: 'api/outemptyvehicle/createTask', + method: 'post', + data + }) +} + +export default { add, edit, del, createTask }