diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/aspect/LimitAspect.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/aspect/LimitAspect.java index a669c5e..0cb556a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/aspect/LimitAspect.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/aspect/LimitAspect.java @@ -27,6 +27,7 @@ import org.nl.common.annotation.Limit; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.RequestHolder; import org.nl.common.utils.StringUtils; +import org.nl.config.language.LangProcess; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; @@ -81,7 +82,7 @@ public class LimitAspect { log.info("第{}次访问key为 {},描述为 [{}] 的接口", count, keys, limit.name()); return joinPoint.proceed(); } else { - throw new BadRequestException("访问次数受限制"); + throw new BadRequestException(LangProcess.msg("universal_limit")); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java index 24d0135..540c3c2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java @@ -22,6 +22,7 @@ import cn.hutool.poi.excel.ExcelUtil; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile; @@ -253,7 +254,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { // 1M int len = 1024 * 1024; if (size > (maxSize * len)) { - throw new BadRequestException("文件超出规定大小"); + throw new BadRequestException(LangProcess.msg("universal_file")); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java index 7b9d80a..9afdb2a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ValidationUtil.java @@ -18,6 +18,7 @@ package org.nl.common.utils; import cn.hutool.core.util.ObjectUtil; import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; /** * 验证工具 @@ -32,7 +33,7 @@ public class ValidationUtil{ public static void isNull(Object obj, String entity, String parameter , Object value){ if(ObjectUtil.isNull(obj)){ String msg = entity + " 不存在: "+ parameter +" is "+ value; - throw new BadRequestException(msg); + throw new BadRequestException(LangProcess.msg("universal_validation",entity,parameter,value.toString())); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/WebMvcConfig.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/WebMvcConfig.java index 99a6da9..13ed781 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/WebMvcConfig.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/WebMvcConfig.java @@ -15,7 +15,10 @@ */ package org.nl.config; +import org.nl.config.language.InitLocaleResolver; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** @@ -27,5 +30,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { - + @Bean + public LocaleResolver localeResolver(){ + return new InitLocaleResolver(); + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/language/InitLocaleResolver.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/language/InitLocaleResolver.java new file mode 100644 index 0000000..85367b9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/language/InitLocaleResolver.java @@ -0,0 +1,37 @@ +package org.nl.config.language; + +import org.apache.commons.lang3.StringUtils; +import org.nl.config.MapOf; +import org.springframework.web.servlet.LocaleResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; +import java.util.Map; + + +public class InitLocaleResolver implements LocaleResolver { + public static Map Language_Country = MapOf.of("vi","vi-VN","id","in-ID","in","in-ID","en-US,en;q=0.9","en-US","en","en-US","zh","zh-CN","ko","ko-KR"); + public static String language = ""; + @Override + public Locale resolveLocale(HttpServletRequest request) { + String header = request.getHeader("Accept-Language"); + if (StringUtils.isNotEmpty(header)){ + String lang = Language_Country.get(header); + language = lang; + if (StringUtils.isNotEmpty(lang)){ + String[] l = lang.split("-"); + //印尼的ISO标准国家代码为id-ID + return new Locale(l[0], l[1]); + } + } + return Locale.getDefault(); + } + + @Override + public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { + } + public String getLanguage(){ + return language; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/language/LangProcess.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/language/LangProcess.java new file mode 100644 index 0000000..0adf89f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/language/LangProcess.java @@ -0,0 +1,19 @@ +package org.nl.config.language; + +import org.apache.commons.lang3.StringUtils; +import org.nl.config.SpringContextHolder; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + + +public class LangProcess { + + public static String msg(String code,String...args){ + MessageSource bean = SpringContextHolder.getBean(MessageSource.class); + if (StringUtils.isEmpty(code)){ + return " "; + } + String message = bean.getMessage(code, args, LocaleContextHolder.getLocale()); + return message; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java index a576223..1eaea85 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/dept/DeptController.java @@ -25,6 +25,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.PageUtil; import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; import org.nl.system.service.dept.ISysDeptService; import org.nl.system.service.dept.dao.SysDept; import org.nl.system.service.dept.dto.DeptQuery; @@ -96,7 +97,7 @@ public class DeptController { // @SaCheckPermission("dept:edit") public ResponseEntity update(@Validated @RequestBody SysDept dept){ if (dept.getPid() != null && dept.getDept_id().equals(dept.getPid())) { - throw new BadRequestException("上级不能为自己"); + throw new BadRequestException(LangProcess.msg("universal_superior")); } deptService.updateDept(dept); return new ResponseEntity<>(HttpStatus.NO_CONTENT); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java index cc48b9d..c518eb0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/generator/CodeGeneratorController.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiOperation; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.system.service.generator.ICodeGenConfigService; import org.nl.system.service.generator.ICodeGeneratorService; import org.nl.system.service.generator.dao.CodeColumnConfig; @@ -72,7 +73,7 @@ public class CodeGeneratorController { @PostMapping(value = "/{tableName}/{type}") public ResponseEntity generator(@PathVariable String tableName, @PathVariable Integer type, HttpServletRequest request, HttpServletResponse response){ if(!generatorEnabled && type == 0){ - throw new BadRequestException("此环境不允许生成代码,请选择预览或者下载查看!"); + throw new BadRequestException(LangProcess.msg("error_generate_code")); } switch (type){ // 生成代码 @@ -83,7 +84,7 @@ public class CodeGeneratorController { // 打包 case 2: generatorService.download(genConfigService.findByTableName(tableName), generatorService.getColumns(tableName), request, response); break; - default: throw new BadRequestException("没有这个选项"); + default: throw new BadRequestException(LangProcess.msg("error_options")); } return new ResponseEntity<>(HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java index 1b6bdf2..dc3aebf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/quartz/SysQuartzJobController.java @@ -9,6 +9,7 @@ import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; import org.nl.system.service.quartz.ISysQuartzJobService; import org.nl.system.service.quartz.dao.SysQuartzJob; import org.nl.system.service.quartz.dto.JobQuery; @@ -58,7 +59,7 @@ public class SysQuartzJobController { @SaCheckPermission("timing:add") public ResponseEntity create(@Validated @RequestBody SysQuartzJob resources) { if (resources.getJob_id() != null) { - throw new BadRequestException("A new " + ENTITY_NAME + " cannot already have an ID"); + throw new BadRequestException(LangProcess.msg("universal_scheduled_create",ENTITY_NAME)); } quartzJobService.createJob(resources); return new ResponseEntity<>(HttpStatus.CREATED); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java index c130f71..7ef09e6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/secutiry/MobileAuthorizationController.java @@ -18,6 +18,7 @@ import org.nl.common.utils.RsaUtils; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.dto.CurrentUser; import org.nl.config.RsaProperties; +import org.nl.config.language.LangProcess; import org.nl.system.service.role.ISysRoleService; import org.nl.system.service.role.dao.SysRole; import org.nl.system.service.secutiry.dto.AuthUserDto; @@ -66,13 +67,13 @@ public class MobileAuthorizationController { SysUser userInfo = userService.getOne(new LambdaQueryWrapper() .eq(SysUser::getUsername, authUser.getUsername())); // 拿到多个已经抛出异常 if (ObjectUtil.isEmpty(userInfo) || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, "salt"))) { // 这里需要密码加密 - throw new BadRequestException("账号或密码错误!"); + throw new BadRequestException(LangProcess.msg("login_pwdWrong")); } // 获取权限列表 - 登录查找权限 List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); if (!userInfo.getIs_used()) { - throw new BadRequestException("账号未激活"); + throw new BadRequestException(LangProcess.msg("login_account")); } // 登录输入,登出删除 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java index e042e03..10e2338 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/tools/ToolLocalStorageController.java @@ -10,6 +10,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.FileUtil; import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; import org.nl.system.service.tools.IToolLocalStorageService; import org.nl.system.service.tools.dao.ToolLocalStorage; import org.nl.system.service.tools.dto.ToolLocalStorageQuery; @@ -58,7 +59,7 @@ public class ToolLocalStorageController { // 判断文件是否为图片 String suffix = FileUtil.getExtensionName(file.getOriginalFilename()); if (!FileUtil.IMAGE.equals(FileUtil.getFileType(suffix))) { - throw new BadRequestException("只能上传图片"); + throw new BadRequestException(LangProcess.msg("universal_image")); } return new ResponseEntity<>(localStorageService.create(null, file), HttpStatus.OK); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java index c9204a5..05db5b5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/user/UserController.java @@ -31,6 +31,7 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.RsaUtils; import org.nl.common.utils.SecurityUtils; import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; import org.nl.system.service.user.ISysUserService; import org.nl.system.service.user.dao.SysUser; import org.nl.system.service.user.dto.UserQuery; @@ -86,7 +87,7 @@ public class UserController { // @PutMapping(value = "center") public ResponseEntity center(@RequestBody SysUser resources){ if(!resources.getUser_id().equals(StpUtil.getLoginIdAsLong())){ - throw new BadRequestException("不能修改他人资料"); + throw new BadRequestException(LangProcess.msg("login_update_information")); } userService.saveOrUpdate(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); @@ -109,10 +110,10 @@ public class UserController { String newPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getString("newPass")); SysUser user = userService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, SecurityUtils.getCurrentUsername())); if (!SaSecureUtil.md5BySalt(user.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(oldPass, "salt"))) { - throw new BadRequestException("修改失败,旧密码错误"); + throw new BadRequestException(LangProcess.msg("login_pwdWrong_1")); } if (!SaSecureUtil.md5BySalt(user.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(newPass, "salt"))) { - throw new BadRequestException("新密码不能与旧密码相同"); + throw new BadRequestException(LangProcess.msg("login_pwdWrong_2")); } user.setPassword(SaSecureUtil.md5BySalt(newPass, "salt")); userService.updateById(user); @@ -132,7 +133,7 @@ public class UserController { String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,user.getPassword()); SysUser userInfo = userService.getOne(new QueryWrapper().eq("username",SecurityUtils.getCurrentUsername())); if(!SaSecureUtil.md5BySalt(userInfo.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(password, "salt"))){ - throw new BadRequestException("密码错误"); + throw new BadRequestException(LangProcess.msg("error_pwd")); } userService.update(new UpdateWrapper().set(userInfo.getUsername(),user.getEmail())); return new ResponseEntity<>(HttpStatus.OK); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java index 51ba327..d195afe 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java @@ -12,6 +12,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.config.MapOf; +import org.nl.config.language.LangProcess; import org.nl.system.service.coderule.ISysCodeRuleService; import org.nl.system.service.coderule.dao.SysCodeRule; import org.nl.system.service.coderule.dao.SysCodeRuleDetail; @@ -107,7 +108,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl sysCodeRules = codeRuleMapper.selectList(new LambdaQueryWrapper().eq(SysCodeRule::getCode, codeRule.getCode())); - if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new BadRequestException("编号[" + sysCodeRules.get(0).getCode() + "]已存在"); + if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new BadRequestException(LangProcess.msg("universal_code_exist1", sysCodeRules.get(0).getCode())); codeRule.setId(IdUtil.getSnowflake(1,1).nextIdStr()); codeRule.setCreate_id(currentUserId); codeRule.setCreate_name(currentUsername); @@ -161,7 +162,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl sysCodeRules = codeRuleMapper.selectList(new LambdaQueryWrapper() .eq(SysCodeRule::getCode, codeRule.getCode()) .ne(SysCodeRule::getId, codeRule.getId())); - if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new BadRequestException("该编码code已存在,请校验!"); + if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new BadRequestException(LangProcess.msg("universal_code_exist2")); String currentUserId = SecurityUtils.getCurrentUserId(); String currentUsername = SecurityUtils.getCurrentUsername(); String now = DateUtil.now(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java index dbe47eb..b2ae7e2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dept/impl/SysDeptServiceImpl.java @@ -10,6 +10,7 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.dto.CurrentUser; import org.nl.common.domain.vo.DeptVo; +import org.nl.config.language.LangProcess; import org.nl.system.service.dept.dto.DeptTree; import org.nl.common.utils.CopyUtil; import org.nl.config.IdUtil; @@ -157,7 +158,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl if (!CollectionUtils.isEmpty(depeIds)){ List deptRelation = sysDeptMapper.getDeptRelation(depeIds); if (!CollectionUtils.isEmpty(deptRelation)){ - throw new BadRequestException("部门存在绑定的人员,请先解绑人员对应部门"); + throw new BadRequestException(LangProcess.msg("universal_dept_exist")); } } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java index ae50dfb..54b9167 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.dict.ISysDictService; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; @@ -59,7 +60,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme String date = DateUtil.now(); List oldDict = sysDictMapper.selectList(new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(dict.getCode()), Dict::getCode, dict.getCode())); - if (ObjectUtil.isNotEmpty(oldDict)) throw new BadRequestException("字典[" + dict.getCode() + "]已存在"); + if (ObjectUtil.isNotEmpty(oldDict)) throw new BadRequestException(LangProcess.msg("universal_dict_exist",dict.getCode())); dict.setDict_id(IdUtil.getSnowflake(1, 1).nextIdStr()); dict.setCreate_id(currentUserId); dict.setCreate_name(nickName); @@ -75,11 +76,11 @@ public class SysDictServiceImpl extends ServiceImpl impleme public void updateDict(Dict dto) { Dict dict = sysDictMapper.selectById(dto.getDict_id()); if (ObjectUtil.isEmpty(dict)) { - throw new BadRequestException("字典不存在"); + throw new BadRequestException(LangProcess.msg("universal_dict_NoExist")); } List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dto.getCode())); if (ObjectUtil.isNotEmpty(dictList) && !dto.getCode().equals(dict.getCode())) - throw new BadRequestException("字典[" + dto.getCode() + "]已存在"); + throw new BadRequestException(LangProcess.msg("universal_dict_exist",dict.getCode())); String currentUserId = SecurityUtils.getCurrentUserId(); String currentNickName = SecurityUtils.getCurrentNickName(); // 根据code获取所有字典 @@ -130,7 +131,7 @@ public class SysDictServiceImpl extends ServiceImpl impleme // 校验是否已经有标签 Dict one = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(Dict::getLabel, dict.getLabel()) .eq(Dict::getCode, dict.getCode())); - if (ObjectUtil.isNotEmpty(one)) throw new BadRequestException("标签[" + dict.getLabel() + "]已存在"); + if (ObjectUtil.isNotEmpty(one)) throw new BadRequestException(LangProcess.msg("universal_label_exist",dict.getLabel())); // 判断是否有空的值 List selectOne = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dict.getCode())); Dict dic = selectOne.get(0); @@ -165,13 +166,13 @@ public class SysDictServiceImpl extends ServiceImpl impleme public void updateDetail(Dict resources) { Dict dict = sysDictMapper.selectById(resources.getDict_id()); if (ObjectUtil.isEmpty(dict)) { - throw new BadRequestException("被删除或无权限,操作失败!"); + throw new BadRequestException(LangProcess.msg("universal_error")); } // 校验是否已经有标签 List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getLabel, resources.getLabel()) .eq(Dict::getCode, resources.getCode())); if (ObjectUtil.isNotEmpty(dictList) && !resources.getLabel().equals(dict.getLabel())) { - throw new BadRequestException("标签[" + resources.getLabel() + "]已存在"); + throw new BadRequestException(LangProcess.msg("universal_label_exist",dict.getLabel())); } resources.setUpdate_id(SecurityUtils.getCurrentUserId()); resources.setUpdate_name(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java index d3c7ced..d569aa8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java @@ -13,6 +13,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.FileUtil; import org.nl.common.utils.GenUtil; +import org.nl.config.language.LangProcess; import org.nl.system.service.generator.ICodeGeneratorService; import org.nl.system.service.generator.dao.CodeColumnConfig; import org.nl.system.service.generator.dao.CodeGenConfig; @@ -141,7 +142,7 @@ public class CodeGeneratorServiceImpl extends ServiceImpl preview(CodeGenConfig genConfig, IPage columns) { List columnsRecords = columns.getRecords(); if (genConfig.getConfig_id() == null) { - throw new BadRequestException("请先配置生成器"); + throw new BadRequestException(LangProcess.msg("universal_generators")); } List> genList = GenUtil.preview(columnsRecords, genConfig); return new ResponseEntity<>(genList, HttpStatus.OK); @@ -151,7 +152,7 @@ public class CodeGeneratorServiceImpl extends ServiceImpl columnsPage, HttpServletRequest request, HttpServletResponse response) { List columns = columnsPage.getRecords(); if (genConfig.getConfig_id() == null) { - throw new BadRequestException("请先配置生成器"); + throw new BadRequestException(LangProcess.msg("universal_generators")); } try { File file = new File(GenUtil.download(columns, genConfig)); @@ -159,7 +160,7 @@ public class CodeGeneratorServiceImpl extends ServiceImpl columnsPage) { List columns = columnsPage.getRecords(); if (genConfig.getConfig_id() == null) { - throw new BadRequestException("请先配置生成器"); + throw new BadRequestException(LangProcess.msg("universal_generators")); } try { GenUtil.generatorCode(columns, genConfig); } catch (IOException e) { log.error(e.getMessage(), e); - throw new BadRequestException("生成失败,请手动处理已生成的文件"); + throw new BadRequestException(LangProcess.msg("error_generate")); } } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java index 14b40a6..ade3f14 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.logicflow.IStageImageService; import org.nl.system.service.logicflow.dao.StageImage; import org.nl.system.service.logicflow.dao.mapper.StageImageMapper; @@ -61,7 +62,7 @@ public class StageImageServiceImpl extends ServiceImpl() .eq(StageImage::getImage_uuid, entity.getImage_uuid())); - if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); String currentUsername = SecurityUtils.getCurrentUsername(); String currentUserId = SecurityUtils.getCurrentUserId(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageServiceImpl.java index 0f3b62b..b0320b1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logicflow/impl/StageServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.logicflow.IStageService; import org.nl.system.service.logicflow.dao.Stage; import org.nl.system.service.logicflow.dao.mapper.StageMapper; @@ -46,7 +47,7 @@ public class StageServiceImpl extends ServiceImpl implements public void create(Stage entity) { Stage stage = stageMapper.selectOne(new LambdaQueryWrapper().eq(Stage::getStage_code, entity.getStage_code())); if (ObjectUtil.isNotEmpty(stage)) { - throw new BadRequestException("舞台编码[" + entity.getStage_code() + "]已存在"); + throw new BadRequestException(LangProcess.msg("universal_stage_exist",entity.getStage_code())); } String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -65,7 +66,7 @@ public class StageServiceImpl extends ServiceImpl implements @Override public void update(Stage dto) { Stage entity = stageMapper.selectOne(new LambdaQueryWrapper().eq(Stage::getStage_uuid, dto.getStage_uuid())); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + if (entity == null) throw new BadRequestException(LangProcess.msg("universal_error")); String currentUsername = SecurityUtils.getCurrentUsername(); String currentUserId = SecurityUtils.getCurrentUserId(); @@ -93,7 +94,7 @@ public class StageServiceImpl extends ServiceImpl implements public void addNewStage(Stage dto) { Stage stage = stageMapper.selectOne(new LambdaQueryWrapper().eq(Stage::getStage_code, dto.getStage_code())); if (ObjectUtil.isEmpty(stage)) { - throw new BadRequestException("舞台不存在"); + throw new BadRequestException(LangProcess.msg("universal_stage_NoExist")); } // 设置内容 stage.setStage_data(dto.getStage_data()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java index d29e0d6..38849d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -18,6 +18,7 @@ import org.nl.common.domain.vo.MenuMetaVo; import org.nl.common.domain.vo.MenuVo; import org.nl.common.utils.CopyUtil; import org.nl.config.IdUtil; +import org.nl.config.language.LangProcess; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.lucene.LuceneExecuteLogService; @@ -27,6 +28,7 @@ import org.nl.system.service.menu.dao.SysMenu; import org.nl.system.service.menu.dao.mapper.SysMenuMapper; import org.nl.system.service.menu.dto.MenuQuery; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -118,7 +120,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl if (resources.getIframe()) { String http = "http://", https = "https://"; if (!(resources.getPath().toLowerCase().startsWith(http) || resources.getPath().toLowerCase().startsWith(https))) { - throw new BadRequestException("外链必须以http://或者https://开头"); + throw new BadRequestException(LangProcess.msg("universal_Backlinks")); } } resources.setMenu_id(IdUtil.getStringId()); @@ -193,12 +195,12 @@ public class SysMenuServiceImpl extends ServiceImpl impl String allChild = baseMapper.findAllChild(menuId); // 获取当前菜单的所有子菜单 List allChildIds = ObjectUtil.isNotEmpty(allChild)?Arrays.asList(allChild.split(",")):null; if (ObjectUtil.isNotEmpty(allChildIds) && allChildIds.contains(resources.getPid())){ - throw new BadRequestException("上级不能为自己或自己的下级"); + throw new BadRequestException(LangProcess.msg("universal_superior_or_lower")); } if (resources.getIframe()) { String http = "http://", https = "https://"; if (!(resources.getPath().toLowerCase().startsWith(http) || resources.getPath().toLowerCase().startsWith(https))) { - throw new BadRequestException("外链必须以http://或者https://开头"); + throw new BadRequestException(LangProcess.msg("universal_Backlinks")); } } @@ -387,7 +389,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl public List buildMenus(String systemType) { Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).eq("value", systemType)); if (dict == null || StringUtils.isEmpty(dict.getPara1())){ - throw new BadRequestException("获取对应的系统菜单不存在"); + throw new BadRequestException(LangProcess.msg("universal_menu_NoExist")); } String pid = dict.getPara1(); List menuDtoList = baseMapper.findSystemMenu(SecurityUtils.getCurrentUserId(),systemType); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java index f41f485..1fd23a7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java @@ -19,6 +19,7 @@ import org.nl.common.mnt.websocket.MsgType; import org.nl.common.mnt.websocket.SocketMsg; import org.nl.common.mnt.websocket.WebSocketServer; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.notice.ISysNoticeService; @@ -83,7 +84,7 @@ public class SysNoticeServiceImpl extends ServiceImpl impl @Transactional(rollbackFor = Exception.class) public void create(Param param) { List code = paramMapper.selectByMap(MapOf.of("code", param.getCode())); - if (ObjectUtil.isNotEmpty(code)) throw new BadRequestException("编码不能一致"); + if (ObjectUtil.isNotEmpty(code)) throw new BadRequestException(LangProcess.msg("universal_encode")); param.setId(IdUtil.getSnowflake(1, 1).nextIdStr()); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -68,12 +69,12 @@ public class SysParamServiceImpl extends ServiceImpl impl public void update(Param param) { Param paramObj = paramMapper.selectById(param.getId()); if (ObjectUtil.isEmpty(paramObj)) { - throw new BadRequestException("被删除或无权限,操作失败!"); + throw new BadRequestException(LangProcess.msg("universal_error")); } Param param1 = paramMapper.selectOne(new LambdaQueryWrapper().eq(Param::getCode, param.getCode()) .and(lam -> lam.ne(Param::getId, param.getId()))); if (ObjectUtil.isNotEmpty(param1)) { - throw new BadRequestException("编码[" + param.getCode() + "]已存在"); + throw new BadRequestException(LangProcess.msg("universal_encode_exist",param.getCode())); } param.setUpdate_id(SecurityUtils.getCurrentUserId()); param.setUpdate_name(SecurityUtils.getCurrentNickName()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java index a289345..20ed6a1 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/dao/SysDataPermission.java @@ -42,6 +42,21 @@ public class SysDataPermission implements Serializable { */ @NotNull private String name; + /** + * 中文名称 + */ + @NotNull + private String zh_name; + /** + * 英文名称 + */ + @NotNull + private String en_name; + /** + * 越南名称 + */ + @NotNull + private String vi_name; /** * 排序 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java index cdee996..78f7398 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.mapper.SysDictMapper; import org.nl.system.service.permission.ISysDataPermissionService; @@ -55,7 +56,7 @@ public class SysDataPermissionServiceImpl extends ServiceImpl().eq(SysDataPermission::getCode, permission.getCode())); - if (ObjectUtil.isNotEmpty(sysDataPermission)) throw new BadRequestException("编码为[" + permission.getCode() + "]的数据权限已存在"); + if (ObjectUtil.isNotEmpty(sysDataPermission)) throw new BadRequestException(LangProcess.msg("universal_encode_date_exist",permission.getCode())); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); @@ -74,7 +75,7 @@ public class SysDataPermissionServiceImpl extends ServiceImpl ids) { ids.forEach(id -> { List permissions = userService.getUserDataPermissionByPermissionId(id); - if (ObjectUtil.isNotEmpty(permissions)) throw new BadRequestException("存在相关联的数据权限,请解除关联后删除"); + if (ObjectUtil.isNotEmpty(permissions)) throw new BadRequestException(LangProcess.msg("universal_exist_linked_data")); dataPermissionMapper.deleteById(id); }); } @@ -126,7 +127,7 @@ public class SysDataPermissionServiceImpl extends ServiceImpl tasks = Arrays.asList(resources.getSub_task().split("[,,]")); if (tasks.contains(resources.getJob_id())) { - throw new BadRequestException("子任务中不能添加当前任务ID"); + throw new BadRequestException(LangProcess.msg("task_Subtasks")); } } resources.setUpdate_id(SecurityUtils.getCurrentUserId()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/QuartzManage.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/QuartzManage.java index f51adc7..38cf3bf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/QuartzManage.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/QuartzManage.java @@ -2,6 +2,7 @@ package org.nl.system.service.quartz.utils; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.system.service.quartz.dao.SysQuartzJob; import org.quartz.*; import org.quartz.impl.triggers.CronTriggerImpl; @@ -52,7 +53,7 @@ public class QuartzManage { } } catch (Exception e){ log.error("创建定时任务失败", e); - throw new BadRequestException("创建定时任务失败"); + throw new BadRequestException(LangProcess.msg("error_scheduled_create")); } } @@ -82,7 +83,7 @@ public class QuartzManage { } } catch (Exception e){ log.error("更新定时任务失败", e); - throw new BadRequestException("更新定时任务失败"); + throw new BadRequestException(LangProcess.msg("error_scheduled_update")); } } @@ -102,7 +103,7 @@ public class QuartzManage { scheduler.resumeJob(jobKey); } catch (Exception e){ log.error("恢复定时任务失败", e); - throw new BadRequestException("恢复定时任务失败"); + throw new BadRequestException(LangProcess.msg("error_scheduled_recover")); } } @@ -116,7 +117,7 @@ public class QuartzManage { scheduler.pauseJob(jobKey); } catch (Exception e){ log.error("定时任务暂停失败", e); - throw new BadRequestException("定时任务暂停失败"); + throw new BadRequestException(LangProcess.msg("error_scheduled_paused")); } } @@ -138,7 +139,7 @@ public class QuartzManage { scheduler.triggerJob(jobKey,dataMap); } catch (Exception e){ log.error("定时任务执行失败", e); - throw new BadRequestException("定时任务执行失败"); + throw new BadRequestException(LangProcess.msg("error_scheduled_execute")); } } @@ -153,7 +154,7 @@ public class QuartzManage { scheduler.deleteJob(jobKey); } catch (Exception e){ log.error("删除定时任务失败", e); - throw new BadRequestException("删除定时任务失败"); + throw new BadRequestException(LangProcess.msg("error_scheduled_delete")); } } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java index 7dbc683..01e766a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/role/impl/SysRoleServiceImpl.java @@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.menu.dao.mapper.SysMenuMapper; import org.nl.system.service.role.ISysRoleService; import org.nl.system.service.role.dao.SysRole; @@ -59,12 +60,12 @@ public class SysRoleServiceImpl extends ServiceImpl impl public void create(JSONObject param) { //判断角色名字是否存在 String name = param.getString("name"); - if (StrUtil.isEmpty(name)) throw new BadRequestException("角色名字不能为空!"); + if (StrUtil.isEmpty(name)) throw new BadRequestException(LangProcess.msg("universal_role_empty")); SysRole sysRole = JSONObject.parseObject(JSONObject.toJSONString(param), SysRole.class); //判断角色名字是否存在 SysRole role = roleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getName, sysRole.getName())); - if (ObjectUtil.isNotEmpty(role)) throw new BadRequestException("角色【" + name + "】已存在!"); + if (ObjectUtil.isNotEmpty(role)) throw new BadRequestException(LangProcess.msg("universal_role_exist",name)); String userId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -86,12 +87,12 @@ public class SysRoleServiceImpl extends ServiceImpl impl SysRole sysRole = JSONObject.parseObject(JSONObject.toJSONString(param), SysRole.class); //判断角色名字是否存在 String name = sysRole.getName(); - if (StrUtil.isEmpty(name)) throw new BadRequestException("角色名字不能为空!"); + if (StrUtil.isEmpty(name)) throw new BadRequestException(LangProcess.msg("universal_role_empty")); //判断角色名字是否存在 SysRole role = roleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getName, sysRole.getName()) .ne(SysRole::getRole_id, sysRole.getRole_id())); - if (ObjectUtil.isNotEmpty(role)) throw new BadRequestException("角色【" + name + "】已存在!"); + if (ObjectUtil.isNotEmpty(role)) throw new BadRequestException(LangProcess.msg("universal_role_exist",name)); String userId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java index ec0188a..d61038b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/secutiry/impl/OnlineUserService.java @@ -30,6 +30,7 @@ import org.nl.common.utils.*; import org.nl.config.RsaProperties; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.dto.CurrentUser; +import org.nl.config.language.LangProcess; import org.nl.system.service.dept.ISysDeptService; import org.nl.system.service.dept.dao.SysDept; import org.nl.system.service.secutiry.dto.UserDto; @@ -240,16 +241,16 @@ public class OnlineUserService { // 清除验证码 redisUtils.del(authUser.getUuid()); if (StrUtil.isEmpty(code)) { - throw new BadRequestException("验证码不存在或已过期"); + throw new BadRequestException(LangProcess.msg("login_codeNull")); } if (StrUtil.isEmpty(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) { - throw new BadRequestException("验证码错误"); + throw new BadRequestException(LangProcess.msg("login_codeError")); } // 校验数据库 // 根据用户名查询,在比对密码 SysUser userInfo = sysUserService.getOne(new QueryWrapper().eq("username",authUser.getUsername())); if (userInfo == null||!userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, "salt"))) { // 这里需要密码加密 - throw new BadRequestException("账号或密码错误"); + throw new BadRequestException(LangProcess.msg("login_pwdWrong")); } // 获取权限列表 - 登录查找权限 @@ -257,7 +258,7 @@ public class OnlineUserService { if (!userInfo.getIs_used()) { - throw new BadRequestException("账号未激活"); + throw new BadRequestException(LangProcess.msg("login_account")); } // 登录输入,登出删除 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java index 4a49142..af22d87 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java @@ -10,6 +10,7 @@ import org.nl.config.FileProperties; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.FileUtil; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.system.service.tools.dao.ToolLocalStorage; import org.nl.system.service.tools.dao.mapper.ToolLocalStorageMapper; import org.nl.system.service.tools.IToolLocalStorageService; @@ -52,7 +53,7 @@ public class ToolLocalStorageServiceImpl extends ServiceImpl() .eq(MdBaseClassstandard::getClass_code, entity.getClass_code()) .eq(MdBaseClassstandard::getIs_delete, false)); if (ObjectUtil.isNotEmpty(mdBaseClassstandard) && !mdBaseClassstandard.getClass_id().equals(entity.getClass_id())) { - throw new BadRequestException("存在相同的基础类别编号"); + throw new BadRequestException(LangProcess.msg("universal_exist_class")); } // 查询原来的父id String oldPid = dto.getParent_class_id(); String newPid = entity.getParent_class_id(); if (entity.getParent_class_id() != null && entity.getClass_id().equals(entity.getParent_class_id())) { - throw new BadRequestException("上级不能为自己"); + throw new BadRequestException(LangProcess.msg("universal_superior")); } String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java index 725232f..1fd7afa 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java @@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.database.material.service.dao.mapper.MdBaseMaterialMapper; @@ -68,7 +69,7 @@ public class MdBaseMaterialServiceImpl extends ServiceImpl().eq(SchBaseTask::getTask_code, taskId)); if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("未找到任务编码为 [" + taskId + "] 的任务"); + throw new BadRequestException(LangProcess.msg("task_Id_isNull",taskId)); } // 任务处理类 String processingClass = taskObj.getConfig_code(); @@ -233,10 +234,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { try { SchBaseTask schBaseTask = taskService.getById(taskId); if(ObjectUtil.isEmpty(schBaseTask)){ - throw new BadRequestException("任务不存在!taskId:"+taskId); + throw new BadRequestException(LangProcess.msg("task_Id_isNull",taskId)); } if (Integer.parseInt(schBaseTask.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("任务已完成或已取消!"); + throw new BadRequestException(LangProcess.msg("task_finish_or_cancel")); } AbstractTask task = taskFactory.getTask(schBaseTask.getConfig_code()); // 执行创建任务 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java index 06c3549..0ef4657 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java @@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.wms.sch.interactivelog.service.ISchBaseAcsandlmsinteractivelogService; import org.nl.wms.sch.interactivelog.service.dao.mapper.SchBaseAcsandlmsinteractivelogMapper; import org.nl.wms.sch.interactivelog.service.dao.SchBaseAcsandlmsinteractivelog; @@ -59,7 +60,7 @@ public class SchBaseAcsandlmsinteractivelogServiceImpl extends ServiceImpl impl pointService.update(schBasePoint); pointService.update(nextSchBasePoint); }else{ - throw new BadRequestException("回温出库失败:+"+result.getMessage()); + throw new BadRequestException(LangProcess.msg("error_report",result.getMessage())); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java index 5a76675..32fa3c5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.wms.ext.service.AcsToWmsService; import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -96,7 +97,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl= Integer.parseInt(TaskStatus.FINISHED.getCode()) && !"feedback".equals(method_name)) { - throw new BadRequestException("任务已完成或已取消!"); + throw new BadRequestException(LangProcess.msg("task_finish_or_cancel")); } // 根据配置去工厂类获得类对象 String processing_class = config_code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java index 782d301..e8fe677 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java @@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper; @@ -57,14 +58,14 @@ public class SchBaseTaskconfigServiceImpl extends ServiceImpl().eq(SchBaseTaskconfig::getConfig_code, entity.getConfig_code())); if (ObjectUtil.isNotEmpty(schBaseTaskconfig)) - throw new BadRequestException("任务配置【" + entity.getConfig_code() + "】已存在!"); + throw new BadRequestException(LangProcess.msg("task_checkExist",entity.getConfig_code())); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); if (ObjectUtil.isAllEmpty(entity.getStart_region_strs(), entity.getNext_region_strs())) - throw new BadRequestException("起点区域和终点区域不能同时为空!"); + throw new BadRequestException(LangProcess.msg("task_point_isNull")); if (ObjectUtil.isNotEmpty(entity.getStart_region_strs())) { // 起点区域配置 @@ -91,9 +92,9 @@ public class SchBaseTaskconfigServiceImpl extends ServiceImpl() .eq(SchBasePoint::getPoint_code, next_point)); if(ObjectUtil.isEmpty(nextSchBasePoint)) { - throw new BadRequestException(next_point+"点位信息异常,请检查输入的点位!" ); + throw new BadRequestException(LangProcess.msg("task_point_error5",next_point)); } if (nextSchBasePoint.getVehicle_qty() > 0 || ObjectUtil.isNotEmpty(nextSchBasePoint.getVehicle_code2()) || ObjectUtil.isNotEmpty(nextSchBasePoint.getIng_task_code())) { // 消息通知 - throw new BadRequestException(next_point+"点位已存在载具或任务信息!" ); + throw new BadRequestException(LangProcess.msg("task_point_error6",next_point)); } } // 判断是否校验工单 if (taskConfig.getIs_check_workorder()) { //如果点位上没货 if(ObjectUtil.isEmpty(pointObj)) { - throw new BadRequestException(apply_point_code+"点位信息异常,请检查输入的点位!" ); + throw new BadRequestException(LangProcess.msg("task_point_error3",apply_point_code)); } //如果点位上没货 if(ObjectUtil.isEmpty(pointObj.getVehicle_code2())) { - throw new BadRequestException("点位:" + apply_point_code+ "上无托盘信息!"); + throw new BadRequestException(LangProcess.msg("task_point_error1",apply_point_code)); } //点位上载具和申请任务不一致 if(!sub_tray.equals(pointObj.getVehicle_code2())) { - throw new BadRequestException("点位:" + apply_point_code+ "上托盘信息:"+pointObj.getVehicle_code2()+"与任务申请托盘:"+sub_tray+"不一致,请检查库存!"); + throw new BadRequestException(LangProcess.msg("task_point_error2",apply_point_code,pointObj.getVehicle_code2(),sub_tray)); } //判断是否校验mes组盘记录 Param isConnectAcs = paramService.findByCode(GeneralDefinition.IS_RETURN_MES); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java index bb22c44..5100f75 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java @@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; @@ -140,10 +141,10 @@ public class KJRKTask extends AbstractTask { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); + throw new BadRequestException(LangProcess.msg("task_finish")); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); + throw new BadRequestException(LangProcess.msg("task_cancel")); } // 获取参数 JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java index 0dd1b4f..62e5454 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; @@ -167,10 +168,10 @@ public class POINTTask extends AbstractTask { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); + throw new BadRequestException(LangProcess.msg("task_finish")); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); + throw new BadRequestException(LangProcess.msg("task_cancel")); } // 获取参数 JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) @@ -320,7 +321,7 @@ public class POINTTask extends AbstractTask { }else{ schBaseTask.setRemark("叠盘机空盘数量已达最大值:["+max_qty+"],暂时无法放置托盘!"); taskService.update(schBaseTask); - throw new BadRequestException("叠盘机空盘数量已达最大值:[\"+max_qty+\"],暂时无法放置托盘!"); + throw new BadRequestException(LangProcess.msg("task_point_error4",max_qty.toString())); } } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java index f821270..7cf8664 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java @@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; @@ -139,10 +140,10 @@ public class SSXBKJTask extends AbstractTask { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); + throw new BadRequestException(LangProcess.msg("task_finish")); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); + throw new BadRequestException(LangProcess.msg("task_cancel")); } // 获取参数 JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java index ef6f798..21b474d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; import org.nl.wms.ext.service.dto.to.BaseResponse; @@ -293,10 +294,10 @@ public class XGRKTask extends AbstractTask { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); + throw new BadRequestException(LangProcess.msg("task_finish")); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); + throw new BadRequestException(LangProcess.msg("task_cancel")); } // 获取参数 JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java index a6c1eac..c2a5219 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.system.service.param.ISysParamService; import org.nl.wms.ext.service.dto.to.BaseResponse; import org.nl.wms.sch.data.service.dao.mapper.MaterialDataMapper; @@ -174,10 +175,10 @@ public class YCLCKTask extends AbstractTask { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); + throw new BadRequestException(LangProcess.msg("task_finish")); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); + throw new BadRequestException(LangProcess.msg("task_cancel")); } // 获取参数 JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java index 8fedb82..be7f8e3 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.dao.Param; import org.nl.wms.ext.service.dto.to.BaseResponse; @@ -280,10 +281,10 @@ public class YCLRKTask extends AbstractTask { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); + throw new BadRequestException(LangProcess.msg("task_finish")); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); + throw new BadRequestException(LangProcess.msg("task_cancel")); } // 获取参数 JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 2ce8d63..fec8795 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -2,6 +2,8 @@ server: port: 8010 #配置数据源 spring: + messages: + basename: language/login/login,language/error/error,language/task/task,language/monitor/universal/universal datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource @@ -9,7 +11,8 @@ spring: url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:fj_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true # url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:root} +# password: ${DB_PWD:root} + password: ${DB_PWD:123456} # password: ${DB_PWD:P@ssw0rd} # 初始连接数 initial-size: 5 @@ -55,9 +58,11 @@ spring: redis: #数据库索引 database: ${REDIS_DB:2} - host: ${REDIS_HOST:127.0.0.1} +# host: ${REDIS_HOST:127.0.0.1} + host: ${REDIS_HOST:192.168.29.130} port: ${REDIS_PORT:6379} - password: ${REDIS_PWD:} +# password: ${REDIS_PWD:} + password: ${REDIS_PWD:123456} # 登录相关配置 login: @@ -154,10 +159,12 @@ sa-token: # Redis数据库索引(默认为0) database: 2 # Redis服务器地址 - host: 127.0.0.1 +# host: 127.0.0.1 + host: 192.168.29.130 # Redis服务器连接端口 port: 6379 # Redis服务器连接密码(默认为空) - password: +# password: + password: 123456 # 连接超时时间 timeout: 10s \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error.properties new file mode 100644 index 0000000..2173fca --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error.properties @@ -0,0 +1,16 @@ +error_send_msg=消息发送失败 +error_cron=cron表达式格式错误 +error_scheduled_create=创建定时任务失败 +error_scheduled_update=更新定时任务失败 +error_scheduled_recover=恢复定时任务失败 +error_scheduled_paused=定时任务暂停失败 +error_scheduled_execute=定时任务执行失败 +error_scheduled_delete=删除定时任务失败 +error_generate_code=此环境不允许生成代码,请选择预览或者下载查看! +error_options=没有这个选项 +error_pwd=密码错误 +error_operation=操作失败 +error_report=回温出库失败:{0} +error_upload=上传失败 +error_pack=打包失败 +error_generate=生成失败,请手动处理已生成的文件 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_en_US.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_en_US.properties new file mode 100644 index 0000000..acfce98 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_en_US.properties @@ -0,0 +1,16 @@ +error_send_msg=The message failed to be sent +error_cron=The cron expression is malformed +error_scheduled_create=Failed to create a scheduled task +error_scheduled_update=The update scheduled task failed +error_scheduled_recover=The scheduled task failed to be resumed +error_scheduled_paused=The scheduled task failed to be paused +error_scheduled_execute=The scheduled task failed to be executed +error_scheduled_delete=Failed to delete the scheduled task +error_generate_code=This environment does not allow code generation, please select Preview or download to view! +error_options=There is no such option +error_pwd=Wrong password +error_operation=The operation failed +error_report=Failed to return to the outbound warehouse: {0} +error_upload=Upload failed +error_pack=Packaging failed +error_generate=If the build fails, manually process the generated file \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_vi_VN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_vi_VN.properties new file mode 100644 index 0000000..3c58bfa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_vi_VN.properties @@ -0,0 +1,16 @@ +error_send_msg=Gửi tin nhắn thất bại +error_cron=Lỗi định dạng biểu thức cron +error_scheduled_create=Lỗi tạo tác vụ hẹn giờ +error_scheduled_update=Cập nhật tác vụ hẹn giờ thất bại +error_scheduled_recover=Nhiệm vụ khôi phục thời gian thất bại +error_scheduled_paused=Thời gian tạm dừng tác vụ thất bại +error_scheduled_execute=Lỗi thực hiện tác vụ hẹn giờ +error_scheduled_delete=Xoá tác vụ đã hẹn thất bại +error_generate_code=Môi trường này không cho phép tạo mã, vui lòng chọn xem trước hoặc tải xuống để xem! +error_options=Không có tùy chọn này +error_pwd=Mật khẩu sai +error_operation=Hoạt động thất bại +error_report=Phản hồi thất bại: {0} +error_upload=Tải lên không thành công +error_pack=Đóng gói thất bại +error_generate=Lỗi tạo, vui lòng xử lý thủ công các tập tin đã tạo \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_zh_CN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_zh_CN.properties new file mode 100644 index 0000000..2173fca --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/error/error_zh_CN.properties @@ -0,0 +1,16 @@ +error_send_msg=消息发送失败 +error_cron=cron表达式格式错误 +error_scheduled_create=创建定时任务失败 +error_scheduled_update=更新定时任务失败 +error_scheduled_recover=恢复定时任务失败 +error_scheduled_paused=定时任务暂停失败 +error_scheduled_execute=定时任务执行失败 +error_scheduled_delete=删除定时任务失败 +error_generate_code=此环境不允许生成代码,请选择预览或者下载查看! +error_options=没有这个选项 +error_pwd=密码错误 +error_operation=操作失败 +error_report=回温出库失败:{0} +error_upload=上传失败 +error_pack=打包失败 +error_generate=生成失败,请手动处理已生成的文件 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login.properties new file mode 100644 index 0000000..77823fe --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login.properties @@ -0,0 +1,7 @@ +login_account=账号未激活 +login_update_information=不能修改他人资料 +login_codeError=验证码配置信息错误! +login_codeNull=验证码不存在或者过期 +login_pwdWrong=账号或者密码不正确 +login_pwdWrong_1=修改失败,旧密码错误 +login_pwdWrong_2=新密码不能与旧密码相同 diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_en_US.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_en_US.properties new file mode 100644 index 0000000..9863d8d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_en_US.properties @@ -0,0 +1,8 @@ +login_account=Account not activated +login_update_information=You can't modify other people's data +login_codeError=Verification code configuration information error\! +login_codeNull=The verification code does not exist or has expired +login_pwdWrong=Incorrect account or password +login_pwdWrong_1=Modification failed, old password error +login_pwdWrong_2=The new password cannot be the same as the old password + diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_vi_VN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_vi_VN.properties new file mode 100644 index 0000000..718a8eb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_vi_VN.properties @@ -0,0 +1,7 @@ +login_account=Tài khoản chưa kích hoạt +login_update_information=Không thể thay đổi thông tin của người khác +login_codeError=Thông tin cấu hình CAPTCHA sai! +login_codeNull=Mã xác minh không tồn tại hoặc hết hạn +login_pwdWrong=Tài khoản hoặc mật khẩu không chính xác +login_pwdWrong_1=Sửa đổi không thành công, mật khẩu cũ bị lỗi +login_pwdWrong_2=Mật khẩu mới không thể giống với mật khẩu cũ diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_zh_CN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_zh_CN.properties new file mode 100644 index 0000000..86616a9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/login/login_zh_CN.properties @@ -0,0 +1,8 @@ +login_account=账号未激活 +login_update_information=不能修改他人资料 +login_codeError=验证码配置信息错误! +login_codeNull=验证码不存在或者过期 +login_pwdWrong=账号或者密码不正确 +login_pwdWrong_1=修改失败,旧密码错误 +login_pwdWrong_2=新密码不能与旧密码相同 + diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties new file mode 100644 index 0000000..5db0888 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal.properties @@ -0,0 +1,31 @@ +universal_limit=访问次数受限制 +universal_error=被删除或无权限,操作失败! +universal_exist_point=存在相同的点位编码 +universal_exist_class=存在相同的基础类别编号 +universal_exist_linked_data=存在相关联的数据权限,请解除关联后删除 +universal_generators=请先配置生成器 +universal_superior=上级不能为自己 +universal_superior_or_lower=上级不能为自己或自己的下级 +universal_file=文件超出规定大小 +universal_validation={0} 不存在: {1} is {2} +universal_scheduled_create=A new {0} cannot already have an ID +universal_role_empty=角色名字不能为空! +universal_role_exist=角色【{0}】已存在! +universal_encode=编码不能一致 +universal_encode_exist=编码[{0}]已存在 +universal_encode_date_exist=编码为[{0}]的数据权限已存在 +universal_image=只能上传图片 +universal_init_code=请完善编码数值的初始值! +universal_dict_exist=字典[{0}]已存在 +universal_dict_NoExist=字典不存在 +universal_label_exist=标签[{0}]已存在 +universal_code_exist1=编号[{0}]已存在 +universal_code_exist2=该编码code已存在,请校验! +universal_msg_NoExist=该信息不存在! +universal_userid_empty=用户不能为空 +universal_Backlinks=外链必须以http://或者https://开头 +universal_stage_exist=舞台编码[{0}]已存在 +universal_stage_NoExist=舞台不存在 +universal_menu_NoExist=获取对应的系统菜单不存在 +universal_file_NoExist=文件信息不存在 +universal_dept_exist=部门存在绑定的人员,请先解绑人员对应部门 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_en_US.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_en_US.properties new file mode 100644 index 0000000..0cea7cf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_en_US.properties @@ -0,0 +1,31 @@ +universal_limit=The number of visits is limited +universal_error=Deleted or without permission, operation failed! +universal_exist_point=The same point code exists +universal_exist_class=The same base category number exists +universal_exist_linked_data=If there is an associated data permission, please delete it after disassociating it +universal_generators=Please configure the generator first +universal_superior=Superiors can not be for themselves +universal_superior_or_lower=Superiors cannot be for themselves or their own subordinates +universal_file=The file exceeds the specified size +universal_validation={0} does not exist: {1} is {2} +universal_scheduled_create=A new {0} cannot already have an ID +universal_role_empty=Character names can't be empty!! +universal_role_exist=Character [{0}] already exists! +universal_encode=The encoding is not consistent +universal_encode_exist=The encoding [{0}] already exists +universal_encode_date_exist=The data rights encoded as [{0}] already exist +universal_image=Only images can be uploaded +universal_init_code=Please complete the initial value of the encoded value! +universal_dict_exist=The dictionary [{0}] already exists +universal_dict_NoExist=The dictionary does not exist +universal_label_exist=The tag [{0}] already exists +universal_code_exist1=The number [{0}] already exists +universal_code_exist2=The code already exists, please verify! +universal_msg_NoExist=The information does not exist! +universal_userid_empty=The user cannot be empty +universal_Backlinks=Backlinks must start with http:// or https:// +universal_stage_exist=Stage code [{0}] already exists +universal_stage_NoExist=The stage does not exist +universal_menu_NoExist=The corresponding system menu does not exist +universal_file_NoExist=The file information does not exist +universal_dept_exist=If there is a bound person in the department, please unbind the corresponding department first \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_vi_VN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_vi_VN.properties new file mode 100644 index 0000000..2aff603 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_vi_VN.properties @@ -0,0 +1,31 @@ +universal_limit=Số lượt truy cập bị hạn chế +universal_error=Bị xóa hoặc không có quyền, hoạt động không thành công! +universal_exist_point=Có cùng một mã hóa điểm +universal_exist_class=Có cùng một số loại cơ sở +universal_exist_linked_data=Có quyền liên quan đến dữ liệu, hãy xóa nó sau khi hủy liên kết +universal_generators=Vui lòng cấu hình máy phát điện trước +universal_superior=Cấp trên không thể tự +universal_superior_or_lower=Cấp trên không thể vì mình hay cấp dưới của mình. +universal_file=Tập tin vượt quá kích thước quy định +universal_validation={0} không tồn tại: {1} là {2} +universal_scheduled_create={0} mới không thể có ID +universal_role_empty=Tên nhân vật không được để trống!! +universal_role_exist=Vai trò【{0}】Đã tồn tại! +universal_encode=Mã hóa không phù hợp +universal_encode_exist=Mã hóa [{0}] đã tồn tại +universal_encode_date_exist=Quyền dữ liệu được mã hóa thành [{0}] đã tồn tại +universal_image=Chỉ có thể upload ảnh +universal_init_code=Xin hãy hoàn thiện giá trị ban đầu của giá trị mã hóa! +universal_dict_exist=Từ điển [{0}] đã tồn tại +universal_dict_NoExist=Từ điển không tồn tại +universal_label_exist=Thẻ [{0}] đã tồn tại +universal_code_exist1=Số [{0}] đã tồn tại +universal_code_exist2=Mã này đã tồn tại, vui lòng kiểm tra! +universal_msg_NoExist=Thông tin này không tồn tại! +universal_userid_empty=User không thể để trống +universal_Backlinks=Chuỗi bên ngoài phải bắt đầu bằng http://hoặc https:// +universal_stage_exist=Mã sân khấu [{0}] đã tồn tại +universal_stage_NoExist=Sân khấu không tồn tại +universal_menu_NoExist=Menu hệ thống tương ứng không tồn tại +universal_file_NoExist=Thông tin tập tin không tồn tại +universal_dept_exist=Nhân viên có liên quan, xin vui lòng cởi trói trước. \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties new file mode 100644 index 0000000..5db0888 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/monitor/universal/universal_zh_CN.properties @@ -0,0 +1,31 @@ +universal_limit=访问次数受限制 +universal_error=被删除或无权限,操作失败! +universal_exist_point=存在相同的点位编码 +universal_exist_class=存在相同的基础类别编号 +universal_exist_linked_data=存在相关联的数据权限,请解除关联后删除 +universal_generators=请先配置生成器 +universal_superior=上级不能为自己 +universal_superior_or_lower=上级不能为自己或自己的下级 +universal_file=文件超出规定大小 +universal_validation={0} 不存在: {1} is {2} +universal_scheduled_create=A new {0} cannot already have an ID +universal_role_empty=角色名字不能为空! +universal_role_exist=角色【{0}】已存在! +universal_encode=编码不能一致 +universal_encode_exist=编码[{0}]已存在 +universal_encode_date_exist=编码为[{0}]的数据权限已存在 +universal_image=只能上传图片 +universal_init_code=请完善编码数值的初始值! +universal_dict_exist=字典[{0}]已存在 +universal_dict_NoExist=字典不存在 +universal_label_exist=标签[{0}]已存在 +universal_code_exist1=编号[{0}]已存在 +universal_code_exist2=该编码code已存在,请校验! +universal_msg_NoExist=该信息不存在! +universal_userid_empty=用户不能为空 +universal_Backlinks=外链必须以http://或者https://开头 +universal_stage_exist=舞台编码[{0}]已存在 +universal_stage_NoExist=舞台不存在 +universal_menu_NoExist=获取对应的系统菜单不存在 +universal_file_NoExist=文件信息不存在 +universal_dept_exist=部门存在绑定的人员,请先解绑人员对应部门 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task.properties new file mode 100644 index 0000000..e2f6a8e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task.properties @@ -0,0 +1,20 @@ +task_finish=该任务已完成! +task_cancel=该任务已取消! +task_type_empty=任务类型不能为空!requestMethodCode:{0},device_code:{1} +task_type_Incorrect=任务类型不正确!{0}:{1},{2}:{3} +task_code_empty=任务编码不能为空! +task_finish_or_cancel=任务已完成或已取消! +task_point_isNull=起点区域和终点区域不能同时为空! +task_Id_isNull=未找到任务编码为{0}的任务 +task_checkExist=任务配置【{0}】已存在! +task_point_error1=点位:{0}上无托盘信息! +task_point_error2=点位:{0}上托盘信息:{1}与任务申请托盘:{2}不一致,请检查库存! +task_point_error3={0}点位信息异常,请检查输入的点位! +task_point_error4=叠盘机空盘数量已达最大值:[{0}],暂时无法放置托盘! +task_point_error5={0}点位信息异常,请检查输入的点位! +task_point_error6={0}点位已存在载具或任务信息! +task_Subtasks=子任务中不能添加当前任务ID + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_en_US.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_en_US.properties new file mode 100644 index 0000000..7de7f60 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_en_US.properties @@ -0,0 +1,17 @@ +task_finish=The mission is complete! +task_cancel=The mission has been cancelled! +task_type_empty=The task type cannot be empty! requestMethodCode:{0},device_code:{1} +task_type_Incorrect=The task type is incorrect! {0}:{1},{2}:{3} +task_code_empty=The task code cannot be empty! +task_finish_or_cancel=Mission completed or canceled! +task_point_isNull=The start and end areas cannot be empty at the same time! +task_Id_isNull=The task with the task code of {0} was not found +task_checkExist=The task configuration [{0}] already exists! +task_point_error1=Location: There is no pallet information on the {0}! +task_point_error2=Location: Pallet information on the {0}: {1} is inconsistent with the task application tray: {2}, please check the inventory! +task_point_error3={0} the point information is abnormal, please check the entered point! +task_point_error4=The number of empty trays in the stacker has reached the maximum value: [{0}], and the pallets cannot be placed temporarily! +task_point_error5={0} the point information is abnormal, please check the entered point! +task_point_error6=Vehicle or mission information already exists at {0} point! +task_Subtasks=You cannot add the current task ID to a subtask + diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_vi_VN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_vi_VN.properties new file mode 100644 index 0000000..c9a01c4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_vi_VN.properties @@ -0,0 +1,16 @@ +task_finish=Nhiệm vụ đã hoàn thành! +task_cancel=Nhiệm vụ bị hủy bỏ! +task_type_empty=Loại nhiệm vụ không được để trống! requestMethodCode:{0},device_code:{1} +task_type_Incorrect=Loại nhiệm vụ không đúng! {0}:{1},{2}:{3} +task_code_empty=Mã hóa nhiệm vụ không thể để trống! +task_finish_or_cancel=Nhiệm vụ đã hoàn thành hoặc bị hủy bỏ! +task_point_isNull=Khu vực bắt đầu và khu vực kết thúc không thể trống cùng một lúc! +task_Id_isNull=Không tìm thấy nhiệm vụ được mã hóa {0} +task_checkExist=Cấu hình tác vụ [{0}] đã tồn tại! +task_point_error1=Vị trí: Không có thông tin pallet trên {0}! +task_point_error2=Điểm: {0} Thông tin pallet trên: {1} Không phù hợp với khay yêu cầu nhiệm vụ: {2} Vui lòng kiểm tra hàng tồn kho! +task_point_error3={0} Thông tin điểm bất thường, vui lòng kiểm tra điểm đã nhập! +task_point_error4=Số lượng đĩa trống của máy xếp đĩa đã đạt đến giá trị tối đa: [{0}], tạm thời không thể đặt khay! +task_point_error5={0} Thông tin điểm bất thường, vui lòng kiểm tra điểm đã nhập! +task_point_error6={0} Điểm đã có thông tin về tàu sân bay hoặc nhiệm vụ! +task_Subtasks=Bạn không thể thêm ID tác vụ hiện tại vào tác vụ con \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_zh_CN.properties b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_zh_CN.properties new file mode 100644 index 0000000..19ae01b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/resources/language/task/task_zh_CN.properties @@ -0,0 +1,16 @@ +task_finish=该任务已完成! +task_cancel=该任务已取消! +task_type_empty=任务类型不能为空!requestMethodCode:{0},device_code:{1} +task_type_Incorrect=任务类型不正确!{0}:{1},{2}:{3} +task_code_empty=任务编码不能为空! +task_finish_or_cancel=任务已完成或已取消! +task_point_isNull=起点区域和终点区域不能同时为空! +task_Id_isNull=未找到任务编码为{0}的任务 +task_checkExist=任务配置【{0}】已存在! +task_point_error1=点位:{0}上无托盘信息! +task_point_error2=点位:{0}上托盘信息:{1}与任务申请托盘:{2}不一致,请检查库存! +task_point_error3={0}点位信息异常,请检查输入的点位! +task_point_error4=叠盘机空盘数量已达最大值:[{0}],暂时无法放置托盘! +task_point_error5={0}点位信息异常,请检查输入的点位! +task_point_error6={0}点位已存在载具或任务信息! +task_Subtasks=子任务中不能添加当前任务ID diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/ServiceImpl.ftl b/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/ServiceImpl.ftl index 1b20b49..18c1c03 100644 --- a/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/ServiceImpl.ftl +++ b/lms/nladmin-system/nlsso-server/src/main/resources/template/generator/admin/ServiceImpl.ftl @@ -59,7 +59,7 @@ public class ${className}ServiceImpl extends ServiceImpl<${className}Mapper, ${c @Override public void update(${className} entity) { ${className} dto = ${changeClassName}Mapper.selectById(entity.get${pkChangeColName ? cap_first }()); - if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); diff --git a/lms/nladmin-system/nlsso-server/target/classes/banner.txt b/lms/nladmin-system/nlsso-server/target/classes/banner.txt new file mode 100644 index 0000000..8be4ead --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/banner.txt @@ -0,0 +1,8 @@ + _ _ ___________ _ _____ _ ___________ _____ +| \ | | _ | ___ \ | | ___| | | ___| ___|_ _| +| \| | | | | |_/ / | | |__ | | | |__ | |_ | | +| . ` | | | | ___ \ | | __|| | | __|| _| | | +| |\ \ \_/ / |_/ / |____| |___| |____| |___| | | | +\_| \_/\___/\____/\_____/\____/\_____/\____/\_| \_/ + + :: Spring Boot :: (v2.1.0.RELEASE) \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/config/application-dev.yml b/lms/nladmin-system/nlsso-server/target/classes/config/application-dev.yml new file mode 100644 index 0000000..fec8795 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/config/application-dev.yml @@ -0,0 +1,170 @@ +server: + port: 8010 +#配置数据源 +spring: + messages: + basename: language/login/login,language/error/error,language/task/task,language/monitor/universal/universal + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:fj_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + # url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:root} +# password: ${DB_PWD:root} + password: ${DB_PWD:123456} + # password: ${DB_PWD:P@ssw0rd} + # 初始连接数 + initial-size: 5 + # 最小连接数 + min-idle: 15 + # 最大连接数 + max-active: 30 + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 + # 获取连接超时时间 + max-wait: 3000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filter: + stat: + enabled: true + # 记录慢SQL + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + redis: + #数据库索引 + database: ${REDIS_DB:2} +# host: ${REDIS_HOST:127.0.0.1} + host: ${REDIS_HOST:192.168.29.130} + port: ${REDIS_PORT:6379} +# password: ${REDIS_PWD:} + password: ${REDIS_PWD:123456} + +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体 + font-name: + # 字体大小 + font-size: 25 + +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +#是否开启 swagger-ui +swagger: + enabled: true + +# IP 本地解析 +ip: + local-parsing: true + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 +logging: + file: + path: C:\log\wms + config: classpath:logback-spring.xml + +# Sa-Token配置 +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: Bearer + sso: + # Ticket有效期 (单位: 秒),默认五分钟 + ticket-timeout: 300 + # 所有允许的授权回调地址 + allow-url: "*" + # 是否打开单点注销功能 + is-slo: true + + # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) + # 是否打开模式三 + isHttp: true + # 接口调用秘钥(用于SSO模式三的单点注销功能) + secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor + # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) + is-read-cookie: true + is-print: false + # 未登录 StpUtil.getTokenSession() 设置值,获取值 @SaIgnore 得忽略接口 + token-session-check-login: false + alone-redis: + # Redis数据库索引(默认为0) + database: 2 + # Redis服务器地址 +# host: 127.0.0.1 + host: 192.168.29.130 + # Redis服务器连接端口 + port: 6379 + # Redis服务器连接密码(默认为空) +# password: + password: 123456 + # 连接超时时间 + timeout: 10s \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/config/application-prod.yml b/lms/nladmin-system/nlsso-server/target/classes/config/application-prod.yml new file mode 100644 index 0000000..9af0e7d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/config/application-prod.yml @@ -0,0 +1,163 @@ +server: + port: 8010 +#配置数据源 +spring: + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:gc_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + # url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:root} + password: ${DB_PWD:123456} + # password: ${DB_PWD:P@ssw0rd} + # 初始连接数 + initial-size: 5 + # 最小连接数 + min-idle: 15 + # 最大连接数 + max-active: 30 + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 + # 获取连接超时时间 + max-wait: 3000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filter: + stat: + enabled: true + # 记录慢SQL + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + redis: + #数据库索引 + database: ${REDIS_DB:2} + host: ${REDIS_HOST:127.0.0.1} + port: ${REDIS_PORT:6379} + password: ${REDIS_PWD:} + +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体 + font-name: + # 字体大小 + font-size: 25 + +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +#是否开启 swagger-ui +swagger: + enabled: true + +# IP 本地解析 +ip: + local-parsing: true + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 +logging: + file: + path: C:\log\wms + config: classpath:logback-spring.xml + +# Sa-Token配置 +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: Bearer + sso: + # Ticket有效期 (单位: 秒),默认五分钟 + ticket-timeout: 300 + # 所有允许的授权回调地址 + allow-url: "*" + # 是否打开单点注销功能 + is-slo: true + + # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) + # 是否打开模式三 + isHttp: true + # 接口调用秘钥(用于SSO模式三的单点注销功能) + secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor + # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) + is-read-cookie: true + is-print: false + # 未登录 StpUtil.getTokenSession() 设置值,获取值 @SaIgnore 得忽略接口 + token-session-check-login: false + alone-redis: + # Redis数据库索引(默认为0) + database: 2 + # Redis服务器地址 + host: 127.0.0.1 + # Redis服务器连接端口 + port: 6379 + # Redis服务器连接密码(默认为空) + password: + # 连接超时时间 + timeout: 10s diff --git a/lms/nladmin-system/nlsso-server/target/classes/config/application-test.yml b/lms/nladmin-system/nlsso-server/target/classes/config/application-test.yml new file mode 100644 index 0000000..986a2f0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/config/application-test.yml @@ -0,0 +1,159 @@ +deserver: + port: 8010 +#配置数据源 +spring: + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:ndxy3_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:root} + password: ${DB_PWD:P@ssw0rd} + # 初始连接数 + initial-size: 5 + # 最小连接数 + min-idle: 15 + # 最大连接数 + max-active: 60 + # 获取连接超时时间 + max-wait: 5000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + # 控制台管理用户名和密码 + url-pattern: /druid/* + reset-enable: false + login-username: admin + login-password: 123456 + filter: + stat: + enabled: true + # 记录慢SQL + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + redis: + #数据库索引 + database: ${REDIS_DB:15} + host: ${REDIS_HOST:127.0.0.1} + port: ${REDIS_PORT:6379} + password: ${REDIS_PWD:} + #连接超时时间 + timeout: 5000 +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体,如遇到线上乱码,设置其他字体即可 + font-name: + # 字体大小 + font-size: 25 + +#jwt +jwt: + header: Authorization + # 令牌前缀 + token-start-with: Bearer + # 必须使用最少88位的Base64对该令牌进行编码 + base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= + # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html + token-validity-in-seconds: 7200000 + # 在线用户key + online-key: online-token- + # 验证码 + code-key: code-key- + # token 续期检查时间范围(默认30分钟,单位默认毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 + detect: 1800000 + # 续期时间范围,默认 1小时,这里单位毫秒 + renew: 3600000 + +# IP 本地解析 +ip: + local-parsing: true + +#是否允许生成代码,生产环境设置为false +generator: + enabled: false + +#如果生产环境要开启swagger,需要配置请求地址 +#springfox: +# documentation: +# swagger: +# v2: +# host: # 接口域名或外网ip + +#是否开启 swagger-ui +swagger: + enabled: false + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 +logging: + file: + path: /app/jar/logs + config: classpath:logback-spring.xml + +# Sa-Token配置 +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: Bearer diff --git a/lms/nladmin-system/nlsso-server/target/classes/config/application.yml b/lms/nladmin-system/nlsso-server/target/classes/config/application.yml new file mode 100644 index 0000000..3206bf1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/config/application.yml @@ -0,0 +1,97 @@ +spring: + freemarker: + check-template-location: false + profiles: + active: dev + jackson: + time-zone: GMT+8 + data: + redis: + repositories: + enabled: false + + #配置 Jpa + jpa: + hibernate: + ddl-auto: none + open-in-view: true + properties: + hibernate: + dialect: org.hibernate.dialect.MySQL5InnoDBDialect + enable_lazy_load_no_trans: true +task: + pool: + # 核心线程池大小 + core-pool-size: 10 + # 最大线程数 + max-pool-size: 30 + # 活跃时间 + keep-alive-seconds: 60 + # 队列容量 + queue-capacity: 50 + +#七牛云 +qiniu: + # 文件大小 /M + max-size: 15 + +#邮箱验证码有效时间/秒 +code: + expiration: 300 + +#密码加密传输,前端公钥加密,后端私钥解密 +rsa: + private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== +logging: + file: + path: C:\log\wms + config: classpath:logback-spring.xml +# sa-token白名单配置 +security: + # 排除路径 + excludes: + # 认证 + - /auth/login + - /auth/code + - /auth/logout + - /sys-user-do/** + # swagger + - /swagger-ui.html + - /swagger-resources/** + - /webjars/** + - /file/** + - /webSocket/** + # 静态资源 + - /*.html + - /**/*.html + - /**/*.css + - /**/*.js + # swagger 文档配置 + - /favicon.ico + - /*/api-docs + - /*/api-docs/** + # druid 监控配置 + - /druid/** + # actuator 监控配置 + - /actuator + - /actuator/** + # 上传 + - /api/localStorage/pictures + # 参数 + - /api/param/getValueByCode +mybatis-plus: + configuration: + map-underscore-to-camel-case: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + mapper-locations: + - classpath:org.nl.**.mapper/*.xml + global-config: + db-config: + id-type: INPUT + banner: false +lucene: + index: + path: D:\lucene\index +tlog: + enable-invoke-time-print: true + pattern: "[$preApp][$preIp][$spanId][$traceId]" \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/generator.properties b/lms/nladmin-system/nlsso-server/target/classes/generator.properties new file mode 100644 index 0000000..0ec883b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/generator.properties @@ -0,0 +1,20 @@ +# ????Java???? +tinyint=Boolean +smallint=Integer +mediumint=Integer +int=Integer +integer=Integer +bigint=Long +float=Float +double=Double +decimal=BigDecimal +bit=Boolean +char=String +varchar=String +tinytext=String +text=String +mediumtext=String +longtext=String +date=Date +datetime=Date +Date=Date diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/error/error.properties b/lms/nladmin-system/nlsso-server/target/classes/language/error/error.properties new file mode 100644 index 0000000..2173fca --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/error/error.properties @@ -0,0 +1,16 @@ +error_send_msg=消息发送失败 +error_cron=cron表达式格式错误 +error_scheduled_create=创建定时任务失败 +error_scheduled_update=更新定时任务失败 +error_scheduled_recover=恢复定时任务失败 +error_scheduled_paused=定时任务暂停失败 +error_scheduled_execute=定时任务执行失败 +error_scheduled_delete=删除定时任务失败 +error_generate_code=此环境不允许生成代码,请选择预览或者下载查看! +error_options=没有这个选项 +error_pwd=密码错误 +error_operation=操作失败 +error_report=回温出库失败:{0} +error_upload=上传失败 +error_pack=打包失败 +error_generate=生成失败,请手动处理已生成的文件 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/error/error_en_US.properties b/lms/nladmin-system/nlsso-server/target/classes/language/error/error_en_US.properties new file mode 100644 index 0000000..acfce98 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/error/error_en_US.properties @@ -0,0 +1,16 @@ +error_send_msg=The message failed to be sent +error_cron=The cron expression is malformed +error_scheduled_create=Failed to create a scheduled task +error_scheduled_update=The update scheduled task failed +error_scheduled_recover=The scheduled task failed to be resumed +error_scheduled_paused=The scheduled task failed to be paused +error_scheduled_execute=The scheduled task failed to be executed +error_scheduled_delete=Failed to delete the scheduled task +error_generate_code=This environment does not allow code generation, please select Preview or download to view! +error_options=There is no such option +error_pwd=Wrong password +error_operation=The operation failed +error_report=Failed to return to the outbound warehouse: {0} +error_upload=Upload failed +error_pack=Packaging failed +error_generate=If the build fails, manually process the generated file \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/error/error_vi_VN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/error/error_vi_VN.properties new file mode 100644 index 0000000..3c58bfa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/error/error_vi_VN.properties @@ -0,0 +1,16 @@ +error_send_msg=Gửi tin nhắn thất bại +error_cron=Lỗi định dạng biểu thức cron +error_scheduled_create=Lỗi tạo tác vụ hẹn giờ +error_scheduled_update=Cập nhật tác vụ hẹn giờ thất bại +error_scheduled_recover=Nhiệm vụ khôi phục thời gian thất bại +error_scheduled_paused=Thời gian tạm dừng tác vụ thất bại +error_scheduled_execute=Lỗi thực hiện tác vụ hẹn giờ +error_scheduled_delete=Xoá tác vụ đã hẹn thất bại +error_generate_code=Môi trường này không cho phép tạo mã, vui lòng chọn xem trước hoặc tải xuống để xem! +error_options=Không có tùy chọn này +error_pwd=Mật khẩu sai +error_operation=Hoạt động thất bại +error_report=Phản hồi thất bại: {0} +error_upload=Tải lên không thành công +error_pack=Đóng gói thất bại +error_generate=Lỗi tạo, vui lòng xử lý thủ công các tập tin đã tạo \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/error/error_zh_CN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/error/error_zh_CN.properties new file mode 100644 index 0000000..2173fca --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/error/error_zh_CN.properties @@ -0,0 +1,16 @@ +error_send_msg=消息发送失败 +error_cron=cron表达式格式错误 +error_scheduled_create=创建定时任务失败 +error_scheduled_update=更新定时任务失败 +error_scheduled_recover=恢复定时任务失败 +error_scheduled_paused=定时任务暂停失败 +error_scheduled_execute=定时任务执行失败 +error_scheduled_delete=删除定时任务失败 +error_generate_code=此环境不允许生成代码,请选择预览或者下载查看! +error_options=没有这个选项 +error_pwd=密码错误 +error_operation=操作失败 +error_report=回温出库失败:{0} +error_upload=上传失败 +error_pack=打包失败 +error_generate=生成失败,请手动处理已生成的文件 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/login/login.properties b/lms/nladmin-system/nlsso-server/target/classes/language/login/login.properties new file mode 100644 index 0000000..77823fe --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/login/login.properties @@ -0,0 +1,7 @@ +login_account=账号未激活 +login_update_information=不能修改他人资料 +login_codeError=验证码配置信息错误! +login_codeNull=验证码不存在或者过期 +login_pwdWrong=账号或者密码不正确 +login_pwdWrong_1=修改失败,旧密码错误 +login_pwdWrong_2=新密码不能与旧密码相同 diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/login/login_en_US.properties b/lms/nladmin-system/nlsso-server/target/classes/language/login/login_en_US.properties new file mode 100644 index 0000000..9863d8d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/login/login_en_US.properties @@ -0,0 +1,8 @@ +login_account=Account not activated +login_update_information=You can't modify other people's data +login_codeError=Verification code configuration information error\! +login_codeNull=The verification code does not exist or has expired +login_pwdWrong=Incorrect account or password +login_pwdWrong_1=Modification failed, old password error +login_pwdWrong_2=The new password cannot be the same as the old password + diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/login/login_vi_VN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/login/login_vi_VN.properties new file mode 100644 index 0000000..718a8eb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/login/login_vi_VN.properties @@ -0,0 +1,7 @@ +login_account=Tài khoản chưa kích hoạt +login_update_information=Không thể thay đổi thông tin của người khác +login_codeError=Thông tin cấu hình CAPTCHA sai! +login_codeNull=Mã xác minh không tồn tại hoặc hết hạn +login_pwdWrong=Tài khoản hoặc mật khẩu không chính xác +login_pwdWrong_1=Sửa đổi không thành công, mật khẩu cũ bị lỗi +login_pwdWrong_2=Mật khẩu mới không thể giống với mật khẩu cũ diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/login/login_zh_CN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/login/login_zh_CN.properties new file mode 100644 index 0000000..86616a9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/login/login_zh_CN.properties @@ -0,0 +1,8 @@ +login_account=账号未激活 +login_update_information=不能修改他人资料 +login_codeError=验证码配置信息错误! +login_codeNull=验证码不存在或者过期 +login_pwdWrong=账号或者密码不正确 +login_pwdWrong_1=修改失败,旧密码错误 +login_pwdWrong_2=新密码不能与旧密码相同 + diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal.properties b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal.properties new file mode 100644 index 0000000..5db0888 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal.properties @@ -0,0 +1,31 @@ +universal_limit=访问次数受限制 +universal_error=被删除或无权限,操作失败! +universal_exist_point=存在相同的点位编码 +universal_exist_class=存在相同的基础类别编号 +universal_exist_linked_data=存在相关联的数据权限,请解除关联后删除 +universal_generators=请先配置生成器 +universal_superior=上级不能为自己 +universal_superior_or_lower=上级不能为自己或自己的下级 +universal_file=文件超出规定大小 +universal_validation={0} 不存在: {1} is {2} +universal_scheduled_create=A new {0} cannot already have an ID +universal_role_empty=角色名字不能为空! +universal_role_exist=角色【{0}】已存在! +universal_encode=编码不能一致 +universal_encode_exist=编码[{0}]已存在 +universal_encode_date_exist=编码为[{0}]的数据权限已存在 +universal_image=只能上传图片 +universal_init_code=请完善编码数值的初始值! +universal_dict_exist=字典[{0}]已存在 +universal_dict_NoExist=字典不存在 +universal_label_exist=标签[{0}]已存在 +universal_code_exist1=编号[{0}]已存在 +universal_code_exist2=该编码code已存在,请校验! +universal_msg_NoExist=该信息不存在! +universal_userid_empty=用户不能为空 +universal_Backlinks=外链必须以http://或者https://开头 +universal_stage_exist=舞台编码[{0}]已存在 +universal_stage_NoExist=舞台不存在 +universal_menu_NoExist=获取对应的系统菜单不存在 +universal_file_NoExist=文件信息不存在 +universal_dept_exist=部门存在绑定的人员,请先解绑人员对应部门 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_en_US.properties b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_en_US.properties new file mode 100644 index 0000000..0cea7cf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_en_US.properties @@ -0,0 +1,31 @@ +universal_limit=The number of visits is limited +universal_error=Deleted or without permission, operation failed! +universal_exist_point=The same point code exists +universal_exist_class=The same base category number exists +universal_exist_linked_data=If there is an associated data permission, please delete it after disassociating it +universal_generators=Please configure the generator first +universal_superior=Superiors can not be for themselves +universal_superior_or_lower=Superiors cannot be for themselves or their own subordinates +universal_file=The file exceeds the specified size +universal_validation={0} does not exist: {1} is {2} +universal_scheduled_create=A new {0} cannot already have an ID +universal_role_empty=Character names can't be empty!! +universal_role_exist=Character [{0}] already exists! +universal_encode=The encoding is not consistent +universal_encode_exist=The encoding [{0}] already exists +universal_encode_date_exist=The data rights encoded as [{0}] already exist +universal_image=Only images can be uploaded +universal_init_code=Please complete the initial value of the encoded value! +universal_dict_exist=The dictionary [{0}] already exists +universal_dict_NoExist=The dictionary does not exist +universal_label_exist=The tag [{0}] already exists +universal_code_exist1=The number [{0}] already exists +universal_code_exist2=The code already exists, please verify! +universal_msg_NoExist=The information does not exist! +universal_userid_empty=The user cannot be empty +universal_Backlinks=Backlinks must start with http:// or https:// +universal_stage_exist=Stage code [{0}] already exists +universal_stage_NoExist=The stage does not exist +universal_menu_NoExist=The corresponding system menu does not exist +universal_file_NoExist=The file information does not exist +universal_dept_exist=If there is a bound person in the department, please unbind the corresponding department first \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_vi_VN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_vi_VN.properties new file mode 100644 index 0000000..2aff603 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_vi_VN.properties @@ -0,0 +1,31 @@ +universal_limit=Số lượt truy cập bị hạn chế +universal_error=Bị xóa hoặc không có quyền, hoạt động không thành công! +universal_exist_point=Có cùng một mã hóa điểm +universal_exist_class=Có cùng một số loại cơ sở +universal_exist_linked_data=Có quyền liên quan đến dữ liệu, hãy xóa nó sau khi hủy liên kết +universal_generators=Vui lòng cấu hình máy phát điện trước +universal_superior=Cấp trên không thể tự +universal_superior_or_lower=Cấp trên không thể vì mình hay cấp dưới của mình. +universal_file=Tập tin vượt quá kích thước quy định +universal_validation={0} không tồn tại: {1} là {2} +universal_scheduled_create={0} mới không thể có ID +universal_role_empty=Tên nhân vật không được để trống!! +universal_role_exist=Vai trò【{0}】Đã tồn tại! +universal_encode=Mã hóa không phù hợp +universal_encode_exist=Mã hóa [{0}] đã tồn tại +universal_encode_date_exist=Quyền dữ liệu được mã hóa thành [{0}] đã tồn tại +universal_image=Chỉ có thể upload ảnh +universal_init_code=Xin hãy hoàn thiện giá trị ban đầu của giá trị mã hóa! +universal_dict_exist=Từ điển [{0}] đã tồn tại +universal_dict_NoExist=Từ điển không tồn tại +universal_label_exist=Thẻ [{0}] đã tồn tại +universal_code_exist1=Số [{0}] đã tồn tại +universal_code_exist2=Mã này đã tồn tại, vui lòng kiểm tra! +universal_msg_NoExist=Thông tin này không tồn tại! +universal_userid_empty=User không thể để trống +universal_Backlinks=Chuỗi bên ngoài phải bắt đầu bằng http://hoặc https:// +universal_stage_exist=Mã sân khấu [{0}] đã tồn tại +universal_stage_NoExist=Sân khấu không tồn tại +universal_menu_NoExist=Menu hệ thống tương ứng không tồn tại +universal_file_NoExist=Thông tin tập tin không tồn tại +universal_dept_exist=Nhân viên có liên quan, xin vui lòng cởi trói trước. \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_zh_CN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_zh_CN.properties new file mode 100644 index 0000000..5db0888 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/monitor/universal/universal_zh_CN.properties @@ -0,0 +1,31 @@ +universal_limit=访问次数受限制 +universal_error=被删除或无权限,操作失败! +universal_exist_point=存在相同的点位编码 +universal_exist_class=存在相同的基础类别编号 +universal_exist_linked_data=存在相关联的数据权限,请解除关联后删除 +universal_generators=请先配置生成器 +universal_superior=上级不能为自己 +universal_superior_or_lower=上级不能为自己或自己的下级 +universal_file=文件超出规定大小 +universal_validation={0} 不存在: {1} is {2} +universal_scheduled_create=A new {0} cannot already have an ID +universal_role_empty=角色名字不能为空! +universal_role_exist=角色【{0}】已存在! +universal_encode=编码不能一致 +universal_encode_exist=编码[{0}]已存在 +universal_encode_date_exist=编码为[{0}]的数据权限已存在 +universal_image=只能上传图片 +universal_init_code=请完善编码数值的初始值! +universal_dict_exist=字典[{0}]已存在 +universal_dict_NoExist=字典不存在 +universal_label_exist=标签[{0}]已存在 +universal_code_exist1=编号[{0}]已存在 +universal_code_exist2=该编码code已存在,请校验! +universal_msg_NoExist=该信息不存在! +universal_userid_empty=用户不能为空 +universal_Backlinks=外链必须以http://或者https://开头 +universal_stage_exist=舞台编码[{0}]已存在 +universal_stage_NoExist=舞台不存在 +universal_menu_NoExist=获取对应的系统菜单不存在 +universal_file_NoExist=文件信息不存在 +universal_dept_exist=部门存在绑定的人员,请先解绑人员对应部门 \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/task/task.properties b/lms/nladmin-system/nlsso-server/target/classes/language/task/task.properties new file mode 100644 index 0000000..e2f6a8e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/task/task.properties @@ -0,0 +1,20 @@ +task_finish=该任务已完成! +task_cancel=该任务已取消! +task_type_empty=任务类型不能为空!requestMethodCode:{0},device_code:{1} +task_type_Incorrect=任务类型不正确!{0}:{1},{2}:{3} +task_code_empty=任务编码不能为空! +task_finish_or_cancel=任务已完成或已取消! +task_point_isNull=起点区域和终点区域不能同时为空! +task_Id_isNull=未找到任务编码为{0}的任务 +task_checkExist=任务配置【{0}】已存在! +task_point_error1=点位:{0}上无托盘信息! +task_point_error2=点位:{0}上托盘信息:{1}与任务申请托盘:{2}不一致,请检查库存! +task_point_error3={0}点位信息异常,请检查输入的点位! +task_point_error4=叠盘机空盘数量已达最大值:[{0}],暂时无法放置托盘! +task_point_error5={0}点位信息异常,请检查输入的点位! +task_point_error6={0}点位已存在载具或任务信息! +task_Subtasks=子任务中不能添加当前任务ID + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/task/task_en_US.properties b/lms/nladmin-system/nlsso-server/target/classes/language/task/task_en_US.properties new file mode 100644 index 0000000..7de7f60 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/task/task_en_US.properties @@ -0,0 +1,17 @@ +task_finish=The mission is complete! +task_cancel=The mission has been cancelled! +task_type_empty=The task type cannot be empty! requestMethodCode:{0},device_code:{1} +task_type_Incorrect=The task type is incorrect! {0}:{1},{2}:{3} +task_code_empty=The task code cannot be empty! +task_finish_or_cancel=Mission completed or canceled! +task_point_isNull=The start and end areas cannot be empty at the same time! +task_Id_isNull=The task with the task code of {0} was not found +task_checkExist=The task configuration [{0}] already exists! +task_point_error1=Location: There is no pallet information on the {0}! +task_point_error2=Location: Pallet information on the {0}: {1} is inconsistent with the task application tray: {2}, please check the inventory! +task_point_error3={0} the point information is abnormal, please check the entered point! +task_point_error4=The number of empty trays in the stacker has reached the maximum value: [{0}], and the pallets cannot be placed temporarily! +task_point_error5={0} the point information is abnormal, please check the entered point! +task_point_error6=Vehicle or mission information already exists at {0} point! +task_Subtasks=You cannot add the current task ID to a subtask + diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/task/task_vi_VN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/task/task_vi_VN.properties new file mode 100644 index 0000000..c9a01c4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/task/task_vi_VN.properties @@ -0,0 +1,16 @@ +task_finish=Nhiệm vụ đã hoàn thành! +task_cancel=Nhiệm vụ bị hủy bỏ! +task_type_empty=Loại nhiệm vụ không được để trống! requestMethodCode:{0},device_code:{1} +task_type_Incorrect=Loại nhiệm vụ không đúng! {0}:{1},{2}:{3} +task_code_empty=Mã hóa nhiệm vụ không thể để trống! +task_finish_or_cancel=Nhiệm vụ đã hoàn thành hoặc bị hủy bỏ! +task_point_isNull=Khu vực bắt đầu và khu vực kết thúc không thể trống cùng một lúc! +task_Id_isNull=Không tìm thấy nhiệm vụ được mã hóa {0} +task_checkExist=Cấu hình tác vụ [{0}] đã tồn tại! +task_point_error1=Vị trí: Không có thông tin pallet trên {0}! +task_point_error2=Điểm: {0} Thông tin pallet trên: {1} Không phù hợp với khay yêu cầu nhiệm vụ: {2} Vui lòng kiểm tra hàng tồn kho! +task_point_error3={0} Thông tin điểm bất thường, vui lòng kiểm tra điểm đã nhập! +task_point_error4=Số lượng đĩa trống của máy xếp đĩa đã đạt đến giá trị tối đa: [{0}], tạm thời không thể đặt khay! +task_point_error5={0} Thông tin điểm bất thường, vui lòng kiểm tra điểm đã nhập! +task_point_error6={0} Điểm đã có thông tin về tàu sân bay hoặc nhiệm vụ! +task_Subtasks=Bạn không thể thêm ID tác vụ hiện tại vào tác vụ con \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/language/task/task_zh_CN.properties b/lms/nladmin-system/nlsso-server/target/classes/language/task/task_zh_CN.properties new file mode 100644 index 0000000..19ae01b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/language/task/task_zh_CN.properties @@ -0,0 +1,16 @@ +task_finish=该任务已完成! +task_cancel=该任务已取消! +task_type_empty=任务类型不能为空!requestMethodCode:{0},device_code:{1} +task_type_Incorrect=任务类型不正确!{0}:{1},{2}:{3} +task_code_empty=任务编码不能为空! +task_finish_or_cancel=任务已完成或已取消! +task_point_isNull=起点区域和终点区域不能同时为空! +task_Id_isNull=未找到任务编码为{0}的任务 +task_checkExist=任务配置【{0}】已存在! +task_point_error1=点位:{0}上无托盘信息! +task_point_error2=点位:{0}上托盘信息:{1}与任务申请托盘:{2}不一致,请检查库存! +task_point_error3={0}点位信息异常,请检查输入的点位! +task_point_error4=叠盘机空盘数量已达最大值:[{0}],暂时无法放置托盘! +task_point_error5={0}点位信息异常,请检查输入的点位! +task_point_error6={0}点位已存在载具或任务信息! +task_Subtasks=子任务中不能添加当前任务ID diff --git a/lms/nladmin-system/nlsso-server/target/classes/log/XgAgvDeviceDriver.xml b/lms/nladmin-system/nlsso-server/target/classes/log/XgAgvDeviceDriver.xml new file mode 100644 index 0000000..3420c4e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/log/XgAgvDeviceDriver.xml @@ -0,0 +1,34 @@ + + + + + + + + + + ${LOG_HOME}/XgAgvDeviceDriver/${DEVICECODE}/%d{yyyy-MM-dd}.%i.log + + 15 + + 50MB + + 2GB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + ${log.charset} + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/log4jdbc.log4j2.properties b/lms/nladmin-system/nlsso-server/target/classes/log4jdbc.log4j2.properties new file mode 100644 index 0000000..302525f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/log4jdbc.log4j2.properties @@ -0,0 +1,4 @@ +# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger +log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator +log4jdbc.auto.load.popular.drivers=false +log4jdbc.drivers=com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/logback-spring.xml b/lms/nladmin-system/nlsso-server/target/classes/logback-spring.xml new file mode 100644 index 0000000..1c3b846 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/logback-spring.xml @@ -0,0 +1,167 @@ + + + + + nlAdmin + + + + + + + + + + true + + ${log.pattern} + + + + + + + + + + + ${LOG_HOME}/%d{yyyy-MM-dd}.%i.log + + 15 + + 50MB + + 20GB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + + + + + 0 + 500 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/AppRun.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/AppRun.class new file mode 100644 index 0000000..f0dccb3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/AppRun.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/AppRun.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/AppRun.java new file mode 100644 index 0000000..f125113 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/AppRun.java @@ -0,0 +1,68 @@ +package org.nl; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; +import com.alicp.jetcache.anno.config.EnableMethodCache; +import io.swagger.annotations.Api; +import org.mybatis.spring.annotation.MapperScan; +import org.nl.config.SpringContextHolder; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 开启审计功能 -> @EnableJpaAuditing + * https://www.cnblogs.com/niceyoo/p/10908647.html + * + * @author ldjun + * @date 2021/2/22 9:20:19 + */ +@EnableAsync +@RestController +@Api(hidden = true) +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class +}) +@ServletComponentScan //https://blog.csdn.net/qq_36850813/article/details/101194250 +@EnableTransactionManagement +@EnableMethodCache(basePackages = "org.nl") +@EnableCreateCacheAnnotation +@MapperScan("org.nl.**.mapper") +public class AppRun { + + public static void main(String[] args) { + + SpringApplication.run(AppRun.class, args); + } + + @Bean + public SpringContextHolder springContextHolder() { + return new SpringContextHolder(); + } + + @Bean + public ServletWebServerFactory webServerFactory() { + TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory(); + fa.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "[]{}")); + return fa; + } + + /** + * 访问首页提示 + * + * @return / + */ + @GetMapping("/") + @SaIgnore + public String index() { + return "Backend service started successfully"; + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/DataPermission.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/DataPermission.class new file mode 100644 index 0000000..f7fac01 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/DataPermission.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/DataPermission.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/DataPermission.java new file mode 100644 index 0000000..b8a693d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/DataPermission.java @@ -0,0 +1,47 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *

+ * 用于判断是否过滤数据权限 + * 1、如果没有用到 @OneToOne 这种关联关系,只需要填写 fieldName [参考:DeptQueryCriteria.class] + * 2、如果用到了 @OneToOne ,fieldName 和 joinName 都需要填写,拿UserQueryCriteria.class举例: + * 应该是 @DataPermission(joinName = "dept", fieldName = "id") + *

+ * @author Zheng Jie + * @website https://el-admin.vip + * @date 2020-05-07 + **/ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface DataPermission { + + /** + * Entity 中的字段名称 + */ + String fieldName() default ""; + + /** + * Entity 中与部门关联的字段名称 + */ + String joinName() default ""; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Limit.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Limit.class new file mode 100644 index 0000000..b12893e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Limit.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Limit.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Limit.java new file mode 100644 index 0000000..9f33b48 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Limit.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.annotation; + +import org.nl.common.aspect.LimitType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author jacky + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Limit { + + // 资源名称,用于描述接口功能 + String name() default ""; + + // 资源 key + String key() default ""; + + // key prefix + String prefix() default ""; + + // 时间的,单位秒 + int period(); + + // 限制访问次数 + int count(); + + // 限制类型 + LimitType limitType() default LimitType.CUSTOMER; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query$Join.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query$Join.class new file mode 100644 index 0000000..7787b3c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query$Join.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query$Type.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query$Type.class new file mode 100644 index 0000000..08cb1b6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query$Type.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query.class new file mode 100644 index 0000000..ea66351 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query.java new file mode 100644 index 0000000..2abca5a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/Query.java @@ -0,0 +1,88 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Zheng Jie + * @date 2019-6-4 13:52:30 + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Query { + + // Dong ZhaoYang 2017/8/7 基本对象的属性名 + String propName() default ""; + // Dong ZhaoYang 2017/8/7 查询方式 + Type type() default Type.EQUAL; + + /** + * 连接查询的属性名,如User类中的dept + */ + String joinName() default ""; + + /** + * 默认左连接 + */ + Join join() default Join.LEFT; + + /** + * 多字段模糊搜索,仅支持String类型字段,多个用逗号隔开, 如@Query(blurry = "email,username") + */ + String blurry() default ""; + + enum Type { + // jie 2019/6/4 相等 + EQUAL + // Dong ZhaoYang 2017/8/7 大于等于 + , GREATER_THAN + // Dong ZhaoYang 2017/8/7 小于等于 + , LESS_THAN + // Dong ZhaoYang 2017/8/7 中模糊查询 + , INNER_LIKE + // Dong ZhaoYang 2017/8/7 左模糊查询 + , LEFT_LIKE + // Dong ZhaoYang 2017/8/7 右模糊查询 + , RIGHT_LIKE + // Dong ZhaoYang 2017/8/7 小于 + , LESS_THAN_NQ + // jie 2019/6/4 包含 + , IN + // 不等于 + ,NOT_EQUAL + // between + ,BETWEEN + // 不为空 + ,NOT_NULL + // 为空 + ,IS_NULL + } + + /** + * @author Zheng Jie + * 适用于简单连接查询,复杂的请自定义该注解,或者使用sql查询 + */ + enum Join { + /** jie 2019-6-4 13:18:30 */ + LEFT, RIGHT, INNER + } + +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/RateLimiter.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/RateLimiter.class new file mode 100644 index 0000000..1670c0e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/RateLimiter.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/RateLimiter.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/RateLimiter.java new file mode 100644 index 0000000..f076f3b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/annotation/RateLimiter.java @@ -0,0 +1,39 @@ +package org.nl.common.annotation; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.core.annotation.AnnotationUtils; + +import java.lang.annotation.*; +import java.util.concurrent.TimeUnit; + +/** + * @Author: lyd + * @Description: 限流注解,添加了 {@link AliasFor} 必须通过 {@link AnnotationUtils} 获取,才会生效 + * @Date: 2022-08-15 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter { + int NOT_LIMITED = 0; + + /** + * qps + */ + @AliasFor("qps") double value() default NOT_LIMITED; + + /** + * qps + */ + @AliasFor("value") double qps() default NOT_LIMITED; + + /** + * 超时时长 + */ + int timeout() default 0; + + /** + * 超时时间单位 + */ + TimeUnit timeUnit() default TimeUnit.MILLISECONDS; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitAspect.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitAspect.class new file mode 100644 index 0000000..300e8f7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitAspect.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitAspect.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitAspect.java new file mode 100644 index 0000000..0cb556a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitAspect.java @@ -0,0 +1,105 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.aspect; + +import cn.hutool.core.util.StrUtil; +import com.google.common.collect.ImmutableList; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.common.annotation.Limit; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RequestHolder; +import org.nl.common.utils.StringUtils; +import org.nl.config.language.LangProcess; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; + +/** + * @author / + */ +@Aspect +@Component +@Slf4j +public class LimitAspect { + + private final RedisTemplate redisTemplate; + private static final Logger logger = LoggerFactory.getLogger(LimitAspect.class); + + public LimitAspect(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + @Pointcut("@annotation(org.nl.common.annotation.Limit)") + public void pointcut() { + } + + @Around("pointcut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method signatureMethod = signature.getMethod(); + Limit limit = signatureMethod.getAnnotation(Limit.class); + LimitType limitType = limit.limitType(); + String key = limit.key(); + if (StrUtil.isEmpty(key)) { + if (limitType == LimitType.IP) { + key = StringUtils.getIp(request); + } else { + key = signatureMethod.getName(); + } + } + + ImmutableList keys = ImmutableList.of(StrUtil.join(limit.prefix(), "_", key, "_", request.getRequestURI().replaceAll("/","_"))); + + String luaScript = buildLuaScript(); + RedisScript redisScript = new DefaultRedisScript<>(luaScript, Number.class); + Number count = redisTemplate.execute(redisScript, keys, limit.count(), limit.period()); + if (null != count && count.intValue() <= limit.count()) { + log.info("第{}次访问key为 {},描述为 [{}] 的接口", count, keys, limit.name()); + return joinPoint.proceed(); + } else { + throw new BadRequestException(LangProcess.msg("universal_limit")); + } + } + + /** + * 限流脚本 + */ + private String buildLuaScript() { + return "local c" + + "\nc = redis.call('get',KEYS[1])" + + "\nif c and tonumber(c) > tonumber(ARGV[1]) then" + + "\nreturn c;" + + "\nend" + + "\nc = redis.call('incr',KEYS[1])" + + "\nif tonumber(c) == 1 then" + + "\nredis.call('expire',KEYS[1],ARGV[2])" + + "\nend" + + "\nreturn c;"; + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitType.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitType.class new file mode 100644 index 0000000..054843f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitType.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitType.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitType.java new file mode 100644 index 0000000..7959f02 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/aspect/LimitType.java @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.aspect; + +/** + * 限流枚举 + * @author / + */ +public enum LimitType { + // 默认 + CUSTOMER, + // by ip addr + IP +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseDTO.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseDTO.class new file mode 100644 index 0000000..f554e09 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseDTO.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseDTO.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseDTO.java new file mode 100644 index 0000000..7920b7c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseDTO.java @@ -0,0 +1,33 @@ +package org.nl.common.base; + +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author Zheng Jie + * @date 2019年10月24日20:48:53 + */ +@Data +public class BaseDTO implements Serializable { + + private String create_name; + + private String create_id; + + private String update_name; + + private String update_id; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date create_time; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date update_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseMapper.class new file mode 100644 index 0000000..3e8e5d8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseMapper.java new file mode 100644 index 0000000..c1b43a0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/BaseMapper.java @@ -0,0 +1,53 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.base; + +import java.util.List; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +public interface BaseMapper { + + /** + * DTO转Entity + * @param dto / + * @return / + */ + E toEntity(D dto); + + /** + * Entity转DTO + * @param entity / + * @return / + */ + D toDto(E entity); + + /** + * DTO集合转Entity集合 + * @param dtoList / + * @return / + */ + List toEntity(List dtoList); + + /** + * Entity集合转DTO集合 + * @param entityList / + * @return / + */ + List toDto(List entityList); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/TableDataInfo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/TableDataInfo.class new file mode 100644 index 0000000..3a41991 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/TableDataInfo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/TableDataInfo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/TableDataInfo.java new file mode 100644 index 0000000..a05a05a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/base/TableDataInfo.java @@ -0,0 +1,78 @@ +package org.nl.common.base; + +import cn.hutool.http.HttpStatus; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 表格分页数据对象 + * + * @author Lion Li + */ + +@Data +@NoArgsConstructor +public class TableDataInfo implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 总记录数 + */ + private long totalElements; + + /** + * 列表数据 + */ + private List content; + + /** + * 消息状态码 + */ + private int code; + + /** + * 消息内容 + */ + private String msg; + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataInfo(List list, long total) { + this.content = list; + this.totalElements = total; + } + + public static TableDataInfo build(IPage page) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setContent(page.getRecords()); + rspData.setTotalElements(page.getTotal()); + return rspData; + } + + public static TableDataInfo build(List list) { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + rspData.setContent(list); + rspData.setTotalElements(list.size()); + return rspData; + } + + public static TableDataInfo build() { + TableDataInfo rspData = new TableDataInfo<>(); + rspData.setCode(HttpStatus.HTTP_OK); + rspData.setMsg("查询成功"); + return rspData; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/constant/DictConstantPool.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/constant/DictConstantPool.class new file mode 100644 index 0000000..4d15e96 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/constant/DictConstantPool.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/constant/DictConstantPool.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/constant/DictConstantPool.java new file mode 100644 index 0000000..860d846 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/constant/DictConstantPool.java @@ -0,0 +1,11 @@ +package org.nl.common.domain.constant; + +/* + * @author ZZQ + * @Date 2022/12/26 9:29 上午 + */ +public class DictConstantPool { + + public static final String DICT_SYS_CODE = "system_type"; + public static final String DICT_SYS_NAME = "所属系统"; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/BaseQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/BaseQuery.class new file mode 100644 index 0000000..e55a46a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/BaseQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/BaseQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/BaseQuery.java new file mode 100644 index 0000000..71ccd84 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/BaseQuery.java @@ -0,0 +1,73 @@ +package org.nl.common.domain.query; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.LambdaUtils; +import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache; +import lombok.Data; +import org.nl.common.enums.QueryTEnum; +import org.nl.config.MapOf; +import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; + +import java.lang.reflect.Type; +import java.util.Date; +import java.util.Map; + +/* + * @author ZZQ + * @Date 2022/12/14 6:33 下午 + * 泛型必须为数据tb对应do:由mybatis管理 + */ +@Data +public class BaseQuery { + /** + * 模糊查询 + */ + private String blurry; + /** + * 是否启用 + */ + private Boolean is_used; + /** + * 创建时间范围查询 + */ + private Date start_time; + private Date end_time; + + + /** + * 字段映射Map:指定字段对应QueryWrapper的查询类型 + * 字段与数据库字段对应,不支持驼峰 + * @see org.nl.common.enums.QueryTEnum + * 通过buid构建 + */ + public Map doP = MapOf.of("blurry", QParam.builder().k(new String[]{"name"}).type(QueryTEnum.LK).build() + ,"startTime", QParam.builder().k(new String[]{"create_time"}).type(QueryTEnum.LT).build() + ,"endTime", QParam.builder().k(new String[]{"create_time"}).type(QueryTEnum.LE).build() + ,"sort", QParam.builder().k(new String[]{"sort"}).type(QueryTEnum.BY).build() + ); + + public QueryWrapper build(){ + this.paramMapping(); + QueryWrapper wrapper = new QueryWrapper<>(); + JSONObject json = (JSONObject)JSONObject.toJSON(this); + Type[] types = ((ParameterizedTypeImpl) this.getClass().getGenericSuperclass()).getActualTypeArguments(); + Map columnMap = LambdaUtils.getColumnMap((Class) types[0]); + json.forEach((key, vel) -> { + if (vel != null && !key.equals("doP")){ + QParam qParam = doP.get(key); + if (qParam != null){ + QueryTEnum.build(qParam.type,wrapper,qParam.k,vel); + }else { + ColumnCache columnCache = columnMap.get(LambdaUtils.formatKey(key)); + if (columnCache!=null){ + wrapper.eq(columnCache.getColumn(),vel); + } + } + } + }); + return wrapper; + } + + public void paramMapping(){}; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/LConsumer.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/LConsumer.class new file mode 100644 index 0000000..a0fae1b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/LConsumer.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/LConsumer.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/LConsumer.java new file mode 100644 index 0000000..94e775c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/LConsumer.java @@ -0,0 +1,14 @@ +package org.nl.common.domain.query; + +import java.util.Objects; + +/* + * @author ZZQ + * @Date 2022/12/14 8:40 下午 + */ +@FunctionalInterface +public interface LConsumer { + + void accept(X x,Y y,Z z); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/PageQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/PageQuery.class new file mode 100644 index 0000000..d4b38d7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/PageQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/PageQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/PageQuery.java new file mode 100644 index 0000000..e268c0b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/PageQuery.java @@ -0,0 +1,111 @@ +package org.nl.common.domain.query; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.util.Locale; + + +/** + * 分页参数 + */ +@Data +public class PageQuery implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 分页大小 + */ + private Integer size; + + /** + * 当前页数 + */ + private Integer page; + + /** + * 排序列 + */ + private String sort; + + /** + * 排序的方向desc或者asc + */ + private Boolean isAsc; + + /** + * 当前记录起始索引 默认值 + */ + public static final int DEFAULT_PAGE_NUM = 1; + + /** + * 每页显示记录数 默认值 默认查全部 + */ + public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; + + public Page build() { + Integer pageNum = ObjectUtil.defaultIfNull(getPage(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + if (StringUtils.isNotEmpty(sort)){ + String[] split = sort.split(","); + for (int i = 0; i < (split.length & ~1); i=i+2) { + String col = split[i]; + OrderItem item = new OrderItem(); + item.setColumn(col); + item.setAsc(split[i+1].toLowerCase(Locale.ROOT).equals("asc")); + page.addOrder(item); + } + } + return page; + } + + public Page build(Class r) { + Integer pageNum = ObjectUtil.defaultIfNull(getPage(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + if (StringUtils.isNotEmpty(sort)){ + String[] split = sort.split(","); + for (int i = 0; i < (split.length & ~1); i=i+2) { + String col = split[i]; + if ("id".equals(col)){ + String mId = mappingId(r); + col = StringUtils.isNotEmpty(mId)?mId:col; + } + OrderItem item = new OrderItem(); + item.setColumn(col); + item.setAsc(split[i+1].toLowerCase(Locale.ROOT).equals("asc")); + page.addOrder(item); + } + + } + return page; + } + + private String mappingId(R r){ + if (r instanceof Class){ + Field[] fields = ((Class) r).getDeclaredFields(); + for (Field field : fields) { + TableId[] byType = field.getAnnotationsByType(TableId.class); + if (byType !=null && byType.length>0){ + TableId tableId = byType[0]; + return tableId.value(); + } + } + } + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam$QParamBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam$QParamBuilder.class new file mode 100644 index 0000000..082c3b1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam$QParamBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam.class new file mode 100644 index 0000000..bbe5cd7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam.java new file mode 100644 index 0000000..dee5c8d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/query/QParam.java @@ -0,0 +1,17 @@ +package org.nl.common.domain.query; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.nl.common.enums.QueryTEnum; + +/* + * @author ZZQ + * @Date 2022/12/15 1:41 下午 + */ +@Builder +public class QParam { + public String[] k; + public QueryTEnum type; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/DeptVo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/DeptVo.class new file mode 100644 index 0000000..727c2f9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/DeptVo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/DeptVo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/DeptVo.java new file mode 100644 index 0000000..62d400b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/DeptVo.java @@ -0,0 +1,72 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.nl.common.base.BaseDTO; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** +* @author Zheng Jie +* @date 2019-03-25 +*/ +@Getter +@Setter +public class DeptVo extends BaseDTO implements Serializable { + + + private String dept_id; + + private String code; + + private String ext_id; + + + @ApiModelProperty(value = "排序") + private Integer dept_sort; + + + @NotBlank + @ApiModelProperty(value = "部门名称") + private String name; + + @NotNull + @ApiModelProperty(value = "是否启用") + private Boolean is_used; + + @ApiModelProperty(value = "上级部门") + private Long pid; + + @ApiModelProperty(value = "子节点数目", hidden = true) + private Integer sub_count = 0; + //前端显示 + private Boolean has_children =Boolean.FALSE; + + private List children; + + public void setSub_count(Integer sub_count) { + this.sub_count = sub_count; + if (sub_count >0){ + this.has_children =Boolean.TRUE; + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuMetaVo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuMetaVo.class new file mode 100644 index 0000000..fcc0727 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuMetaVo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuMetaVo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuMetaVo.java new file mode 100644 index 0000000..e5b22a0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuMetaVo.java @@ -0,0 +1,36 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Zheng Jie + * @date 2018-12-20 + */ +@Data +@AllArgsConstructor +public class MenuMetaVo implements Serializable { + + private String title; + + private String icon; + + private Boolean noCache; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuVo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuVo.class new file mode 100644 index 0000000..2b21748 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuVo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuVo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuVo.java new file mode 100644 index 0000000..07cb902 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/MenuVo.java @@ -0,0 +1,48 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 构建前端路由时用到 + * @author Zheng Jie + * @date 2018-12-20 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class MenuVo implements Serializable { + + private String name; + + private String path; + + private Boolean hidden; + + private String redirect; + + private String component; + + private Boolean alwaysShow; + + private MenuMetaVo meta; + + private List children; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/RoleVo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/RoleVo.class new file mode 100644 index 0000000..9b231d9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/RoleVo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/RoleVo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/RoleVo.java new file mode 100644 index 0000000..88cb9d1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/RoleVo.java @@ -0,0 +1,54 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 角色 + * @author Zheng Jie + * @date 2018-11-22 + */ +@Getter +@Setter +public class RoleVo implements Serializable { + + + @ApiModelProperty(value = "ID", hidden = true) + private Long role_id; + + @NotBlank + @ApiModelProperty(value = "名称", hidden = true) + private String name; + + @ApiModelProperty(value = "级别,数值越小,级别越大") + private Integer level = 3; + + @ApiModelProperty(value = "描述") + private String remark; + + @ApiModelProperty(value = "描述") + private String order_seq; + + @ApiModelProperty(value = "描述") + private String is_used; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/UserPassVo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/UserPassVo.class new file mode 100644 index 0000000..e48a653 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/UserPassVo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/UserPassVo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/UserPassVo.java new file mode 100644 index 0000000..6420b97 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/domain/vo/UserPassVo.java @@ -0,0 +1,31 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.domain.vo; + +import lombok.Data; + +/** + * 修改密码的 Vo 类 + * @author Zheng Jie + * @date 2019年7月11日13:59:49 + */ +@Data +public class UserPassVo { + + private String oldPass; + + private String newPass; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeBiEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeBiEnum.class new file mode 100644 index 0000000..94ae345 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeBiEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeBiEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeBiEnum.java new file mode 100644 index 0000000..9dcdd2b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeBiEnum.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 验证码业务场景 + *

+ * @author Zheng Jie + * @date 2020-05-02 + */ +@Getter +@AllArgsConstructor +public enum CodeBiEnum { + + /* 旧邮箱修改邮箱 */ + ONE(1, "旧邮箱修改邮箱"), + + /* 通过邮箱修改密码 */ + TWO(2, "通过邮箱修改密码"); + + private final Integer code; + private final String description; + + public static CodeBiEnum find(Integer code) { + for (CodeBiEnum value : CodeBiEnum.values()) { + if (code.equals(value.getCode())) { + return value; + } + } + return null; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeEnum.class new file mode 100644 index 0000000..2f4b609 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeEnum.java new file mode 100644 index 0000000..d5dc14e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/CodeEnum.java @@ -0,0 +1,46 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 验证码业务场景对应的 Redis 中的 key + *

+ * @author Zheng Jie + * @date 2020-05-02 + */ +@Getter +@AllArgsConstructor +public enum CodeEnum { + + /* 通过手机号码重置邮箱 */ + PHONE_RESET_EMAIL_CODE("phone_reset_email_code_", "通过手机号码重置邮箱"), + + /* 通过旧邮箱重置邮箱 */ + EMAIL_RESET_EMAIL_CODE("email_reset_email_code_", "通过旧邮箱重置邮箱"), + + /* 通过手机号码重置密码 */ + PHONE_RESET_PWD_CODE("phone_reset_pwd_code_", "通过手机号码重置密码"), + + /* 通过邮箱重置密码 */ + EMAIL_RESET_PWD_CODE("email_reset_pwd_code_", "通过邮箱重置密码"); + + private final String key; + private final String description; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/DataScopeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/DataScopeEnum.class new file mode 100644 index 0000000..2075d09 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/DataScopeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/DataScopeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/DataScopeEnum.java new file mode 100644 index 0000000..71213ba --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/DataScopeEnum.java @@ -0,0 +1,53 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + *

+ * 数据权限枚举 + *

+ * @author Zheng Jie + * @date 2020-05-07 + */ +@Getter +@AllArgsConstructor +public enum DataScopeEnum { + + /* 全部的数据权限 */ + ALL("全部", "全部的数据权限"), + + /* 自己部门的数据权限 */ + THIS_LEVEL("本级", "自己部门的数据权限"), + + /* 自定义的数据权限 */ + CUSTOMIZE("自定义", "自定义的数据权限"); + + private final String value; + private final String description; + + public static DataScopeEnum find(String val) { + for (DataScopeEnum dataScopeEnum : DataScopeEnum.values()) { + if (val.equals(dataScopeEnum.getValue())) { + return dataScopeEnum; + } + } + return null; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/LogTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/LogTypeEnum.class new file mode 100644 index 0000000..3662e90 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/LogTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/LogTypeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/LogTypeEnum.java new file mode 100644 index 0000000..112429a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/LogTypeEnum.java @@ -0,0 +1,15 @@ +package org.nl.common.enums; + +public enum LogTypeEnum { + DEVICE_LOG("设备日志"), + INTERFACE_LOG("接口日志"); + + private String desc; + + LogTypeEnum(String desc) { + this.desc = desc; + } + public String getDesc() { + return desc; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/NoticeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/NoticeEnum.class new file mode 100644 index 0000000..88e88c0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/NoticeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/NoticeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/NoticeEnum.java new file mode 100644 index 0000000..4e6be7b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/NoticeEnum.java @@ -0,0 +1,22 @@ +package org.nl.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/9 + */ +@Getter +@AllArgsConstructor +public enum NoticeEnum { + HAVE_READ_OFF("1","未读"), + HAVE_READ_ON("2", "已读"), + DEAL_STATUS_NO("1", "未处理"), + DEAL_STATUS_YES("2", "已处理"), + DEAL_STATUS_NO_NEED("3", "无需处理"); + + private final String value; + private final String desc; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/QueryTEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/QueryTEnum.class new file mode 100644 index 0000000..25d62ec Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/QueryTEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/QueryTEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/QueryTEnum.java new file mode 100644 index 0000000..5a56212 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/QueryTEnum.java @@ -0,0 +1,35 @@ +package org.nl.common.enums; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.query.LConsumer; + +import java.util.Collection; + +/* + * @author ZZQ + * @Date 2022/12/14 8:26 下午 + */ +@Getter +public enum QueryTEnum { + // + EQ((q, k, v) -> { q.eq(k[0],v); }), + IN((q, key, o) -> { if (o instanceof Collection){ q.in(key[0],(Collection) o); } }), + LK((q, keys, o) -> { for (String key : keys) { q.like(key,o); } }), + LE((q, k, v) -> { q.le(k[0],v); }), + BY((q, k, v) -> { q.orderByDesc(k[0],v); }), + NO((q, k, v) -> { q.isNull(k[0]); }), + LT((q, k, v) -> { q.lt(k[0],v); }), + OREQ((q, k, v) -> { if (StringUtils.isBlank((String)v)){ q.isNull(k[0]); }else { q.eq(k[0],v); } }); + + private LConsumer doP; + + QueryTEnum(LConsumer doP) { + this.doP = doP; + } + + public static void build(QueryTEnum type, QueryWrapper q, String[] k , Object v){ + type.getDoP().accept(q,k,v); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/RequestMethodEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/RequestMethodEnum.class new file mode 100644 index 0000000..2771ebb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/RequestMethodEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/RequestMethodEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/RequestMethodEnum.java new file mode 100644 index 0000000..0ba462c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/RequestMethodEnum.java @@ -0,0 +1,74 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author Zheng Jie + * @website https://el-admin.vip + * @description + * @date 2020-06-10 + **/ +@Getter +@AllArgsConstructor +public enum RequestMethodEnum { + + /** + * 搜寻 @AnonymousGetMapping + */ + GET("GET"), + + /** + * 搜寻 @AnonymousPostMapping + */ + POST("POST"), + + /** + * 搜寻 @AnonymousPutMapping + */ + PUT("PUT"), + + /** + * 搜寻 @AnonymousPatchMapping + */ + PATCH("PATCH"), + + /** + * 搜寻 @AnonymousDeleteMapping + */ + DELETE("DELETE"), + + /** + * 否则就是所有 Request 接口都放行 + */ + ALL("All"); + + /** + * Request 类型 + */ + private final String type; + + public static RequestMethodEnum find(String type) { + for (RequestMethodEnum value : RequestMethodEnum.values()) { + if (type.equals(value.getType())) { + return value; + } + } + return ALL; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/wms/PointStatusEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/wms/PointStatusEnum.class new file mode 100644 index 0000000..7b3d688 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/wms/PointStatusEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/wms/PointStatusEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/wms/PointStatusEnum.java new file mode 100644 index 0000000..2cdc02f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/enums/wms/PointStatusEnum.java @@ -0,0 +1,19 @@ +package org.nl.common.enums.wms; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/15 + */ +@Getter +@AllArgsConstructor +public enum PointStatusEnum { + EMPTY_PLACE("1", "空位"), + FULL_MATERIAL("2", "有料"), + EMPTY_VEHICLE("3", "空载具"); + private final String value; + private final String description; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadConfigurationException.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadConfigurationException.class new file mode 100644 index 0000000..0417148 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadConfigurationException.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadConfigurationException.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadConfigurationException.java new file mode 100644 index 0000000..c8bda76 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadConfigurationException.java @@ -0,0 +1,98 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.exception; + +/** + * 统一关于错误配置信息 异常 + * + * @author: liaojinlong + * @date: 2020/6/10 18:06 + */ +public class BadConfigurationException extends RuntimeException { + /** + * Constructs a new runtime exception with {@code null} as its + * detail message. The cause is not initialized, and may subsequently be + * initialized by a call to {@link #initCause}. + */ + public BadConfigurationException() { + super(); + } + + /** + * Constructs a new runtime exception with the specified detail message. + * The cause is not initialized, and may subsequently be initialized by a + * call to {@link #initCause}. + * + * @param message the detail message. The detail message is saved for + * later retrieval by the {@link #getMessage()} method. + */ + public BadConfigurationException(String message) { + super(message); + } + + /** + * Constructs a new runtime exception with the specified detail message and + * cause.

Note that the detail message associated with + * {@code cause} is not automatically incorporated in + * this runtime exception's detail message. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A {@code null} value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + * @since 1.4 + */ + public BadConfigurationException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Constructs a new runtime exception with the specified cause and a + * detail message of {@code (cause==null ? null : cause.toString())} + * (which typically contains the class and detail message of + * {@code cause}). This constructor is useful for runtime exceptions + * that are little more than wrappers for other throwables. + * + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A {@code null} value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + * @since 1.4 + */ + public BadConfigurationException(Throwable cause) { + super(cause); + } + + /** + * Constructs a new runtime exception with the specified detail + * message, cause, suppression enabled or disabled, and writable + * stack trace enabled or disabled. + * + * @param message the detail message. + * @param cause the cause. (A {@code null} value is permitted, + * and indicates that the cause is nonexistent or unknown.) + * @param enableSuppression whether or not suppression is enabled + * or disabled + * @param writableStackTrace whether or not the stack trace should + * be writable + * @since 1.7 + */ + protected BadConfigurationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadRequestException.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadRequestException.class new file mode 100644 index 0000000..7c3f91a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadRequestException.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadRequestException.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadRequestException.java new file mode 100644 index 0000000..ce1a3f3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/BadRequestException.java @@ -0,0 +1,41 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.exception; + +import lombok.Getter; +import org.springframework.http.HttpStatus; + +import static org.springframework.http.HttpStatus.BAD_REQUEST; + +/** + * @author Zheng Jie + * @date 2018-11-23 + * 统一异常处理 + */ +@Getter +public class BadRequestException extends RuntimeException{ + + private Integer status = BAD_REQUEST.value(); + + public BadRequestException(String msg){ + super(msg); + } + + public BadRequestException(HttpStatus status,String msg){ + super(msg); + this.status = status.value(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityExistException.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityExistException.class new file mode 100644 index 0000000..210751a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityExistException.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityExistException.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityExistException.java new file mode 100644 index 0000000..e73e764 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityExistException.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.exception; + +import org.springframework.util.StringUtils; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +public class EntityExistException extends RuntimeException { + + public EntityExistException(Class clazz, String field, String val) { + super(EntityExistException.generateMessage(clazz.getSimpleName(), field, val)); + } + + private static String generateMessage(String entity, String field, String val) { + return StringUtils.capitalize(entity) + + " with " + field + " "+ val + " existed"; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityNotFoundException.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityNotFoundException.class new file mode 100644 index 0000000..98b43ba Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityNotFoundException.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityNotFoundException.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityNotFoundException.java new file mode 100644 index 0000000..3918eb9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/EntityNotFoundException.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.exception; + +import org.springframework.util.StringUtils; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +public class EntityNotFoundException extends RuntimeException { + + public EntityNotFoundException(Class clazz, String field, String val) { + super(EntityNotFoundException.generateMessage(clazz.getSimpleName(), field, val)); + } + + private static String generateMessage(String entity, String field, String val) { + return StringUtils.capitalize(entity) + + " with " + field + " "+ val + " does not exist"; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/ApiError.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/ApiError.class new file mode 100644 index 0000000..5348ca3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/ApiError.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/ApiError.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/ApiError.java new file mode 100644 index 0000000..c596d1d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/ApiError.java @@ -0,0 +1,53 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.exception.handler; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +@Data +class ApiError { + + private Integer status = 400; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime Date; + private String message; + + private ApiError() { + Date = LocalDateTime.now(); + } + + public static ApiError error(String message){ + ApiError apiError = new ApiError(); + apiError.setMessage(message); + return apiError; + } + + public static ApiError error(Integer status, String message){ + ApiError apiError = new ApiError(); + apiError.setStatus(status); + apiError.setMessage(message); + return apiError; + } +} + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/GlobalExceptionHandler.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/GlobalExceptionHandler.class new file mode 100644 index 0000000..ff86081 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/GlobalExceptionHandler.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/GlobalExceptionHandler.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..9e3bbc5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/exception/handler/GlobalExceptionHandler.java @@ -0,0 +1,116 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.exception.handler; + +import cn.dev33.satoken.exception.NotLoginException; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.exception.EntityExistException; +import org.nl.common.exception.EntityNotFoundException; +import org.nl.common.utils.ThrowableUtil; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.Objects; + +import static org.springframework.http.HttpStatus.NOT_FOUND; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + /** + * 处理所有不可知的异常 + */ + @ExceptionHandler(Throwable.class) + public ResponseEntity handleException(Throwable e){ + // 打印堆栈信息 + log.error(ThrowableUtil.getStackTrace(e)); + return buildResponseEntity(ApiError.error(e.getMessage())); + } + + /** + * token 无效的异常拦截 + * @param e + * @return + */ + @ExceptionHandler(value = NotLoginException.class) + public ResponseEntity notLoginException(Exception e) { +// log.error(ThrowableUtil.getStackTrace(e)); + return buildResponseEntity(ApiError.error(401,"token 失效")); + } + + + /** + * 处理自定义异常 + */ + @ExceptionHandler(value = BadRequestException.class) + public ResponseEntity badRequestException(BadRequestException e) { + // 打印堆栈信息 + log.error(ThrowableUtil.getStackTrace(e)); + return buildResponseEntity(ApiError.error(e.getStatus(),e.getMessage())); + } + + /** + * 处理 EntityExist + */ + @ExceptionHandler(value = EntityExistException.class) + public ResponseEntity entityExistException(EntityExistException e) { + // 打印堆栈信息 + log.error(ThrowableUtil.getStackTrace(e)); + return buildResponseEntity(ApiError.error(e.getMessage())); + } + + /** + * 处理 EntityNotFound + */ + @ExceptionHandler(value = EntityNotFoundException.class) + public ResponseEntity entityNotFoundException(EntityNotFoundException e) { + // 打印堆栈信息 + log.error(ThrowableUtil.getStackTrace(e)); + return buildResponseEntity(ApiError.error(NOT_FOUND.value(),e.getMessage())); + } + + /** + * 处理所有接口数据验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleMethodArgumentNotValidException(MethodArgumentNotValidException e){ + // 打印堆栈信息 + log.error(ThrowableUtil.getStackTrace(e)); + String[] str = Objects.requireNonNull(e.getBindingResult().getAllErrors().get(0).getCodes())[1].split("\\."); + String message = e.getBindingResult().getAllErrors().get(0).getDefaultMessage(); + String msg = "不能为空"; + if(msg.equals(message)){ + message = str[1] + ":" + message; + } + return buildResponseEntity(ApiError.error(message)); + } + + /** + * 统一返回 + */ + private ResponseEntity buildResponseEntity(ApiError apiError) { + return new ResponseEntity<>(apiError, HttpStatus.valueOf(apiError.getStatus())); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/annotation/Log.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/annotation/Log.class new file mode 100644 index 0000000..226a56a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/annotation/Log.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/annotation/Log.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/annotation/Log.java new file mode 100644 index 0000000..4d8105b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/annotation/Log.java @@ -0,0 +1,31 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.logging.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Zheng Jie + * @date 2018-11-24 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Log { + String value() default ""; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/aspect/LogAspect.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/aspect/LogAspect.java new file mode 100644 index 0000000..297b3dd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/aspect/LogAspect.java @@ -0,0 +1,170 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *//* + +package org.nl.common.logging.aspect; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.common.utils.RequestHolder; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.StringUtils; +import org.nl.common.utils.ThrowableUtil; +import org.nl.common.logging.domain.Log; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +*/ +/** + * @author Zheng Jie + * @date 2018-11-24 + *//* + +@Component +@Aspect +@Slf4j +public class LogAspect { + + private final LogService logService; + + ThreadLocal currentTime = new ThreadLocal<>(); + + public LogAspect(LogService logService) { + this.logService = logService; + } + + */ +/** + * 配置切入点 + *//* + + @Pointcut("@annotation(org.nl.common.logging.annotation.Log)") + public void logPointcut() { + // 该方法无方法体,主要为了让同类中其他方法使用此切入点 + } + + */ +/** + * 配置环绕通知,使用在方法logPointcut()上注册的切入点 + * + * @param joinPoint join point for advice + *//* + + @Around("logPointcut()") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = attributes.getRequest(); + HttpServletResponse response = attributes.getResponse(); +// HttpServletRequest request = RequestHolder.getHttpServletRequest(); + + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + // 方法路径 + String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()"; + String params=getParameter(method, joinPoint.getArgs()); + + log.info("请求uri:{}", request.getRequestURI()); + log.info("请求方法:{}",methodName); + log.info("请求方法参数:{}",params); + + Object result; + currentTime.set(System.currentTimeMillis()); + result = joinPoint.proceed(); + Log log = new Log("INFO",System.currentTimeMillis() - currentTime.get()); + currentTime.remove(); + + logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request),joinPoint, log); + return result; + } + + */ +/** + * 根据方法和传入的参数获取请求参数 + *//* + + private String getParameter(Method method, Object[] args) { + List argList = new ArrayList<>(); + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + //将RequestBody注解修饰的参数作为请求参数 + RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class); + if (requestBody != null) { + argList.add(args[i]); + } + //将RequestParam注解修饰的参数作为请求参数 + RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class); + if (requestParam != null) { + Map map = new HashMap<>(); + String key = parameters[i].getName(); + if (!StrUtil.isEmpty(requestParam.value())) { + key = requestParam.value(); + } + map.put(key, args[i]); + argList.add(map); + } + } + if (argList.size() == 0) { + return ""; + } + return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); + } + + */ +/** + * 配置异常通知 + * + * @param joinPoint join point for advice + * @param e exception + *//* + + @AfterThrowing(pointcut = "logPointcut()", throwing = "e") + public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { + Log log = new Log("ERROR",System.currentTimeMillis() - currentTime.get()); + currentTime.remove(); + log.setExceptionDetail(ThrowableUtil.getStackTrace(e).getBytes()); + HttpServletRequest request = RequestHolder.getHttpServletRequest(); + logService.save(getUsername(), StringUtils.getBrowser(request), StringUtils.getIp(request), (ProceedingJoinPoint)joinPoint, log); + } + + public String getUsername() { + try { + return SecurityUtils.getCurrentUsername(); + }catch (Exception e){ + return ""; + } + } +} +*/ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/domain/Log.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/domain/Log.class new file mode 100644 index 0000000..08597e8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/domain/Log.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/domain/Log.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/domain/Log.java new file mode 100644 index 0000000..2d9f1c6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/logging/domain/Log.java @@ -0,0 +1,74 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.logging.domain; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author Zheng Jie + * @date 2018-11-24 + */ +@Getter +@Setter + +@NoArgsConstructor +public class Log implements Serializable { + private String id; + + /** 操作用户 */ + private String username; + + /** 描述 */ + private String description; + + /** 方法名 */ + private String method; + + /** 参数 */ + private String params; + + /** 日志类型 */ + private String logType; + + /** 请求ip */ + private String requestIp; + + /** 地址 */ + private String address; + + /** 浏览器 */ + private String browser; + + /** 请求耗时 */ + private Long time; + + /** 异常详细 */ + private byte[] exceptionDetail; + + /** 创建日期 */ + private Date createTime; + + public Log(String logType, Long time) { + this.logType = logType; + this.time = time; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/DataTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/DataTypeEnum.class new file mode 100644 index 0000000..3c69738 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/DataTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/DataTypeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/DataTypeEnum.java new file mode 100644 index 0000000..99ab108 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/DataTypeEnum.java @@ -0,0 +1,140 @@ +/* + * << + * Davinci + * == + * Copyright (C) 2016 - 2019 EDP + * == + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * >> + * + */ + +package org.nl.common.mnt.util; +import lombok.extern.slf4j.Slf4j; + +/** + * @author / + */ +@Slf4j +@SuppressWarnings({"unchecked","all"}) +public enum DataTypeEnum { + + /** mysql */ + MYSQL("mysql", "mysql", "com.mysql.cj.jdbc.Driver", "`", "`", "'", "'"), + + /** oracle */ + ORACLE("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""), + + /** sql server */ + SQLSERVER("sqlserver", "sqlserver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "\"", "\"", "\"", "\""), + + /** h2 */ + H2("h2", "h2", "org.h2.Driver", "`", "`", "\"", "\""), + + /** phoenix */ + PHOENIX("phoenix", "hbase phoenix", "org.apache.phoenix.jdbc.PhoenixDriver", "", "", "\"", "\""), + + /** mongo */ + MONGODB("mongo", "mongodb", "mongodb.jdbc.MongoDriver", "`", "`", "\"", "\""), + + /** sql4es */ + ELASTICSEARCH("sql4es", "elasticsearch", "nl.anchormen.sql4es.jdbc.ESDriver", "", "", "'", "'"), + + /** presto */ + PRESTO("presto", "presto", "com.facebook.presto.jdbc.PrestoDriver", "", "", "\"", "\""), + + /** moonbox */ + MOONBOX("moonbox", "moonbox", "moonbox.jdbc.MbDriver", "`", "`", "`", "`"), + + /** cassandra */ + CASSANDRA("cassandra", "cassandra", "com.github.adejanovski.cassandra.jdbc.CassandraDriver", "", "", "'", "'"), + + /** click house */ + CLICKHOUSE("clickhouse", "clickhouse", "ru.yandex.clickhouse.ClickHouseDriver", "", "", "\"", "\""), + + /** kylin */ + KYLIN("kylin", "kylin", "org.apache.kylin.jdbc.Driver", "\"", "\"", "\"", "\""), + + /** vertica */ + VERTICA("vertica", "vertica", "com.vertica.jdbc.Driver", "", "", "'", "'"), + + /** sap */ + HANA("sap", "sap hana", "com.sap.db.jdbc.Driver", "", "", "'", "'"), + + /** impala */ + IMPALA("impala", "impala", "com.cloudera.impala.jdbc41.Driver", "", "", "'", "'"); + + private String feature; + private String desc; + private String driver; + private String keywordPrefix; + private String keywordSuffix; + private String aliasPrefix; + private String aliasSuffix; + + private static final String JDBC_URL_PREFIX = "jdbc:"; + + DataTypeEnum(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, String aliasPrefix, String aliasSuffix) { + this.feature = feature; + this.desc = desc; + this.driver = driver; + this.keywordPrefix = keywordPrefix; + this.keywordSuffix = keywordSuffix; + this.aliasPrefix = aliasPrefix; + this.aliasSuffix = aliasSuffix; + } + + public static DataTypeEnum urlOf(String jdbcUrl) { + String url = jdbcUrl.toLowerCase().trim(); + for (DataTypeEnum dataTypeEnum : values()) { + if (url.startsWith(JDBC_URL_PREFIX + dataTypeEnum.feature)) { + try { + Class aClass = Class.forName(dataTypeEnum.getDriver()); + if (null == aClass) { + throw new RuntimeException("Unable to get driver instance for jdbcUrl: " + jdbcUrl); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException("Unable to get driver instance: " + jdbcUrl); + } + return dataTypeEnum; + } + } + return null; + } + + public String getFeature() { + return feature; + } + + public String getDesc() { + return desc; + } + + public String getDriver() { + return driver; + } + + public String getKeywordPrefix() { + return keywordPrefix; + } + + public String getKeywordSuffix() { + return keywordSuffix; + } + + public String getAliasPrefix() { + return aliasPrefix; + } + + public String getAliasSuffix() { + return aliasSuffix; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ExecuteShellUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ExecuteShellUtil.class new file mode 100644 index 0000000..ebc78a1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ExecuteShellUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ExecuteShellUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ExecuteShellUtil.java new file mode 100644 index 0000000..cf5d26f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ExecuteShellUtil.java @@ -0,0 +1,103 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.util; + +import cn.hutool.core.io.IoUtil; +import com.jcraft.jsch.ChannelShell; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.Vector; + +/** + * 执行shell命令 + * + * @author: ZhangHouYing + * @date: 2019/8/10 + */ +@Slf4j +public class ExecuteShellUtil { + + private Vector stdout; + + Session session; + + public ExecuteShellUtil(final String ipAddress, final String username, final String password,int port) { + try { + JSch jsch = new JSch(); + session = jsch.getSession(username, ipAddress, port); + session.setPassword(password); + session.setConfig("StrictHostKeyChecking", "no"); + session.connect(3000); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + + } + + public int execute(final String command) { + int returnCode = 0; + ChannelShell channel = null; + PrintWriter printWriter = null; + BufferedReader input = null; + stdout = new Vector(); + try { + channel = (ChannelShell) session.openChannel("shell"); + channel.connect(); + input = new BufferedReader(new InputStreamReader(channel.getInputStream())); + printWriter = new PrintWriter(channel.getOutputStream()); + printWriter.println(command); + printWriter.println("exit"); + printWriter.flush(); + log.info("The remote command is: "); + String line; + while ((line = input.readLine()) != null) { + stdout.add(line); + System.out.println(line); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + return -1; + }finally { + IoUtil.close(printWriter); + IoUtil.close(input); + if (channel != null) { + channel.disconnect(); + } + } + return returnCode; + } + + public void close(){ + if (session != null) { + session.disconnect(); + } + } + + public String executeForResult(String command) { + execute(command); + StringBuilder sb = new StringBuilder(); + for (String str : stdout) { + sb.append(str); + } + return sb.toString(); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ScpClientUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ScpClientUtil.class new file mode 100644 index 0000000..3cc8981 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ScpClientUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ScpClientUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ScpClientUtil.java new file mode 100644 index 0000000..0df287d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ScpClientUtil.java @@ -0,0 +1,105 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.util; + +import ch.ethz.ssh2.Connection; +import ch.ethz.ssh2.SCPClient; +import com.google.common.collect.Maps; + +import java.io.IOException; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * 远程执行linux命令 + * @author: ZhangHouYing + * @date: 2019-08-10 10:06 + */ +public class ScpClientUtil { + + static private Map instance = Maps.newHashMap(); + + static synchronized public ScpClientUtil getInstance(String ip, int port, String username, String password) { + if (instance.get(ip) == null) { + instance.put(ip, new ScpClientUtil(ip, port, username, password)); + } + return instance.get(ip); + } + + public ScpClientUtil(String ip, int port, String username, String password) { + this.ip = ip; + this.port = port; + this.username = username; + this.password = password; + } + + public void getFile(String remoteFile, String localTargetDirectory) { + Connection conn = new Connection(ip, port); + try { + conn.connect(); + boolean isAuthenticated = conn.authenticateWithPassword(username, password); + if (!isAuthenticated) { + System.err.println("authentication failed"); + } + SCPClient client = new SCPClient(conn); + client.get(remoteFile, localTargetDirectory); + } catch (IOException ex) { + Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null, ex); + }finally{ + conn.close(); + } + } + + public void putFile(String localFile, String remoteTargetDirectory) { + putFile(localFile, null, remoteTargetDirectory); + } + + public void putFile(String localFile, String remoteFileName, String remoteTargetDirectory) { + putFile(localFile, remoteFileName, remoteTargetDirectory,null); + } + + public void putFile(String localFile, String remoteFileName, String remoteTargetDirectory, String mode) { + Connection conn = new Connection(ip, port); + try { + conn.connect(); + boolean isAuthenticated = conn.authenticateWithPassword(username, password); + if (!isAuthenticated) { + System.err.println("authentication failed"); + } + SCPClient client = new SCPClient(conn); + if ((mode == null) || (mode.length() == 0)) { + mode = "0600"; + } + if (remoteFileName == null) { + client.put(localFile, remoteTargetDirectory); + } else { + client.put(localFile, remoteFileName, remoteTargetDirectory, mode); + } + } catch (IOException ex) { + Logger.getLogger(ScpClientUtil.class.getName()).log(Level.SEVERE, null, ex); + }finally{ + conn.close(); + } + } + + private String ip; + private int port; + private String username; + private String password; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/SqlUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/SqlUtils.class new file mode 100644 index 0000000..b49da2a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/SqlUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/SqlUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/SqlUtils.java new file mode 100644 index 0000000..718f5b2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/SqlUtils.java @@ -0,0 +1,206 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.util; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.util.StringUtils; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; + +import javax.sql.DataSource; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.sql.*; +import java.util.List; + +/** + * @author / + */ +@Slf4j +public class SqlUtils { + + public static final String COLON = ":"; + + + /** + * 获取数据源 + * + * @param jdbcUrl / + * @param userName / + * @param password / + * @return DataSource + */ + private static DataSource getDataSource(String jdbcUrl, String userName, String password) { + DruidDataSource druidDataSource = new DruidDataSource(); + String className; + try { + className = DriverManager.getDriver(jdbcUrl.trim()).getClass().getName(); + } catch (SQLException e) { + throw new RuntimeException("Get class name error: =" + jdbcUrl); + } + if (StringUtils.isEmpty(className)) { + DataTypeEnum dataTypeEnum = DataTypeEnum.urlOf(jdbcUrl); + if (null == dataTypeEnum) { + throw new RuntimeException("Not supported data type: jdbcUrl=" + jdbcUrl); + } + druidDataSource.setDriverClassName(dataTypeEnum.getDriver()); + } else { + druidDataSource.setDriverClassName(className); + } + + + druidDataSource.setUrl(jdbcUrl); + druidDataSource.setUsername(userName); + druidDataSource.setPassword(password); + // 配置获取连接等待超时的时间 + druidDataSource.setMaxWait(3000); + // 配置初始化大小、最小、最大 + druidDataSource.setInitialSize(1); + druidDataSource.setMinIdle(1); + druidDataSource.setMaxActive(1); + + // 如果链接出现异常则直接判定为失败而不是一直重试 + druidDataSource.setBreakAfterAcquireFailure(true); + try { + druidDataSource.init(); + } catch (SQLException e) { + log.error("Exception during pool initialization", e); + throw new RuntimeException(e.getMessage()); + } + + return druidDataSource; + } + + private static Connection getConnection(String jdbcUrl, String userName, String password) { + DataSource dataSource = getDataSource(jdbcUrl, userName, password); + Connection connection = null; + try { + connection = dataSource.getConnection(); + } catch (Exception ignored) {} + try { + int timeOut = 5; + if (null == connection || connection.isClosed() || !connection.isValid(timeOut)) { + log.info("connection is closed or invalid, retry get connection!"); + connection = dataSource.getConnection(); + } + } catch (Exception e) { + log.error("create connection error, jdbcUrl: {}", jdbcUrl); + throw new RuntimeException("create connection error, jdbcUrl: " + jdbcUrl); + } + return connection; + } + + private static void releaseConnection(Connection connection) { + if (null != connection) { + try { + connection.close(); + } catch (Exception e) { + log.error(e.getMessage(),e); + log.error("connection close error:" + e.getMessage()); + } + } + } + + + public static void closeResult(ResultSet rs) { + if (rs != null) { + try { + rs.close(); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + } + } + + public static boolean testConnection(String jdbcUrl, String userName, String password) { + Connection connection = null; + try { + connection = getConnection(jdbcUrl, userName, password); + if (null != connection) { + return true; + } + } catch (Exception e) { + log.info("Get connection failed:" + e.getMessage()); + } finally { + releaseConnection(connection); + } + return false; + } + + public static String executeFile(String jdbcUrl, String userName, String password, File sqlFile) { + Connection connection = getConnection(jdbcUrl, userName, password); + try { + batchExecute(connection, readSqlList(sqlFile)); + } catch (Exception e) { + log.error("sql脚本执行发生异常:{}",e.getMessage()); + return e.getMessage(); + }finally { + releaseConnection(connection); + } + return "success"; + } + + + /** + * 批量执行sql + * @param connection / + * @param sqlList / + */ + public static void batchExecute(Connection connection, List sqlList) throws SQLException { + Statement st = connection.createStatement(); + for (String sql : sqlList) { + if (sql.endsWith(";")) { + sql = sql.substring(0, sql.length() - 1); + } + st.addBatch(sql); + } + st.executeBatch(); + } + + /** + * 将文件中的sql语句以;为单位读取到列表中 + * @param sqlFile / + * @return / + * @throws Exception e + */ + private static List readSqlList(File sqlFile) throws Exception { + List sqlList = Lists.newArrayList(); + StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader( + new FileInputStream(sqlFile), StandardCharsets.UTF_8))) { + String tmp; + while ((tmp = reader.readLine()) != null) { + log.info("line:{}", tmp); + if (tmp.endsWith(";")) { + sb.append(tmp); + sqlList.add(sb.toString()); + sb.delete(0, sb.length()); + } else { + sb.append(tmp); + } + } + if (!"".endsWith(sb.toString().trim())) { + sqlList.add(sb.toString()); + } + } + + return sqlList; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ZipUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ZipUtils.class new file mode 100644 index 0000000..0031eda Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ZipUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ZipUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ZipUtils.java new file mode 100644 index 0000000..9ef08c7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/util/ZipUtils.java @@ -0,0 +1,159 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.util; + +import java.io.*; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; + +/** + * @author: ZhangHouYing + * @date: 2019-08-10 13:34 + */ +public class ZipUtils { + /** + * 解压文件 + * + * @param zipFilePath 解压文件路径 + * @param outputFolder 输出解压文件路径 + */ + public static void unZipIt(String zipFilePath, String outputFolder) { + byte[] buffer = new byte[1024]; + + File folder = new File(outputFolder); + if (!folder.exists()) { + folder.mkdir(); + } + try { + //get the zip file content + ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath)); + ZipEntry ze = zis.getNextEntry(); + while (ze != null) { + String fileName = ze.getName(); + File newFile = new File(outputFolder + File.separator + fileName); + System.out.println("file unzip : " + newFile.getAbsoluteFile()); + //大部分网络上的源码,这里没有判断子目录 + if (ze.isDirectory()) { + if (!newFile.mkdirs()) { + System.out.println("was not successful."); + } + } else { + if (!new File(newFile.getParent()).mkdirs()) { + System.out.println("was not successful."); + } + FileOutputStream fos = new FileOutputStream(newFile); + int len; + while ((len = zis.read(buffer)) != -1) { + fos.write(buffer, 0, len); + } + fos.close(); + } + ze = zis.getNextEntry(); + } + zis.closeEntry(); + zis.close(); + System.out.println("Done"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static void unzip(File source, String out) throws IOException { + try (ZipInputStream zis = new ZipInputStream(new FileInputStream(source))) { + + ZipEntry entry = zis.getNextEntry(); + + while (entry != null) { + + File file = new File(out, entry.getName()); + + if (entry.isDirectory()) { + if (!file.mkdirs()) { + System.out.println("was not successful."); + } + } else { + File parent = file.getParentFile(); + + if (!parent.exists()) { + if (!parent.mkdirs()) { + System.out.println("was not successful."); + } + } + + try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) { + + byte[] buffer = new byte[Math.toIntExact(entry.getSize())]; + + int location; + + while ((location = zis.read(buffer)) != -1) { + bos.write(buffer, 0, location); + } + } + } + entry = zis.getNextEntry(); + } + } + } + + /** + * 把所有文件都直接解压到指定目录(忽略子文件夹) + * + * @param zipFile + * @param folderPath + * @throws ZipException + * @throws IOException + */ + public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException { + File desDir = new File(folderPath); + if (!desDir.exists()) { + if (!desDir.mkdirs()) { + System.out.println("was not successful."); + } + } + ZipFile zf = new ZipFile(zipFile); + for (Enumeration entries = zf.entries(); entries.hasMoreElements(); ) { + ZipEntry entry = ((ZipEntry) entries.nextElement()); + InputStream in = zf.getInputStream(entry); + String str = folderPath; + File desFile = new File(str, java.net.URLEncoder.encode(entry.getName(), "UTF-8")); + + if (!desFile.exists()) { + File fileParentDir = desFile.getParentFile(); + if (!fileParentDir.exists()) { + if (!fileParentDir.mkdirs()) { + System.out.println("was not successful."); + } + } + } + + OutputStream out = new FileOutputStream(desFile); + byte[] buffer = new byte[1024 * 1024]; + int realLength = in.read(buffer); + while (realLength != -1) { + out.write(buffer, 0, realLength); + realLength = in.read(buffer); + } + + out.close(); + in.close(); + + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/MsgType.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/MsgType.class new file mode 100644 index 0000000..e78bc24 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/MsgType.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/MsgType.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/MsgType.java new file mode 100644 index 0000000..513e8c6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/MsgType.java @@ -0,0 +1,31 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.websocket; + +/** + * @author ZhangHouYing + * @date 2019-08-10 9:56 + */ +public enum MsgType { + /** 连接 */ + CONNECT, + /** 关闭 */ + CLOSE, + /** 信息 */ + INFO, + /** 错误 */ + ERROR +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/SocketMsg.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/SocketMsg.class new file mode 100644 index 0000000..b970c9b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/SocketMsg.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/SocketMsg.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/SocketMsg.java new file mode 100644 index 0000000..c9c470e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/SocketMsg.java @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.websocket; + +import lombok.Data; + +/** + * @author ZhangHouYing + * @date 2019-08-10 9:55 + */ +@Data +public class SocketMsg { + private Object msg; + private MsgType msgType; + + public SocketMsg(Object msg, MsgType msgType) { + this.msg = msg; + this.msgType = msgType; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/WebSocketServer.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/WebSocketServer.class new file mode 100644 index 0000000..4508c74 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/WebSocketServer.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/WebSocketServer.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/WebSocketServer.java new file mode 100644 index 0000000..d2c7920 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/mnt/websocket/WebSocketServer.java @@ -0,0 +1,139 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.mnt.websocket; + +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.CopyOnWriteArraySet; +/** + * @author ZhangHouYing + * @date 2019-08-10 15:46 + */ +@ServerEndpoint("/webSocket/{sid}") +@Slf4j +@Component +public class WebSocketServer { + + /** + * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 + */ + private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet(); + + /** + * 与某个客户端的连接会话,需要通过它来给客户端发送数据 + */ + private Session session; + + /** + * 接收sid + */ + private String sid=""; + /** + * 连接建立成功调用的方法 + * */ + @OnOpen + public void onOpen(Session session,@PathParam("sid") String sid) { + this.session = session; + //如果存在就先删除一个,防止重复推送消息 + for (WebSocketServer webSocket:webSocketSet) { + if (webSocket.sid.equals(sid)) { + webSocketSet.remove(webSocket); + } + } + webSocketSet.add(this); + this.sid=sid; + } + + /** + * 连接关闭调用的方法 + */ + @OnClose + public void onClose() { + webSocketSet.remove(this); + } + + /** + * 收到客户端消息后调用的方法 + * @param message 客户端发送过来的消息*/ + @OnMessage + public void onMessage(String message, Session session) { + log.info("收到来"+sid+"的信息:"+message); + //群发消息 + for (WebSocketServer item : webSocketSet) { + try { + item.sendMessage(message); + } catch (IOException e) { + log.error(e.getMessage(),e); + } + } + } + + @OnError + public void onError(Session session, Throwable error) { + log.error("发生错误"); + error.printStackTrace(); + } + /** + * 实现服务器主动推送 + */ + private void sendMessage(String message) throws IOException { + this.session.getBasicRemote().sendText(message); + } + + + /** + * 群发自定义消息 + * */ + public static void sendInfo(SocketMsg socketMsg, @PathParam("sid") String sid) throws IOException { + String message = JSONObject.toJSONString(socketMsg); + log.info("推送消息到"+sid+",推送内容:"+message); + for (WebSocketServer item : webSocketSet) { + try { + //这里可以设定只推送给这个sid的,为null则全部推送 + if(sid==null) { + item.sendMessage(message); + }else if(item.sid.equals(sid)){ + item.sendMessage(message); + } + } catch (IOException ignored) { } + } + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + WebSocketServer that = (WebSocketServer) o; + return Objects.equals(session, that.session) && + Objects.equals(sid, that.sid); + } + + @Override + public int hashCode() { + return Objects.hash(session, sid); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/ConfigBeanConfiguration.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/ConfigBeanConfiguration.class new file mode 100644 index 0000000..b03628c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/ConfigBeanConfiguration.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/ConfigBeanConfiguration.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/ConfigBeanConfiguration.java new file mode 100644 index 0000000..71493c6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/ConfigBeanConfiguration.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.security.config; + +import org.nl.common.security.config.bean.LoginProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @apiNote 配置文件转换Pojo类的 统一配置 类 + * @author: liaojinlong + * @date: 2020/6/10 19:04 + */ +@Configuration +public class ConfigBeanConfiguration { + + @Bean + @ConfigurationProperties(prefix = "login", ignoreUnknownFields = true) + public LoginProperties loginProperties() { + return new LoginProperties(); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCode.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCode.class new file mode 100644 index 0000000..d285872 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCode.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCode.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCode.java new file mode 100644 index 0000000..489dfb7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCode.java @@ -0,0 +1,61 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.security.config.bean; + +import lombok.Data; + +/** + * 登录验证码配置信息 + * + * @author: liaojinlong + * @date: 2020/6/10 18:53 + */ +@Data +public class LoginCode { + + /** + * 验证码配置 + */ + private LoginCodeEnum codeType; + /** + * 验证码有效期 分钟 + */ + private Long expiration = 2L; + /** + * 验证码内容长度 + */ + private int length = 2; + /** + * 验证码宽度 + */ + private int width = 111; + /** + * 验证码高度 + */ + private int height = 36; + /** + * 验证码字体 + */ + private String fontName; + /** + * 字体大小 + */ + private int fontSize = 25; + + public LoginCodeEnum getCodeType() { + return codeType; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCodeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCodeEnum.class new file mode 100644 index 0000000..5ccd720 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCodeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCodeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCodeEnum.java new file mode 100644 index 0000000..29eae65 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginCodeEnum.java @@ -0,0 +1,43 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.security.config.bean; + +/** + * 验证码配置枚举 + * + * @author: liaojinlong + * @date: 2020/6/10 17:40 + */ + +public enum LoginCodeEnum { + /** + * 算数 + */ + arithmetic, + /** + * 中文 + */ + chinese, + /** + * 中文闪图 + */ + chinese_gif, + /** + * 闪图 + */ + gif, + spec +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties$1.class new file mode 100644 index 0000000..2549d76 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties.class new file mode 100644 index 0000000..16b2b1d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties.java new file mode 100644 index 0000000..2babbf2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/config/bean/LoginProperties.java @@ -0,0 +1,111 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version loginCode.length.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-loginCode.length.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.security.config.bean; + +import cn.hutool.core.util.StrUtil; +import com.wf.captcha.*; +import com.wf.captcha.base.Captcha; +import lombok.Data; +import org.nl.common.exception.BadConfigurationException; + +import java.awt.*; +import java.util.Objects; + +/** + * 配置文件读取 + * + * @author liaojinlong + * @date loginCode.length0loginCode.length0/6/10 17:loginCode.length6 + */ +@Data +public class LoginProperties { + + /** + * 账号单用户 登录 + */ + private boolean singleLogin = false; + + private LoginCode loginCode; + /** + * 用户登录信息缓存 + */ + private boolean cacheEnable; + + public boolean isSingleLogin() { + return singleLogin; + } + + public boolean isCacheEnable() { + return cacheEnable; + } + + /** + * 获取验证码生产类 + * + * @return / + */ + public Captcha getCaptcha() { + if (Objects.isNull(loginCode)) { + loginCode = new LoginCode(); + if (Objects.isNull(loginCode.getCodeType())) { + loginCode.setCodeType(LoginCodeEnum.arithmetic); + } + } + return switchCaptcha(loginCode); + } + + /** + * 依据配置信息生产验证码 + * + * @param loginCode 验证码配置信息 + * @return / + */ + private Captcha switchCaptcha(LoginCode loginCode) { + Captcha captcha; + synchronized (this) { + switch (loginCode.getCodeType()) { + case arithmetic: + // 算术类型 https://gitee.com/whvse/EasyCaptcha + captcha = new ArithmeticCaptcha(loginCode.getWidth(), loginCode.getHeight()); + // 几位数运算,默认是两位 + captcha.setLen(loginCode.getLength()); + break; + case chinese: + captcha = new ChineseCaptcha(loginCode.getWidth(), loginCode.getHeight()); + captcha.setLen(loginCode.getLength()); + break; + case chinese_gif: + captcha = new ChineseGifCaptcha(loginCode.getWidth(), loginCode.getHeight()); + captcha.setLen(loginCode.getLength()); + break; + case gif: + captcha = new GifCaptcha(loginCode.getWidth(), loginCode.getHeight()); + captcha.setLen(loginCode.getLength()); + break; + case spec: + captcha = new SpecCaptcha(loginCode.getWidth(), loginCode.getHeight()); + captcha.setLen(loginCode.getLength()); + break; + default: + throw new BadConfigurationException("验证码配置信息错误!正确配置查看 LoginCodeEnum "); + } + } + if(StrUtil.isNotEmpty(loginCode.getFontName())){ + captcha.setFont(new Font(loginCode.getFontName(), Font.PLAIN, loginCode.getFontSize())); + } + return captcha; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/RedisListenerConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/RedisListenerConfig.class new file mode 100644 index 0000000..a4d273c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/RedisListenerConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/RedisListenerConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/RedisListenerConfig.java new file mode 100644 index 0000000..b5b0448 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/RedisListenerConfig.java @@ -0,0 +1,21 @@ +package org.nl.common.security.satoken; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; + +/** + * @author: lyd + * @description: redis监听配置 + * @Date: 2022/10/8 + */ +@Configuration +public class RedisListenerConfig { + @Bean + RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + return container; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SaTokenConfigure.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SaTokenConfigure.class new file mode 100644 index 0000000..d4aa04c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SaTokenConfigure.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SaTokenConfigure.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SaTokenConfigure.java new file mode 100644 index 0000000..ab83e17 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SaTokenConfigure.java @@ -0,0 +1,43 @@ +package org.nl.common.security.satoken; + +import cn.dev33.satoken.interceptor.SaInterceptor; +import cn.dev33.satoken.jwt.StpLogicJwtForSimple; +import cn.dev33.satoken.stp.StpLogic; +import cn.dev33.satoken.stp.StpUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author: lyd + * @description: sa-token的配置路由拦截 + * @Date: 2022-09-20 + */ +@Slf4j +@Configuration +public class SaTokenConfigure implements WebMvcConfigurer { + + // 白名单 + @Autowired + private SecurityProperties securityProperties; + + // Sa-Token 整合 jwt (Simple 简单模式) + @Bean + public StpLogic getStpLogicJwt() { + return new StpLogicJwtForSimple(); + } + + // 注册 Sa-Token 拦截器,打开注解式鉴权功能 + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 注册 Sa-Token 拦截器,打开注解式鉴权功能 + registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) + .addPathPatterns("/**") + .excludePathPatterns(securityProperties.getExcludes()); // 白名单 + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SecurityProperties.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SecurityProperties.class new file mode 100644 index 0000000..4e9c270 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SecurityProperties.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SecurityProperties.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SecurityProperties.java new file mode 100644 index 0000000..443f1c6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/SecurityProperties.java @@ -0,0 +1,20 @@ +package org.nl.common.security.satoken; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author: lyd + * @description: 白名单 - 统一放到yml管理 + * @Date: 2022/9/22 + */ +@Data +@Component +@ConfigurationProperties(prefix = "security") +public class SecurityProperties { + /** + * 排除路径 + */ + private String[] excludes; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/StpInterfaceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/StpInterfaceImpl.class new file mode 100644 index 0000000..0305d6d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/StpInterfaceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/StpInterfaceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/StpInterfaceImpl.java new file mode 100644 index 0000000..2bfd6aa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/StpInterfaceImpl.java @@ -0,0 +1,38 @@ +package org.nl.common.security.satoken; + +import cn.dev33.satoken.stp.StpInterface; +import org.nl.common.utils.SecurityUtils; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author: lyd + * @description: stp接口impl 自定义权限验证接口扩展 保证此类被springboot扫描,即可完成sa-token的自定义权限验证扩展 + * @Date: 2022-09-20 + */ +@Component +public class StpInterfaceImpl implements StpInterface { + + /** + * 用户权限获取 + * @param o login存入的值,此处存放用户id + * @param s + * @return + */ + @Override + public List getPermissionList(Object o, String s) { + return SecurityUtils.getCurrentUserPermissions(); + } + + /** + * 角色权限获取 - 数据库没有设计角色code,因此不推荐使用角色鉴权 + * @param o + * @param s + * @return + */ + @Override + public List getRoleList(Object o, String s) { + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/hint.md b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/hint.md new file mode 100644 index 0000000..627b958 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/satoken/hint.md @@ -0,0 +1,88 @@ +## 关于satoken的提示 +### 本系统采用两个session存放相关信息 +1、其中tokenSession存放的是 +提供公共模块使用,获取是Object可以直接强转此实体. +主要使用在 SecurityUtils类上,使用的key: userInfo +```java +@Data +public class CurrentUser implements Serializable { + @JsonSerialize(using = ToStringSerializer.class) + private String id; + + private String username; + + private Object user; + + private List permissions = new ArrayList<>(); +} +``` +2、Session存放的是UserDto,提供业务模块使用使用的key: UserDto +```java +@Getter +@Setter +public class UserDto extends BaseDTO implements Serializable { + @JsonSerialize(using = ToStringSerializer.class) + private String id; + + private Set roles; + + private Set jobs; + + private DeptSmallDto dept; + + private Long deptId; + + private String username; + + private String nickName; + + private String email; + + private String phone; + + private String gender; + + private String avatarName; + + private String avatarPath; + + private String extId; + + private String extuserId; + + + @JsonIgnore + private String password; + + private Boolean enabled; + + @JsonIgnore + private Boolean isAdmin = false; + + private Date pwdResetTime; +} +``` + +### 加密规则 +``` +SaSecureUtil.md5BySalt("123456", "salt") +``` + +### 另一种拦截 +``` +registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> { + System.out.println(SaHolder.getRequest().getRequestPath()); + // 登录验证 -- 排除多个路径 + SaRouter + // 获取所有的 + .match("/**") + // 排除下不需要拦截的 + .notMatch(securityProperties.getExcludes()) + // 对未排除的路径进行检查 + .check(() -> { + // 检查是否登录 是否有token + StpUtil.checkLogin(); + }); + })).addPathPatterns("/**"); + registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**"); +``` \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/service/UserCacheClean.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/service/UserCacheClean.java new file mode 100644 index 0000000..c16eed4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/security/service/UserCacheClean.java @@ -0,0 +1,49 @@ +package org.nl.common.security.service;///* +// * Copyright 2019-2020 the original author or authors. +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ +// +//package org.nl.common.security.service; +// +//import cn.hutool.core.util.StrUtil; +//import org.springframework.stereotype.Component; +// +///** +// * @author: liaojinlong +// * @date: 2020/6/11 18:01 +// * @apiNote: 用于清理 用户登录信息缓存,为防止Spring循环依赖与安全考虑 ,单独构成工具类 +// */ +//@Component +//public class UserCacheClean { +// +// /** +// * 清理特定用户缓存信息
+// * 用户信息变更时 +// * +// * @param userName / +// */ +// public void cleanUserCache(String userName) { +// if (StrUtil.isNotEmpty(userName)) { +//// UserDetailsServiceImpl.userDtoCache.remove(userName); +// } +// } +// +// /** +// * 清理所有用户的缓存信息
+// * ,如发生角色授权信息变化,可以简便的全部失效缓存 +// */ +//// public void cleanAll() { +//// UserDetailsServiceImpl.userDtoCache.clear(); +//// } +//} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CacheKey.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CacheKey.class new file mode 100644 index 0000000..17757a2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CacheKey.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CacheKey.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CacheKey.java new file mode 100644 index 0000000..ba14cf0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CacheKey.java @@ -0,0 +1,58 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +/** + * @author: liaojinlong + * @date: 2020/6/11 15:49 + * @apiNote: 关于缓存的Key集合 + */ +public interface CacheKey { + + /** + * 用户 + */ + String USER_ID = "user::id:"; + /** + * 数据 + */ + String DATA_USER = "data::user:"; + /** + * 菜单 + */ + String MENU_ID = "menu::id:"; + String MENU_USER = "menu::user:"; + /** + * 角色授权 + */ + String ROLE_AUTH = "role::auth:"; + /** + * 角色信息 + */ + String ROLE_ID = "role::id:"; + /** + * 部门 + */ + String DEPT_ID = "dept::id:"; + /** + * 岗位 + */ + String JOB_ID = "job::id:"; + /** + * 数据字典 + */ + String DICT_NAME = "dict::name:"; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CodeUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CodeUtil.class new file mode 100644 index 0000000..f7f9ecc Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CodeUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CodeUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CodeUtil.java new file mode 100644 index 0000000..56034c3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CodeUtil.java @@ -0,0 +1,19 @@ +package org.nl.common.utils; + +import org.nl.config.SpringContextHolder; +import org.nl.system.service.coderule.ISysCodeRuleService; + +import java.util.*; + +public class CodeUtil { + + public static String getNewCode(String ruleCode){ + String flag = "1"; + HashMap map = new HashMap<>(); + map.put("flag",flag); + map.put("code",ruleCode); + return SpringContextHolder.getBean(ISysCodeRuleService.class).codeDemo(map); + } + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ColUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ColUtil.class new file mode 100644 index 0000000..542b618 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ColUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ColUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ColUtil.java new file mode 100644 index 0000000..ad0aa1d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ColUtil.java @@ -0,0 +1,35 @@ +package org.nl.common.utils; + +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ColUtil { + private static final Logger log = LoggerFactory.getLogger(ColUtil.class); + + /** + * 转换mysql数据类型为java数据类型 + * + * @param type 数据库字段类型 + * @return String + */ + static String cloToJava(String type) { + Configuration config = getConfig(); + assert config != null; + return config.getString(type, "unknowType"); + } + + /** + * 获取配置信息 + */ + public static PropertiesConfiguration getConfig() { + try { + return new PropertiesConfiguration("generator.properties"); + } catch (ConfigurationException e) { + log.error(e.getMessage(), e); + } + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CopyUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CopyUtil.class new file mode 100644 index 0000000..15b8d2f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CopyUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CopyUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CopyUtil.java new file mode 100644 index 0000000..69f3153 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/CopyUtil.java @@ -0,0 +1,36 @@ +package org.nl.common.utils; + +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +/* + * @author ZZQ + * @Date 2022/12/1 3:35 下午 + */ +public class CopyUtil { + public static List copyList(final Collection sources, final Class clazz) { + if (sources == null) { + return new ArrayList(0); + } else { + List list = new ArrayList(sources.size()); + Iterator var3 = sources.iterator(); + + while(var3.hasNext()) { + Object source = var3.next(); + + try { + T dest = clazz.newInstance(); + BeanUtils.copyProperties(source, dest); + list.add(dest); + } catch (Throwable var6) { + } + } + return list; + } + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DateUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DateUtil.class new file mode 100644 index 0000000..32bc65e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DateUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DateUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DateUtil.java new file mode 100644 index 0000000..a80fd28 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DateUtil.java @@ -0,0 +1,160 @@ +/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.nl.common.utils; + +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +/** + * @author: liaojinlong + * @date: 2020/6/11 16:28 + * @apiNote: JDK 8 新日期类 格式化与字符串转换 工具类 + */ +public class DateUtil { + + public static final DateTimeFormatter DFY_MD_HMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + public static final DateTimeFormatter DFY_MD = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + /** + * LocalDateTime 转时间戳 + * + * @param localDateTime / + * @return / + */ + public static Long getDate(LocalDateTime localDateTime) { + return localDateTime.atZone(ZoneId.systemDefault()).toEpochSecond(); + } + + /** + * 时间戳转LocalDateTime + * + * @param Date / + * @return / + */ + public static LocalDateTime fromDate(Long Date) { + return LocalDateTime.ofEpochSecond(Date, 0, OffsetDateTime.now().getOffset()); + } + + /** + * LocalDateTime 转 Date + * Jdk8 后 不推荐使用 {@link Date} Date + * + * @param localDateTime / + * @return / + */ + public static Date toDate(LocalDateTime localDateTime) { + return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + } + + /** + * LocalDate 转 Date + * Jdk8 后 不推荐使用 {@link Date} Date + * + * @param localDate / + * @return / + */ + public static Date toDate(LocalDate localDate) { + return toDate(localDate.atTime(LocalTime.now(ZoneId.systemDefault()))); + } + + + /** + * Date转 LocalDateTime + * Jdk8 后 不推荐使用 {@link Date} Date + * + * @param date / + * @return / + */ + public static LocalDateTime toLocalDateTime(Date date) { + return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); + } + + /** + * 日期 格式化 + * + * @param localDateTime / + * @param patten / + * @return / + */ + public static String localDateTimeFormat(LocalDateTime localDateTime, String patten) { + DateTimeFormatter df = DateTimeFormatter.ofPattern(patten); + return df.format(localDateTime); + } + + /** + * 日期 格式化 + * + * @param localDateTime / + * @param df / + * @return / + */ + public static String localDateTimeFormat(LocalDateTime localDateTime, DateTimeFormatter df) { + return df.format(localDateTime); + } + + /** + * 日期格式化 yyyy-MM-dd HH:mm:ss + * + * @param localDateTime / + * @return / + */ + public static String localDateTimeFormatyMdHms(LocalDateTime localDateTime) { + return DFY_MD_HMS.format(localDateTime); + } + + /** + * 日期格式化 yyyy-MM-dd + * + * @param localDateTime / + * @return / + */ + public String localDateTimeFormatyMd(LocalDateTime localDateTime) { + return DFY_MD.format(localDateTime); + } + + /** + * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd + * + * @param localDateTime / + * @return / + */ + public static LocalDateTime parseLocalDateTimeFormat(String localDateTime, String pattern) { + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); + return LocalDateTime.from(dateTimeFormatter.parse(localDateTime)); + } + + /** + * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd + * + * @param localDateTime / + * @return / + */ + public static LocalDateTime parseLocalDateTimeFormat(String localDateTime, DateTimeFormatter dateTimeFormatter) { + return LocalDateTime.from(dateTimeFormatter.parse(localDateTime)); + } + + /** + * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd HH:mm:ss + * + * @param localDateTime / + * @return / + */ + public static LocalDateTime parseLocalDateTimeFormatyMdHms(String localDateTime) { + return LocalDateTime.from(DFY_MD_HMS.parse(localDateTime)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DesUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DesUtil.class new file mode 100644 index 0000000..a336958 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DesUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DesUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DesUtil.java new file mode 100644 index 0000000..35f7c49 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/DesUtil.java @@ -0,0 +1,129 @@ +package org.nl.common.utils; + +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + + +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.DESKeySpec; +import javax.crypto.spec.IvParameterSpec; +import java.io.IOException; +import java.security.SecureRandom; + +/** + * Des加密解密算法工具类 + */ +public class DesUtil { + //加密算法是des + private static final String ALGORITHM = "DES"; + //转换格式 + private static final String TRANSFORMATION = "DES/CBC/PKCS5Padding"; + + /** + * 加密 + * + * @param src 数据源 + * @param key 密钥,长度必须是8的倍数 + * @return 返回加密后的数据 + * @throws Exception 出错 + */ + public static byte[] encrypt(byte[] src, byte[] key) throws Exception { + // DES算法要求有一个可信任的随机数源 + SecureRandom sr = new SecureRandom(); + // 从原始密匙数据建立 DESKeySpec对象 + DESKeySpec dks = new DESKeySpec(key); + // 建立一个密匙工厂,然后用它把DESKeySpec转换成 + // 一个SecretKey对象 + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); + SecretKey securekey = keyFactory.generateSecret(dks); + // Cipher对象实际完成加密操作 + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + // 用密匙原始化Cipher对象 + cipher.init(Cipher.ENCRYPT_MODE, securekey, new IvParameterSpec(key)); + // 现在,获取数据并加密 + // 正式执行加密操作 + return cipher.doFinal(src); + } + + /** + * 解密 + * + * @param src 数据源 + * @param key 密钥,长度必须是8的倍数 + * @return 返回解密后的原始数据 + * @throws Exception 出错 + */ + public static byte[] decrypt(byte[] src, byte[] key) throws Exception { + // DES算法要求有一个可信任的随机数源 + SecureRandom sr = new SecureRandom(); + // 从原始密匙数据建立一个DESKeySpec对象 + DESKeySpec dks = new DESKeySpec(key); + // 建立一个密匙工厂,然后用它把DESKeySpec对象转换成 + // 一个SecretKey对象 + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); + SecretKey securekey = keyFactory.generateSecret(dks); + // Cipher对象实际完成解密操作 + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + // 用密匙原始化Cipher对象 + cipher.init(Cipher.DECRYPT_MODE, securekey, new IvParameterSpec(key)); + // 现在,获取数据并解密 + // 正式执行解密操作 + return cipher.doFinal(src); + } + + /** + * Description 根据键值进行加密 + * + * @param data + * @param key 加密键byte数组 + * @return + * @throws Exception + */ + public static String encrypt(String data, String key) throws Exception { + byte[] bt = encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8")); + + BASE64Encoder encoder = new BASE64Encoder(); + return encoder.encode(bt); + + //return new String(Base64.encodeBase64(bt), "UTF-8"); + } + + /** + * Description 根据键值进行解密 + * + * @param data + * @param key 加密键byte数组 + * @return + * @throws IOException + * @throws Exception + */ + public static String decrypt(String data, String key) throws Exception { + if (data == null) + return null; + BASE64Decoder decoder = new BASE64Decoder(); + byte[] buf = decoder.decodeBuffer(data); + + byte[] bt = decrypt(buf, key.getBytes("UTF-8")); + return new String(bt, "UTF-8"); + } + + + public static void main(String[] args) throws Exception { + //uL8fXioyU2M= + String key = "11111111"; + String pp = encrypt("123456", key); + System.out.println("加密:" + pp); + + String mm2 = decrypt(pp, key); + System.out.println("解密:" + mm2); + + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant$Url.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant$Url.class new file mode 100644 index 0000000..7a16bef Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant$Url.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant.class new file mode 100644 index 0000000..ef99b43 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant.java new file mode 100644 index 0000000..1a660fa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ElAdminConstant.java @@ -0,0 +1,47 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +/** + * 常用静态常量 + * + * @author Zheng Jie + * @date 2018-12-26 + */ +public class ElAdminConstant { + + /** + * 用于IP定位转换 + */ + public static final String REGION = "内网IP|内网IP"; + /** + * win 系统 + */ + public static final String WIN = "win"; + + /** + * mac 系统 + */ + public static final String MAC = "mac"; + + /** + * 常用接口 + */ + public static class Url { + // IP归属地查询 + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp?ip=%s&json=true"; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/EncryptUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/EncryptUtils.class new file mode 100644 index 0000000..ae404c4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/EncryptUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/EncryptUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/EncryptUtils.java new file mode 100644 index 0000000..6603817 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/EncryptUtils.java @@ -0,0 +1,100 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.DESKeySpec; +import javax.crypto.spec.IvParameterSpec; +import java.nio.charset.StandardCharsets; + +/** + * 加密 + * @author Zheng Jie + * @date 2018-11-23 + */ + +public class EncryptUtils { + + private static final String STR_PARAM = "Passw0rd"; + + private static Cipher cipher; + + private static final IvParameterSpec IV = new IvParameterSpec(STR_PARAM.getBytes(StandardCharsets.UTF_8)); + + private static DESKeySpec getDesKeySpec(String source) throws Exception { + if (source == null || source.length() == 0){ + return null; + } + cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); + String strKey = "Passw0rd"; + return new DESKeySpec(strKey.getBytes(StandardCharsets.UTF_8)); + } + + /** + * 对称加密 + */ + public static String desEncrypt(String source) throws Exception { + DESKeySpec desKeySpec = getDesKeySpec(source); + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); + SecretKey secretKey = keyFactory.generateSecret(desKeySpec); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, IV); + return byte2hex( + cipher.doFinal(source.getBytes(StandardCharsets.UTF_8))).toUpperCase(); + } + + /** + * 对称解密 + */ + public static String desDecrypt(String source) throws Exception { + byte[] src = hex2byte(source.getBytes(StandardCharsets.UTF_8)); + DESKeySpec desKeySpec = getDesKeySpec(source); + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); + SecretKey secretKey = keyFactory.generateSecret(desKeySpec); + cipher.init(Cipher.DECRYPT_MODE, secretKey, IV); + byte[] retByte = cipher.doFinal(src); + return new String(retByte); + } + + private static String byte2hex(byte[] inStr) { + String stmp; + StringBuilder out = new StringBuilder(inStr.length * 2); + for (byte b : inStr) { + stmp = Integer.toHexString(b & 0xFF); + if (stmp.length() == 1) { + // 如果是0至F的单位字符串,则添加0 + out.append("0").append(stmp); + } else { + out.append(stmp); + } + } + return out.toString(); + } + + private static byte[] hex2byte(byte[] b) { + int size = 2; + if ((b.length % size) != 0){ + throw new IllegalArgumentException("长度不是偶数"); + } + byte[] b2 = new byte[b.length / 2]; + for (int n = 0; n < b.length; n += size) { + String item = new String(b, n, 2); + b2[n / 2] = (byte) Integer.parseInt(item, 16); + } + return b2; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/FileUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/FileUtil.class new file mode 100644 index 0000000..b7a07e2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/FileUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/FileUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/FileUtil.java new file mode 100644 index 0000000..540c3c2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/FileUtil.java @@ -0,0 +1,352 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.poi.excel.BigExcelWriter; +import cn.hutool.poi.excel.ExcelUtil; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.security.MessageDigest; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * File工具类,扩展 hutool 工具包 + * + * @author Zheng Jie + * @date 2018-12-27 + */ +public class FileUtil extends cn.hutool.core.io.FileUtil { + + private static final Logger log = LoggerFactory.getLogger(FileUtil.class); + + /** + * 系统临时目录 + *
+ * windows 包含路径分割符,但Linux 不包含, + * 在windows \\==\ 前提下, + * 为安全起见 同意拼装 路径分割符, + *
+     *       java.io.tmpdir
+     *       windows : C:\Users/xxx\AppData\Local\Temp\
+     *       linux: /temp
+     * 
+ */ + public static final String SYS_TEM_DIR = System.getProperty("java.io.tmpdir") + File.separator; + /** + * 定义GB的计算常量 + */ + private static final int GB = 1024 * 1024 * 1024; + /** + * 定义MB的计算常量 + */ + private static final int MB = 1024 * 1024; + /** + * 定义KB的计算常量 + */ + private static final int KB = 1024; + + /** + * 格式化小数 + */ + private static final DecimalFormat DF = new DecimalFormat("0.00"); + + public static final String IMAGE = "图片"; + public static final String TXT = "文档"; + public static final String MUSIC = "音乐"; + public static final String VIDEO = "视频"; + public static final String OTHER = "其他"; + + + /** + * MultipartFile转File + */ + public static File toFile(MultipartFile multipartFile) { + // 获取文件名 + String fileName = multipartFile.getOriginalFilename(); + // 获取文件后缀 + String prefix = "." + getExtensionName(fileName); + File file = null; + try { + // 用uuid作为文件名,防止生成的临时文件重复 + //file = File.createTempFile(IdUtil.simpleUUID(), prefix); + file = new File(SYS_TEM_DIR + IdUtil.simpleUUID() + prefix); + // MultipartFile to File + multipartFile.transferTo(file); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + return file; + } + + /** + * 获取文件扩展名,不带 . + */ + public static String getExtensionName(String filename) { + if ((filename != null) && (filename.length() > 0)) { + int dot = filename.lastIndexOf('.'); + if ((dot > -1) && (dot < (filename.length() - 1))) { + return filename.substring(dot + 1); + } + } + return filename; + } + + /** + * Java文件操作 获取不带扩展名的文件名 + */ + public static String getFileNameNoEx(String filename) { + if ((filename != null) && (filename.length() > 0)) { + int dot = filename.lastIndexOf('.'); + if ((dot > -1) && (dot < (filename.length()))) { + return filename.substring(0, dot); + } + } + return filename; + } + + /** + * 文件大小转换 + */ + public static String getSize(long size) { + String resultSize; + if (size / GB >= 1) { + //如果当前Byte的值大于等于1GB + resultSize = DF.format(size / (float) GB) + "GB "; + } else if (size / MB >= 1) { + //如果当前Byte的值大于等于1MB + resultSize = DF.format(size / (float) MB) + "MB "; + } else if (size / KB >= 1) { + //如果当前Byte的值大于等于1KB + resultSize = DF.format(size / (float) KB) + "KB "; + } else { + resultSize = size + "B "; + } + return resultSize; + } + + /** + * inputStream 转 File + */ + static File inputStreamToFile(InputStream ins, String name) throws Exception { + File file = new File(SYS_TEM_DIR + name); + if (file.exists()) { + return file; + } + OutputStream os = new FileOutputStream(file); + int bytesRead; + int len = 8192; + byte[] buffer = new byte[len]; + while ((bytesRead = ins.read(buffer, 0, len)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.close(); + ins.close(); + return file; + } + + /** + * 将文件名解析成文件的上传路径 + */ + public static File upload(MultipartFile file, String filePath) { + Date date = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS"); + String name = getFileNameNoEx(file.getOriginalFilename()); + String suffix = getExtensionName(file.getOriginalFilename()); + String nowStr = "-" + format.format(date); + try { + String fileName = name + nowStr + "." + suffix; + String path = filePath + fileName; + // getCanonicalFile 可解析正确各种路径 + File dest = new File(path).getCanonicalFile(); + // 检测是否存在目录 + if (!dest.getParentFile().exists()) { + if (!dest.getParentFile().mkdirs()) { + System.out.println("was not successful."); + } + } + // 文件写入 + file.transferTo(dest); + return dest; + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return null; + } + + /** + * 导出excel + */ + public static void downloadExcel(List> list, HttpServletResponse response) { + try { + String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx"; + File file = new File(tempPath); + BigExcelWriter writer = ExcelUtil.getBigWriter(file); + // 一次性写出内容,使用默认样式,强制输出标题 + writer.write(list, true); + SXSSFSheet sheet = (SXSSFSheet) writer.getSheet(); + //上面需要强转SXSSFSheet 不然没有trackAllColumnsForAutoSizing方法 + sheet.trackAllColumnsForAutoSizing(); + //列宽自适应 + writer.autoSizeColumnAll(); + //response为HttpServletResponse对象 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 + response.setHeader("Content-Disposition", "attachment;filename=file.xlsx"); + ServletOutputStream out = response.getOutputStream(); + // 终止后删除临时文件 + file.deleteOnExit(); + writer.flush(out, true); + //此处记得关闭输出Servlet流 + IoUtil.close(out); + }catch(IOException e){ + log.error("下载文件失败[][]",e,e.getMessage()); + } + } + + public static String getFileType(String type) { + String documents = "txt doc pdf ppt pps xlsx xls docx"; + String music = "mp3 wav wma mpa ram ra aac aif m4a"; + String video = "avi mpg mpe mpeg asf wmv mov qt rm mp4 flv m4v webm ogv ogg"; + String image = "bmp dib pcp dif wmf gif jpg tif eps psd cdr iff tga pcd mpt png jpeg"; + if (image.contains(type)) { + return IMAGE; + } else if (documents.contains(type)) { + return TXT; + } else if (music.contains(type)) { + return MUSIC; + } else if (video.contains(type)) { + return VIDEO; + } else { + return OTHER; + } + } + + public static void checkSize(long maxSize, long size) { + // 1M + int len = 1024 * 1024; + if (size > (maxSize * len)) { + throw new BadRequestException(LangProcess.msg("universal_file")); + } + } + + /** + * 判断两个文件是否相同 + */ + public static boolean check(File file1, File file2) { + String img1Md5 = getMd5(file1); + String img2Md5 = getMd5(file2); + return img1Md5.equals(img2Md5); + } + + /** + * 判断两个文件是否相同 + */ + public static boolean check(String file1Md5, String file2Md5) { + return file1Md5.equals(file2Md5); + } + + private static byte[] getByte(File file) { + // 得到文件长度 + byte[] b = new byte[(int) file.length()]; + try { + InputStream in = new FileInputStream(file); + try { + System.out.println(in.read(b)); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } catch (FileNotFoundException e) { + log.error(e.getMessage(), e); + return null; + } + return b; + } + + private static String getMd5(byte[] bytes) { + // 16进制字符 + char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + try { + MessageDigest mdTemp = MessageDigest.getInstance("MD5"); + mdTemp.update(bytes); + byte[] md = mdTemp.digest(); + int j = md.length; + char[] str = new char[j * 2]; + int k = 0; + // 移位 输出字符串 + for (byte byte0 : md) { + str[k++] = hexDigits[byte0 >>> 4 & 0xf]; + str[k++] = hexDigits[byte0 & 0xf]; + } + return new String(str); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return null; + } + + /** + * 下载文件 + * + * @param request / + * @param response / + * @param file / + */ + public static void downloadFile(HttpServletRequest request, HttpServletResponse response, File file, boolean deleteOnExit) { + response.setCharacterEncoding(request.getCharacterEncoding()); + response.setContentType("application/octet-stream"); + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); + IOUtils.copy(fis, response.getOutputStream()); + response.flushBuffer(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } finally { + if (fis != null) { + try { + fis.close(); + if (deleteOnExit) { + file.deleteOnExit(); + } + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + } + + public static String getMd5(File file) { + return getMd5(getByte(file)); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/GenUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/GenUtil.class new file mode 100644 index 0000000..1e9f2b6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/GenUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/GenUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/GenUtil.java new file mode 100644 index 0000000..21796f2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/GenUtil.java @@ -0,0 +1,433 @@ +package org.nl.common.utils; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.template.*; +import lombok.extern.slf4j.Slf4j; +import org.nl.system.service.generator.dao.CodeColumnConfig; +import org.nl.system.service.generator.dao.CodeGenConfig; +import org.springframework.util.ObjectUtils; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.nl.common.utils.FileUtil.SYS_TEM_DIR; + +/** + * @author: lyd + * @description: 代码生成 + * @Date: 2022/12/2 + */ +@Slf4j +@SuppressWarnings({"unchecked", "all"}) +public class GenUtil { + private static final String TIMESTAMP = "Timestamp"; + + private static final String Date = "Date"; + + private static final String BIGDECIMAL = "BigDecimal"; + + public static final String PK = "PRI"; + + public static final String EXTRA = "auto_increment"; + + /** + * 获取后端代码模板名称 + * + * @return List + */ + private static List getAdminTemplateNames() { + List templateNames = new ArrayList<>(); + templateNames.add("Entity"); + templateNames.add("MySQLMapper"); + templateNames.add("Dto"); + templateNames.add("Mapper"); + templateNames.add("Controller"); + templateNames.add("QueryCriteria"); + templateNames.add("Service"); + templateNames.add("ServiceImpl"); + // templateNames.add("Repository"); + return templateNames; + } + + /** + * 获取前端代码模板名称 + * + * @return List + */ + private static List getFrontTemplateNames() { + List templateNames = new ArrayList<>(); + templateNames.add("index"); + templateNames.add("api"); + return templateNames; + } + + public static List> preview(List columns, CodeGenConfig genConfig) { + Map genMap = getGenMap(columns, genConfig); // 获取参数 + List> genList = new ArrayList<>(); + // 获取后端模版 + List templates = getAdminTemplateNames(); + TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); + for (String templateName : templates) { // 创建模板 + Map map = new HashMap<>(1); + Template template = engine.getTemplate("generator/admin/" + templateName + ".ftl"); + map.put("content", template.render(genMap)); + map.put("name", templateName); + genList.add(map); + } + // 获取前端模版 + templates = getFrontTemplateNames(); + for (String templateName : templates) { + Map map = new HashMap<>(1); + Template template = engine.getTemplate("generator/front/" + templateName + ".ftl"); + map.put(templateName, template.render(genMap)); + map.put("content", template.render(genMap)); + map.put("name", templateName); + genList.add(map); + } + return genList; + } + + /** + * 定义后端文件路径以及名称 + */ + private static String getAdminFilePath(String templateName, CodeGenConfig genConfig, String className, String rootPath) { + String projectPath = rootPath + File.separator + genConfig.getModule_name() + File.separator; + String packagePath = projectPath + "src" + File.separator + "main" + File.separator + "java" + File.separator; + if (!ObjectUtils.isEmpty(genConfig.getPack())) { + packagePath += genConfig.getPack().replace(".", File.separator) + File.separator; + } + + if ("Entity".equals(templateName)) { + return packagePath + "service" + File.separator + "dao" + File.separator + className + ".java"; + } + + if ("Controller".equals(templateName)) { + return packagePath + "controller" + File.separator + className + "Controller.java"; + } + + if ("Service".equals(templateName)) { + return packagePath + "service" + File.separator + "I" + className + "Service.java"; + } + + if ("ServiceImpl".equals(templateName)) { + return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java"; + } + + if ("Dto".equals(templateName)) { + return packagePath + "service" + File.separator + "dto" + File.separator + className + "Dto.java"; + } + + if ("QueryCriteria".equals(templateName)) { + return packagePath + "service" + File.separator + "dto" + File.separator + className + "Query.java"; + } + + if ("Mapper".equals(templateName)) { + return packagePath + "service" + File.separator + "dao" + File.separator + "mapper" + File.separator + className + "Mapper.java"; + } + + if ("MySQLMapper".equals(templateName)) { + return packagePath + "service" + File.separator + "dao" + File.separator + "mapper" + File.separator + className + "Mapper.xml"; + } + + return null; + } + + /** + * 定义前端文件路径以及名称 + */ + private static String getFrontFilePath(String templateName, String apiPath, String path, String apiName) { + + if ("api".equals(templateName)) { + return path + File.separator + apiName + ".js"; + } + + if ("index".equals(templateName)) { + return path + File.separator + "index.vue"; + } + + return null; + } + + // 获取模版数据 + private static Map getGenMap(List columnInfos, CodeGenConfig genConfig) { + // 存储模版字段数据 + Map genMap = new HashMap<>(16); + // 接口别名 + genMap.put("apiAlias", genConfig.getApi_alias()); + // 包名称 + genMap.put("package", genConfig.getPack()); + // 模块名称 + genMap.put("moduleName", genConfig.getModule_name()); + // 作者 + genMap.put("author", genConfig.getAuthor()); + // 创建日期 + genMap.put("date", LocalDate.now().toString()); + // 表名 + genMap.put("tableName", genConfig.getTable_name()); + // 大写开头的类名 + String className = StringUtils.toCapitalizeCamelCase(genConfig.getTable_name()); + // 小写开头的类名 + String changeClassName = StringUtils.toCamelCase(genConfig.getTable_name()); + // 判断是否去除表前缀 + if (StrUtil.isNotEmpty(genConfig.getPrefix())) { + className = StringUtils.toCapitalizeCamelCase(StrUtil.removePrefix(genConfig.getTable_name(), genConfig.getPrefix())); + changeClassName = StringUtils.toCamelCase(StrUtil.removePrefix(genConfig.getTable_name(), genConfig.getPrefix())); + } + // 保存类名 + genMap.put("className", className); // 驼峰命名 + // 保存小写开头的类名 + genMap.put("changeClassName", changeClassName); + // 存在 Timestamp 字段 + genMap.put("hasTimestamp", false); + // 查询类中存在 Timestamp 字段 + genMap.put("queryHasTimestamp", false); + // 存在 BigDecimal 字段 + genMap.put("hasBigDecimal", false); + // 查询类中存在 BigDecimal 字段 + genMap.put("queryHasBigDecimal", false); + // 是否需要创建查询 + genMap.put("hasQuery", false); + // 是否有主键 + genMap.put("hasPk", false); + // 自增主键 + genMap.put("auto", false); + genMap.put("hasDate", false); + // 存在字典 + genMap.put("hasDict", false); + // 存在日期注解 + genMap.put("hasDateAnnotation", false); + // 保存字段信息 + List> columns = new ArrayList<>(); + // 保存查询字段的信息 + List> queryColumns = new ArrayList<>(); + // 存储字典信息 + List dicts = new ArrayList<>(); + // 存储 between 信息 + List> betweens = new ArrayList<>(); + // 存储不为空的字段信息 + List> isNotNullColumns = new ArrayList<>(); + + for (CodeColumnConfig column : columnInfos) { // 遍历所有字段 + Map listMap = new HashMap<>(16); + // 字段描述 + listMap.put("remark", column.getRemark()); + // 字段类型 + listMap.put("columnKey", column.getKey_type()); + // 主键类型 + String colType = ColUtil.cloToJava(column.getColumn_type()); + // 小写开头的字段名 - 转驼峰 +// String changeColumnName = StringUtils.toCamelCase(column.getColumnName()); + String changeColumnName = column.getColumn_name(); + // 大写开头的字段名 + String capitalColumnName = StringUtils.toCapitalizeCamelCase(column.getColumn_name()); + if (PK.equals(column.getKey_type())) { // 如果是主键 + genMap.put("hasPk", true); + // 存储主键类型 + genMap.put("pkColumnType", colType); + // 存储小写开头的字段名 + genMap.put("pkChangeColName", changeColumnName); + // 存储大写开头的字段名 + genMap.put("pkCapitalColName", capitalColumnName); + } + // 是否存在 Timestamp 类型的字段 + if (TIMESTAMP.equals(colType)) { + genMap.put("hasTimestamp", true); + } + // 是否存在 BigDecimal 类型的字段 + if (BIGDECIMAL.equals(colType)) { + genMap.put("hasBigDecimal", true); + } + // 主键是否自增 + if (EXTRA.equals(column.getExtra())) { + genMap.put("auto", true); + } + // 主键存在字典 + if (StrUtil.isNotEmpty(column.getDict_name())) { + genMap.put("hasDict", true); + dicts.add(column.getDict_name()); + } + + // 存储字段类型 + listMap.put("columnType", colType); + // 存储字原始段名称 + listMap.put("columnName", column.getColumn_name()); + // 不为空 + listMap.put("istNotNull", column.getNot_null()); + // 字段列表显示 + listMap.put("columnShow", column.getList_show()); + // 表单显示 + listMap.put("formShow", column.getForm_show()); + // 表单组件类型 + listMap.put("formType", StrUtil.isNotEmpty(column.getForm_type()) ? column.getForm_type() : "Input"); + // 小写开头的字段名称 + listMap.put("changeColumnName", changeColumnName); + //大写开头的字段名称 + listMap.put("capitalColumnName", capitalColumnName); + // 字典名称 + listMap.put("dictName", column.getDict_name()); + // 日期注解 + listMap.put("dateAnnotation", column.getDate_annotation()); + if (StrUtil.isNotEmpty(column.getDate_annotation())) { + genMap.put("hasDateAnnotation", true); + } + // 添加非空字段信息 + if (column.getNot_null()) { + isNotNullColumns.add(listMap); + } + // 判断是否有查询,如有则把查询的字段set进columnQuery + if (!StrUtil.isEmpty(column.getQuery_type())) { + // 查询类型 + listMap.put("queryType", column.getQuery_type()); + // 是否存在查询 + genMap.put("hasQuery", true); + if (TIMESTAMP.equals(colType)) { + // 查询中存储 Timestamp 类型 + genMap.put("queryHasTimestamp", true); + } + if (BIGDECIMAL.equals(colType)) { + // 查询中存储 BigDecimal 类型 + genMap.put("queryHasBigDecimal", true); + } + if ("between".equalsIgnoreCase(column.getQuery_type())) { + betweens.add(listMap); + } else { + // 添加到查询列表中 + queryColumns.add(listMap); + } + } + // 添加到字段列表中 + columns.add(listMap); + } + // 保存字段列表 + genMap.put("columns", columns); + // 保存查询列表 + genMap.put("queryColumns", queryColumns); + // 保存字段列表 + genMap.put("dicts", dicts); + // 保存查询列表 + genMap.put("betweens", betweens); + // 保存非空字段信息 + genMap.put("isNotNullColumns", isNotNullColumns); + return genMap; + } + + /** + * 打包下载 + * @param columns + * @param genConfig + * @return + * @throws IOException + */ + public static String download(List columns, CodeGenConfig genConfig) throws IOException { + // 拼接的路径:/tmpnladmin-gen-temp/,这个路径在Linux下需要root用户才有权限创建,非root用户会权限错误而失败,更改为: /tmp/nladmin-gen-temp/ + // String tempPath =SYS_TEM_DIR + "nladmin-gen-temp" + File.separator + genConfig.getTableName() + File.separator; + String tempPath = SYS_TEM_DIR + "nladmin-gen-temp" + File.separator + genConfig.getTable_name() + File.separator; + Map genMap = getGenMap(columns, genConfig); + TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); + // 生成后端代码 + List templates = getAdminTemplateNames(); + for (String templateName : templates) { + Template template = engine.getTemplate("generator/admin/" + templateName + ".ftl"); + String filePath = getAdminFilePath(templateName, genConfig, genMap.get("className").toString(), tempPath + "eladmin" + File.separator); + assert filePath != null; + File file = new File(filePath); + // 如果非覆盖生成 + if (!genConfig.getCover() && FileUtil.exist(file)) { + continue; + } + // 生成代码 + genFile(file, template, genMap); + } + // 生成前端代码 + templates = getFrontTemplateNames(); + for (String templateName : templates) { + Template template = engine.getTemplate("generator/front/" + templateName + ".ftl"); + String path = tempPath + "nladmin-web" + File.separator; + String apiPath = path + "src" + File.separator + "api" + File.separator; + String srcPath = path + "src" + File.separator + "views" + File.separator + genMap.get("changeClassName").toString() + File.separator; + String filePath = getFrontFilePath(templateName, apiPath, srcPath, genMap.get("changeClassName").toString()); + assert filePath != null; + File file = new File(filePath); + // 如果非覆盖生成 + if (!genConfig.getCover() && FileUtil.exist(file)) { + continue; + } + // 生成代码 + genFile(file, template, genMap); + } + return tempPath; + } + + /** + * 生成文件 + * @param file + * @param template + * @param map + * @throws IOException + */ + private static void genFile(File file, Template template, Map map) throws IOException { + // 生成目标文件 + Writer writer = null; + try { + FileUtil.touch(file); + writer = new FileWriter(file); + template.render(map, writer); + } catch (TemplateException | IOException e) { + throw new RuntimeException(e); + } finally { + assert writer != null; + writer.close(); + } + } + + /** + * 生成代码 + * @param columnInfos + * @param genConfig + * @throws IOException + */ + public static void generatorCode(List columnInfos, CodeGenConfig genConfig) throws IOException { + Map genMap = getGenMap(columnInfos, genConfig); + TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); + // 生成后端代码 + List templates = getAdminTemplateNames(); + for (String templateName : templates) { + Template template = engine.getTemplate("generator/admin/" + templateName + ".ftl"); + String filePath = getAdminFilePath(templateName, genConfig, genMap.get("className").toString(), System.getProperty("user.dir")); + + assert filePath != null; + File file = new File(filePath); + + // 如果非覆盖生成 + if (!genConfig.getCover() && FileUtil.exist(file)) { + continue; + } + // 生成代码 + genFile(file, template, genMap); + } + + // 生成前端代码 + templates = getFrontTemplateNames(); + for (String templateName : templates) { + Template template = engine.getTemplate("generator/front/" + templateName + ".ftl"); + String filePath = getFrontFilePath(templateName, genConfig.getApi_path(), genConfig.getPath(), genMap.get("changeClassName").toString()); + + assert filePath != null; + File file = new File(filePath); + + // 如果非覆盖生成 + if (!genConfig.getCover() && FileUtil.exist(file)) { + continue; + } + // 生成代码 + genFile(file, template, genMap); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/PageUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/PageUtil.class new file mode 100644 index 0000000..4db891f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/PageUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/PageUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/PageUtil.java new file mode 100644 index 0000000..2949467 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/PageUtil.java @@ -0,0 +1,70 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import org.springframework.data.domain.Page; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 分页工具 + * @author Zheng Jie + * @date 2018-12-10 + */ +public class PageUtil extends cn.hutool.core.util.PageUtil { + + /** + * List 分页 + */ + public static List toPage(int page, int size , List list) { + int fromIndex = page * size; + int toIndex = page * size + size; + if(fromIndex > list.size()){ + return new ArrayList(); + } else if(toIndex >= list.size()) { + return list.subList(fromIndex,list.size()); + } else { + return list.subList(fromIndex,toIndex); + } + } + + /** + * Page 数据处理,预防redis反序列化报错 + */ + public static Map toPage(Page page) { + Map map = new LinkedHashMap<>(2); + map.put("content",page.getContent()); + map.put("totalElements",page.getTotalElements()); + return map; + } + + + /** + * 自定义分页 + */ + public static Map toPage(Object object, Object totalElements) { + Map map = new LinkedHashMap<>(2); + map.put("content",object); + map.put("totalElements",totalElements); + return map; + } + + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RedisUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RedisUtils.class new file mode 100644 index 0000000..ec5b109 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RedisUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RedisUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RedisUtils.java new file mode 100644 index 0000000..ec2d2bb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RedisUtils.java @@ -0,0 +1,710 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisConnectionUtils; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * @author / + */ +@Component +@SuppressWarnings({"unchecked", "all"}) +public class RedisUtils { + private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); + private RedisTemplate redisTemplate; + /* @Value("${jwt.online-key}")*/ + private String onlineKey; + + public RedisUtils(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + return true; + } + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @param timeUnit 单位 + */ + public boolean expire(String key, long time, TimeUnit timeUnit) { + try { + if (time > 0) { + redisTemplate.expire(key, time, timeUnit); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + return true; + } + + /** + * 根据 key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(Object key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 查找匹配key + * + * @param pattern key + * @return / + */ + public List scan(String pattern) { + ScanOptions options = ScanOptions.scanOptions().match(pattern).build(); + RedisConnectionFactory factory = redisTemplate.getConnectionFactory(); + RedisConnection rc = Objects.requireNonNull(factory).getConnection(); + Cursor cursor = rc.scan(options); + List result = new ArrayList<>(); + while (cursor.hasNext()) { + result.add(new String(cursor.next())); + } + try { + RedisConnectionUtils.releaseConnection(rc, factory); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 分页查询 key + * + * @param patternKey key + * @param page 页码 + * @param size 每页数目 + * @return / + */ + public List findKeysForPage(String patternKey, int page, int size) { + ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); + RedisConnectionFactory factory = redisTemplate.getConnectionFactory(); + RedisConnection rc = Objects.requireNonNull(factory).getConnection(); + Cursor cursor = rc.scan(options); + List result = new ArrayList<>(size); + int tmpIndex = 0; + int fromIndex = page * size; + int toIndex = page * size + size; + while (cursor.hasNext()) { + if (tmpIndex >= fromIndex && tmpIndex < toIndex) { + result.add(new String(cursor.next())); + tmpIndex++; + continue; + } + // 获取到满足条件的数据后,就可以退出了 + if (tmpIndex >= toIndex) { + break; + } + tmpIndex++; + cursor.next(); + } + try { + RedisConnectionUtils.releaseConnection(rc, factory); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + public void del(String... keys) { + if (keys != null && keys.length > 0) { + if (keys.length == 1) { + boolean result = redisTemplate.delete(keys[0]); + log.debug("--------------------------------------------"); + log.debug(new StringBuilder("删除缓存:").append(keys[0]).append(",结果:").append(result).toString()); + log.debug("--------------------------------------------"); + } else { + Set keySet = new HashSet<>(); + for (String key : keys) { + keySet.addAll(redisTemplate.keys(key)); + } + long count = redisTemplate.delete(keySet); + log.debug("--------------------------------------------"); + log.debug("成功删除缓存:" + keySet.toString()); + log.debug("缓存删除数量:" + count + "个"); + log.debug("--------------------------------------------"); + } + } + } + + // ============================String============================= + + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 批量获取 + * + * @param keys + * @return + */ + public List multiGet(List keys) { + List list = redisTemplate.opsForValue().multiGet(Sets.newHashSet(keys)); + List resultList = Lists.newArrayList(); + Optional.ofNullable(list).ifPresent(e-> list.forEach(ele-> Optional.ofNullable(ele).ifPresent(resultList::add))); + return resultList; + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间 + * @param timeUnit 类型 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time, TimeUnit timeUnit) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, timeUnit); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + // ================================Map================================= + + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + // ============================set============================= + + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + // ===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return / + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + return redisTemplate.opsForList().remove(key, count, value); + } catch (Exception e) { + log.error(e.getMessage(), e); + return 0; + } + } + + /** + * @param prefix 前缀 + * @param ids id + */ + public void delByKeys(String prefix, Set ids) { + Set keys = new HashSet<>(); + /* for (String id : ids) { + keys.addAll(redisTemplate.keys(new StringBuffer(prefix).append(id).toString())); + }*/ + long count = redisTemplate.delete(keys); + // 此处提示可自行删除 + log.debug("--------------------------------------------"); + log.debug("成功删除缓存:" + keys.toString()); + log.debug("缓存删除数量:" + count + "个"); + log.debug("--------------------------------------------"); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RequestHolder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RequestHolder.class new file mode 100644 index 0000000..51a3400 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RequestHolder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RequestHolder.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RequestHolder.java new file mode 100644 index 0000000..27352b9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RequestHolder.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + +/** + * 获取 HttpServletRequest + * @author Zheng Jie + * @date 2018-11-24 + */ +public class RequestHolder { + + public static HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils$RsaKeyPair.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils$RsaKeyPair.class new file mode 100644 index 0000000..91c126b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils$RsaKeyPair.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils.class new file mode 100644 index 0000000..b963a4b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils.java new file mode 100644 index 0000000..96a88f8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/RsaUtils.java @@ -0,0 +1,181 @@ +package org.nl.common.utils; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +/** + * @author https://www.cnblogs.com/nihaorz/p/10690643.html + * @description Rsa 工具类,公钥私钥生成,加解密 + * @date 2020-05-18 + **/ +public class RsaUtils { + + private static final String SRC = "123456"; + + public static void main(String[] args) throws Exception { + System.out.println("\n"); + RsaKeyPair keyPair = generateKeyPair(); + System.out.println("公钥:" + keyPair.getPublicKey()); + System.out.println("私钥:" + keyPair.getPrivateKey()); + System.out.println("\n"); + test1(keyPair); + System.out.println("\n"); + test2(keyPair); + System.out.println("\n"); + } + + /** + * 公钥加密私钥解密 + */ + private static void test1(RsaKeyPair keyPair) throws Exception { + System.out.println("***************** 公钥加密私钥解密开始 *****************"); + String text1 = encryptByPublicKey(keyPair.getPublicKey(), RsaUtils.SRC); + String text2 = decryptByPrivateKey(keyPair.getPrivateKey(), text1); + System.out.println("加密前:" + RsaUtils.SRC); + System.out.println("加密后:" + text1); + System.out.println("解密后:" + text2); + if (RsaUtils.SRC.equals(text2)) { + System.out.println("解密字符串和原始字符串一致,解密成功"); + } else { + System.out.println("解密字符串和原始字符串不一致,解密失败"); + } + System.out.println("***************** 公钥加密私钥解密结束 *****************"); + } + + /** + * 私钥加密公钥解密 + * @throws Exception / + */ + private static void test2(RsaKeyPair keyPair) throws Exception { + System.out.println("***************** 私钥加密公钥解密开始 *****************"); + String text1 = encryptByPrivateKey(keyPair.getPrivateKey(), RsaUtils.SRC); + String text2 = decryptByPublicKey(keyPair.getPublicKey(), text1); + System.out.println("加密前:" + RsaUtils.SRC); + System.out.println("加密后:" + text1); + System.out.println("解密后:" + text2); + if (RsaUtils.SRC.equals(text2)) { + System.out.println("解密字符串和原始字符串一致,解密成功"); + } else { + System.out.println("解密字符串和原始字符串不一致,解密失败"); + } + System.out.println("***************** 私钥加密公钥解密结束 *****************"); + } + + /** + * 公钥解密 + * + * @param publicKeyText 公钥 + * @param text 待解密的信息 + * @return / + * @throws Exception / + */ + public static String decryptByPublicKey(String publicKeyText, String text) throws Exception { + X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + } + + /** + * 私钥加密 + * + * @param privateKeyText 私钥 + * @param text 待加密的信息 + * @return / + * @throws Exception / + */ + public static String encryptByPrivateKey(String privateKeyText, String text) throws Exception { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(text.getBytes()); + return Base64.encodeBase64String(result); + } + + /** + * 私钥解密 + * + * @param privateKeyText 私钥 + * @param text 待解密的文本 + * @return / + * @throws Exception / + */ + public static String decryptByPrivateKey(String privateKeyText, String text) throws Exception { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + } + + /** + * 公钥加密 + * + * @param publicKeyText 公钥 + * @param text 待加密的文本 + * @return / + */ + public static String encryptByPublicKey(String publicKeyText, String text) throws Exception { + X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(text.getBytes()); + return Base64.encodeBase64String(result); + } + + /** + * 构建RSA密钥对 + * + * @return / + * @throws NoSuchAlgorithmException / + */ + public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(1024); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); + String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded()); + String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded()); + return new RsaKeyPair(publicKeyString, privateKeyString); + } + + + /** + * RSA密钥对对象 + */ + public static class RsaKeyPair { + + private final String publicKey; + private final String privateKey; + + public RsaKeyPair(String publicKey, String privateKey) { + this.publicKey = publicKey; + this.privateKey = privateKey; + } + + public String getPublicKey() { + return publicKey; + } + + public String getPrivateKey() { + return privateKey; + } + + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/SecurityUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/SecurityUtils.class new file mode 100644 index 0000000..7da9349 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/SecurityUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/SecurityUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/SecurityUtils.java new file mode 100644 index 0000000..b434369 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/SecurityUtils.java @@ -0,0 +1,87 @@ +package org.nl.common.utils; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.dto.CurrentUser; + +import java.util.List; + +/** + * @author: lyd + * @description: 获取当前用户的信息 - 前提下在登录之后将数据存储到session + * @Date: + */ +@Slf4j +public class SecurityUtils { + + /** + * 获取系统用户 - CurrentUser + * + * @return 系统用户 + */ + public static CurrentUser getCurrentUser() { + try { + JSONObject json = (JSONObject) StpUtil.getExtra("loginInfo"); + if (ObjectUtil.isNotEmpty(json)) { + return json.toBean(CurrentUser.class); + } + } catch (Exception e) { + return new CurrentUser(); + } + return null; + } + + /** + * 获取系统用户名称 + * + * @return 系统用户名称 + */ + public static String getCurrentUsername() { + return getCurrentUser().getUsername(); + } + + /** + * 获取系统用户名称 + * + * @return 系统用户名称 + */ + public static String getCurrentNickName() { + return getCurrentUser().getPresonName(); + } + + /** + * 获取系统用户Id + * + * @return 系统用户Id + */ + public static String getCurrentUserId() { + return getCurrentUser().getId(); + } + + /** + * 获取系统用户Id + * + * @return 系统用户Id + */ + public static Long getDeptId() { +// return getCurrentUser().getUser().getDept().getId(); + return 1L; + } + + /** + * 获取当前用户权限 + * + * @return 权限列表 + */ + public static List getCurrentUserPermissions() { + JSONObject json = (JSONObject) StpUtil.getExtra("loginInfo"); + JSONArray permissions = json.getJSONArray("permissions"); + if (permissions.size() > 0) { + return permissions.toList(String.class); + } + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/StringUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/StringUtils.class new file mode 100644 index 0000000..9d5b939 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/StringUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/StringUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/StringUtils.java new file mode 100644 index 0000000..f3f5e42 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/StringUtils.java @@ -0,0 +1,273 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; +import net.dreamlu.mica.ip2region.core.IpInfo; +import nl.basjes.parse.useragent.UserAgent; +import nl.basjes.parse.useragent.UserAgentAnalyzer; +import org.nl.config.ElAdminProperties; +import org.nl.config.SpringContextHolder; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.UnknownHostException; +import java.util.Calendar; +import java.util.Date; +import java.util.Enumeration; + +/** + * @author Zheng Jie + * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类 + */ +@Slf4j +public class StringUtils { + + private static final char SEPARATOR = '_'; + private static final String UNKNOWN = "unknown"; + + /** + * 注入bean + */ + private final static Ip2regionSearcher IP_SEARCHER = SpringContextHolder.getBean(Ip2regionSearcher.class); + + + private static final UserAgentAnalyzer USER_AGENT_ANALYZER = UserAgentAnalyzer + .newBuilder() + .hideMatcherLoadStats() + .withCache(10000) + .withField(UserAgent.AGENT_NAME_VERSION) + .build(); + + /** + * 驼峰命名法工具 + * + * @return toCamelCase(" hello_world ") == "helloWorld" + * toCapitalizeCamelCase("hello_world") == "HelloWorld" + * toUnderScoreCase("helloWorld") = "hello_world" + */ + public static String toCamelCase(String s) { + if (s == null) { + return null; + } + + s = s.toLowerCase(); + + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == SEPARATOR) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + + return sb.toString(); + } + + /** + * 驼峰命名法工具 + * + * @return toCamelCase(" hello_world ") == "helloWorld" + * toCapitalizeCamelCase("hello_world") == "HelloWorld" + * toUnderScoreCase("helloWorld") = "hello_world" + */ + public static String toCapitalizeCamelCase(String s) { + if (s == null) { + return null; + } + s = toCamelCase(s); + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + + /** + * 驼峰命名法工具 + * + * @return toCamelCase(" hello_world ") == "helloWorld" + * toCapitalizeCamelCase("hello_world") == "HelloWorld" + * toUnderScoreCase("helloWorld") = "hello_world" + */ + static String toUnderScoreCase(String s) { + if (s == null) { + return null; + } + + StringBuilder sb = new StringBuilder(); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + boolean nextUpperCase = true; + + if (i < (s.length() - 1)) { + nextUpperCase = Character.isUpperCase(s.charAt(i + 1)); + } + + if ((i > 0) && Character.isUpperCase(c)) { + if (!upperCase || !nextUpperCase) { + sb.append(SEPARATOR); + } + upperCase = true; + } else { + upperCase = false; + } + + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 获取ip地址 + */ + public static String getIp(HttpServletRequest request) { + // TODO 不解析IP地址 + if(true){ + return "127.0.0.1"; + } + + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + String comma = ","; + String localhost = "127.0.0.1"; + if (ip.contains(comma)) { + ip = ip.split(",")[0]; + } + if (localhost.equals(ip)) { + // 获取本机真正的ip地址 + try { + ip = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + log.error(e.getMessage(), e); + } + } + return ip; + } + + /** + * 根据ip获取详细地址 + */ + public static String getCityInfo(String ip) { + if (ElAdminProperties.ipLocal) { + // return getLocalCityInfo(ip); + return "局域网"; + } else { + return "局域网"; + // return getHttpCityInfo(ip); + } + } + + /** + * 根据ip获取详细地址 + */ + public static String getHttpCityInfo(String ip) { + String api = String.format(ElAdminConstant.Url.IP_URL, ip); + JSONObject object = JSONUtil.parseObj(HttpUtil.get(api)); + return object.get("addr", String.class); + } + + /** + * 根据ip获取详细地址 + */ + public static String getLocalCityInfo(String ip) { + IpInfo ipInfo = IP_SEARCHER.memorySearch(ip); + if(ipInfo != null){ + return ipInfo.getAddress(); + } + return null; + + } + + public static String getBrowser(HttpServletRequest request) { + UserAgent.ImmutableUserAgent userAgent = USER_AGENT_ANALYZER.parse(request.getHeader("User-Agent")); + return userAgent.get(UserAgent.AGENT_NAME_VERSION).getValue(); + } + + /** + * 获得当天是周几 + */ + public static String getWeekDay() { + String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date()); + + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) { + w = 0; + } + return weekDays[w]; + } + + /** + * 获取当前机器的IP + * + * @return / + */ + public static String getLocalIp() { + try { + InetAddress candidateAddress = null; + // 遍历所有的网络接口 + for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements();) { + NetworkInterface anInterface = interfaces.nextElement(); + // 在所有的接口下再遍历IP + for (Enumeration inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements();) { + InetAddress inetAddr = inetAddresses.nextElement(); + // 排除loopback类型地址 + if (!inetAddr.isLoopbackAddress()) { + if (inetAddr.isSiteLocalAddress()) { + // 如果是site-local地址,就是它了 + return inetAddr.getHostAddress(); + } else if (candidateAddress == null) { + // site-local类型的地址未被发现,先记录候选地址 + candidateAddress = inetAddr; + } + } + } + } + if (candidateAddress != null) { + return candidateAddress.getHostAddress(); + } + // 如果没有发现 non-loopback地址.只能用最次选的方案 + InetAddress jdkSuppliedAddress = InetAddress.getLocalHost(); + if (jdkSuppliedAddress == null) { + return ""; + } + return jdkSuppliedAddress.getHostAddress(); + } catch (Exception e) { + return ""; + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ThrowableUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ThrowableUtil.class new file mode 100644 index 0000000..d2e9aa4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ThrowableUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ThrowableUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ThrowableUtil.java new file mode 100644 index 0000000..ff55d06 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ThrowableUtil.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * 异常工具 2019-01-06 + * @author Zheng Jie + */ +public class ThrowableUtil { + + /** + * 获取堆栈信息 + */ + public static String getStackTrace(Throwable throwable){ + StringWriter sw = new StringWriter(); + try (PrintWriter pw = new PrintWriter(sw)) { + throwable.printStackTrace(pw); + return sw.toString(); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/TranslatorUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/TranslatorUtil.class new file mode 100644 index 0000000..1624dc7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/TranslatorUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/TranslatorUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/TranslatorUtil.java new file mode 100644 index 0000000..7947e5b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/TranslatorUtil.java @@ -0,0 +1,67 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import cn.hutool.json.JSONArray; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +/** + * @author Zheng Jie + * 翻译工具类 + */ +public class TranslatorUtil { + + public static String translate(String word){ + try { + String url = "https://translate.googleapis.com/translate_a/single?" + + "client=gtx&" + + "sl=en" + + "&tl=zh-CN" + + "&dt=t&q=" + URLEncoder.encode(word, "UTF-8"); + + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestProperty("User-Agent", "Mozilla/5.0"); + + BufferedReader in = new BufferedReader( + new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + return parseResult(response.toString()); + }catch (Exception e){ + return word; + } + } + + private static String parseResult(String inputJson){ + JSONArray jsonArray2 = (JSONArray) new JSONArray(inputJson).get(0); + StringBuilder result = new StringBuilder(); + for (Object o : jsonArray2) { + result.append(((JSONArray) o).get(0).toString()); + } + return result.toString(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ValidationUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ValidationUtil.class new file mode 100644 index 0000000..d56f97f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ValidationUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ValidationUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ValidationUtil.java new file mode 100644 index 0000000..9afdb2a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/ValidationUtil.java @@ -0,0 +1,46 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.common.utils; + +import cn.hutool.core.util.ObjectUtil; +import org.hibernate.validator.internal.constraintvalidators.hv.EmailValidator; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; + +/** + * 验证工具 + * @author Zheng Jie + * @date 2018-11-23 + */ +public class ValidationUtil{ + + /** + * 验证空 + */ + public static void isNull(Object obj, String entity, String parameter , Object value){ + if(ObjectUtil.isNull(obj)){ + String msg = entity + " 不存在: "+ parameter +" is "+ value; + throw new BadRequestException(LangProcess.msg("universal_validation",entity,parameter,value.toString())); + } + } + + /** + * 验证是否为邮箱 + */ + public static boolean isEmail(String email) { + return new EmailValidator().isValid(email, null); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/YamlUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/YamlUtil.class new file mode 100644 index 0000000..341a8d6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/YamlUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/YamlUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/YamlUtil.java new file mode 100644 index 0000000..b8e6c21 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/YamlUtil.java @@ -0,0 +1,11 @@ +package org.nl.common.utils; + +import java.util.Properties; + +public class YamlUtil { + public static Properties properties; + + public static String getValue(String key) { + return (String) properties.get(key); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/dto/CurrentUser.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/dto/CurrentUser.class new file mode 100644 index 0000000..1cbbc20 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/dto/CurrentUser.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/dto/CurrentUser.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/dto/CurrentUser.java new file mode 100644 index 0000000..440752f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/common/utils/dto/CurrentUser.java @@ -0,0 +1,31 @@ +package org.nl.common.utils.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import org.nl.system.service.user.dao.SysUser; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @author: lyd + * @description: 当前用户的信息 + * @Date: + */ +@Data +public class CurrentUser implements Serializable { + @JsonSerialize(using = ToStringSerializer.class) + private String id; + + //账号 + private String username; + //姓名 + private String presonName; + + //用户详细信息 + private SysUser user; + + private List permissions = new ArrayList<>(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/AuditorConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/AuditorConfig.class new file mode 100644 index 0000000..1eed2f9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/AuditorConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/AuditorConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/AuditorConfig.java new file mode 100644 index 0000000..7ce0e4a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/AuditorConfig.java @@ -0,0 +1,45 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import org.springframework.data.domain.AuditorAware; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +/** + * @description : 设置审计 + * @author : Dong ZhaoYang + * @date : 2019/10/28 + */ +@Component("auditorAware") +public class AuditorConfig implements AuditorAware { + + /** + * 返回操作员标志信息 + * + * @return / + */ + @Override + public Optional getCurrentAuditor() { + try { + // 这里应根据实际业务情况获取具体信息 + return Optional.of(null); + }catch (Exception ignored){} + // 用户定时任务,或者无Token调用的情况 + return Optional.of("System"); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CallBack.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CallBack.class new file mode 100644 index 0000000..e7d47fc Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CallBack.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CallBack.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CallBack.java new file mode 100644 index 0000000..c50349f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CallBack.java @@ -0,0 +1,41 @@ +package org.nl.config;/* + * Copyright 2019-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @author: liaojinlong + * @date: 2020/6/9 17:02 + * @since: 1.0 + * @see {@link SpringContextHolder} + * 针对某些初始化方法,在SpringContextHolder 初始化前时,
+ * 可提交一个 提交回调任务。
+ * 在SpringContextHolder 初始化后,进行回调使用 + */ + +public interface CallBack { + /** + * 回调执行方法 + */ + void executor(); + + /** + * 本回调任务名称 + * @return / + */ + default String getCallBackName() { + return Thread.currentThread().getId() + ":" + this.getClass().getName(); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ConfigurerAdapter.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ConfigurerAdapter.class new file mode 100644 index 0000000..f58d29c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ConfigurerAdapter.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ConfigurerAdapter.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ConfigurerAdapter.java new file mode 100644 index 0000000..7bb4cb3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ConfigurerAdapter.java @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * WebMvcConfigurer + * + * @author Zheng Jie + * @date 2018-11-30 + */ +@Configuration +@EnableWebMvc +public class ConfigurerAdapter implements WebMvcConfigurer { + /** 文件配置 */ + private final FileProperties properties; + + public ConfigurerAdapter(FileProperties properties) { + this.properties = properties; + } + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + config.addAllowedOrigin("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + FileProperties.ElPath path = properties.getPath(); + String avatarUtl = "file:" + path.getAvatar().replace("\\","/"); + String pathUtl = "file:" + path.getPath().replace("\\","/"); + registry.addResourceHandler("/avatar/**").addResourceLocations(avatarUtl).setCachePeriod(0); + registry.addResourceHandler("/file/**").addResourceLocations(pathUtl).setCachePeriod(0); + registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CustomJsonConfiguration.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CustomJsonConfiguration.java new file mode 100644 index 0000000..5bcba43 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/CustomJsonConfiguration.java @@ -0,0 +1,44 @@ +package org.nl.config;/* +package org.nl.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +*/ +/** + * 处理前端和后端Long类型失去精度问题. + * https://blog.51cto.com/u_15127549/3519757 + *//* + +@Configuration +@EnableWebMvc +public class CustomJsonConfiguration implements WebMvcConfigurer { + @Override + public void configureMessageConverters(List> converters) { + MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); + + ObjectMapper objectMapper = new ObjectMapper(); + */ +/** + * 序列换成json时,将所有的long变成string + * 因为js中得数字类型不能包含所有的java long值 + *//* + + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + objectMapper.registerModule(simpleModule); + + jackson2HttpMessageConverter.setObjectMapper(objectMapper); + converters.add(jackson2HttpMessageConverter); + } +} +*/ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/DataBaseConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/DataBaseConfig.class new file mode 100644 index 0000000..a3bc441 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/DataBaseConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/DataBaseConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/DataBaseConfig.java new file mode 100644 index 0000000..f679d3b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/DataBaseConfig.java @@ -0,0 +1,23 @@ +package org.nl.config; + +import com.alibaba.druid.pool.DruidDataSource; +import lombok.extern.slf4j.Slf4j; +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; + +@Configuration +@Slf4j +public class DataBaseConfig { + + @Primary + @Bean(name = "dataSource") + @ConfigurationProperties(prefix = "spring.datasource.druid") + public DataSource dataSource() { + return new DruidDataSource(); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElAdminProperties.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElAdminProperties.class new file mode 100644 index 0000000..56e5df5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElAdminProperties.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElAdminProperties.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElAdminProperties.java new file mode 100644 index 0000000..b407c24 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElAdminProperties.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * @author Zheng Jie + * @description + * @date 2021-11-22 + **/ +@Data +@Component +public class ElAdminProperties { + + public static Boolean ipLocal; + + @Value("${ip.local-parsing}") + public void setIpLocal(Boolean ipLocal) { + ElAdminProperties.ipLocal = ipLocal; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElPermissionConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElPermissionConfig.class new file mode 100644 index 0000000..06b41a4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElPermissionConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElPermissionConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElPermissionConfig.java new file mode 100644 index 0000000..4abc37f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/ElPermissionConfig.java @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import org.springframework.stereotype.Service; + +/** + * @author Zheng Jie + */ +@Service(value = "el") +public class ElPermissionConfig { + + public Boolean check(String ...permissions){ + // 获取当前用户的所有权限 +// List elPermissions = SecurityUtils.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); + // 判断当前用户的所有权限是否包含接口上定义的权限 +// return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains); + return true; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FastJsonRedisSerializer.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FastJsonRedisSerializer.class new file mode 100644 index 0000000..f9969e8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FastJsonRedisSerializer.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties$ElPath.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties$ElPath.class new file mode 100644 index 0000000..3f328db Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties$ElPath.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties.class new file mode 100644 index 0000000..383c97a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties.java new file mode 100644 index 0000000..0d85a82 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/FileProperties.java @@ -0,0 +1,60 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import lombok.Data; +import org.nl.common.utils.ElAdminConstant; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * @author Zheng Jie + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "file") +public class FileProperties { + + /** 文件大小限制 */ + private Long maxSize; + + /** 头像大小限制 */ + private Long avatarMaxSize; + + private ElPath mac; + + private ElPath linux; + + private ElPath windows; + + public ElPath getPath(){ + String os = System.getProperty("os.name"); + if(os.toLowerCase().startsWith(ElAdminConstant.WIN)) { + return windows; + } else if(os.toLowerCase().startsWith(ElAdminConstant.MAC)){ + return mac; + } + return linux; + } + + @Data + public static class ElPath{ + + private String path; + + private String avatar; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/IdUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/IdUtil.class new file mode 100644 index 0000000..4337301 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/IdUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/IdUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/IdUtil.java new file mode 100644 index 0000000..5980d3a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/IdUtil.java @@ -0,0 +1,11 @@ +package org.nl.config; + +public class IdUtil { + public static Long getLongId() { + return cn.hutool.core.util.IdUtil.getSnowflake(1, 1).nextId(); + } + + public static String getStringId() { + return String.valueOf(IdUtil.getLongId()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MapOf.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MapOf.class new file mode 100644 index 0000000..275122b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MapOf.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MapOf.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MapOf.java new file mode 100644 index 0000000..7ecd4bf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MapOf.java @@ -0,0 +1,24 @@ +package org.nl.config; + + +import org.checkerframework.checker.units.qual.K; +import org.springframework.util.CollectionUtils; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Iterator; + +/* + * @author ZZQ + * @Date 2022/11/29 2:55 下午 + */ +public class MapOf implements Serializable { + + public static HashMap of(K... key){ + HashMap map = new HashMap<>(); + for (int i = 0; i < (key.length & ~1); i=i+2) { + map.put(key[i],key[i+1]); + } + return map; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MultipartConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MultipartConfig.class new file mode 100644 index 0000000..f9bc634 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MultipartConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MultipartConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MultipartConfig.java new file mode 100644 index 0000000..1afed12 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/MultipartConfig.java @@ -0,0 +1,34 @@ +package org.nl.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; + +/** + * @author: lyd + * @description: + * @Date: 2022/12/6 + */ +@Configuration +public class MultipartConfig { + + /** + * 文件上传临时路径 + */ + @Bean + MultipartConfigElement multipartConfigElement() { + MultipartConfigFactory factory = new MultipartConfigFactory(); + String location = System.getProperty("user.home") + "/.eladmin/file/tmp"; + File tmpFile = new File(location); + if (!tmpFile.exists()) { + if (!tmpFile.mkdirs()) { + System.out.println("create was not successful."); + } + } + factory.setLocation(location); + return factory.createMultipartConfig(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig$1.class new file mode 100644 index 0000000..ba1500e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig.class new file mode 100644 index 0000000..52e9f24 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig.java new file mode 100644 index 0000000..e0785bb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RedisConfig.java @@ -0,0 +1,216 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.parser.ParserConfig; +import com.alibaba.fastjson.serializer.SerializerFeature; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cache.Cache; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.RedisSerializer; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Zheng Jie + * @date 2018-11-24 + */ +@Slf4j +@Configuration +@EnableCaching +@ConditionalOnClass(RedisOperations.class) +@EnableConfigurationProperties(RedisProperties.class) +public class RedisConfig extends CachingConfigurerSupport { + + /** + * 设置 redis 数据默认过期时间,默认2小时 + * 设置@cacheable 序列化方式 + */ + @Bean + public RedisCacheConfiguration redisCacheConfiguration(){ + FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); + RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); + configuration = configuration.serializeValuesWith(RedisSerializationContext. + SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(6)); + return configuration; + } + + @SuppressWarnings("all") + @Bean(name = "redisTemplate") + @ConditionalOnMissingBean(name = "redisTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + //序列化 + FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); + // value值的序列化采用fastJsonRedisSerializer + template.setValueSerializer(fastJsonRedisSerializer); + template.setHashValueSerializer(fastJsonRedisSerializer); + // 全局开启AutoType,这里方便开发,使用全局的方式 + ParserConfig.getGlobalInstance().setAutoTypeSupport(true); + // 建议使用这种方式,小范围指定白名单 + // ParserConfig.getGlobalInstance().addAccept("org.nl.domain"); + // key的序列化采用StringRedisSerializer + template.setKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(new StringRedisSerializer()); + template.setConnectionFactory(redisConnectionFactory); + return template; + } + + /** + * 自定义缓存key生成策略,默认将使用该策略 + */ + @Bean + @Override + public KeyGenerator keyGenerator() { + return (target, method, params) -> { + Map container = new HashMap<>(3); + Class targetClassClass = target.getClass(); + // 类地址 + container.put("class",targetClassClass.toGenericString()); + // 方法名称 + container.put("methodName",method.getName()); + // 包名称 + container.put("package",targetClassClass.getPackage()); + // 参数列表 + for (int i = 0; i < params.length; i++) { + container.put(String.valueOf(i),params[i]); + } + // 转为JSON字符串 + String jsonString = JSON.toJSONString(container); + // 做SHA256 Hash计算,得到一个SHA256摘要作为Key + return DigestUtils.sha256Hex(jsonString); + }; + } + + @Bean + @Override + public CacheErrorHandler errorHandler() { + // 异常处理,当Redis发生异常时,打印日志,但是程序正常走 + log.info("初始化 -> [{}]", "Redis CacheErrorHandler"); + return new CacheErrorHandler() { + @Override + public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { + log.error("Redis occur handleCacheGetError:key -> [{}]", key, e); + } + + @Override + public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { + log.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e); + } + + @Override + public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { + log.error("Redis occur handleCacheEvictError:key -> [{}]", key, e); + } + + @Override + public void handleCacheClearError(RuntimeException e, Cache cache) { + log.error("Redis occur handleCacheClearError:", e); + } + }; + } + +} + +/** + * Value 序列化 + * + * @author / + * @param + */ + class FastJsonRedisSerializer implements RedisSerializer { + + private final Class clazz; + + FastJsonRedisSerializer(Class clazz) { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) { + if (t == null) { + return new byte[0]; + } + return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(StandardCharsets.UTF_8); + } + + @Override + public T deserialize(byte[] bytes) { + if (bytes == null || bytes.length <= 0) { + return null; + } + String str = new String(bytes, StandardCharsets.UTF_8); + return JSON.parseObject(str, clazz); + } + +} + +/** + * 重写序列化器 + * + * @author / + */ +class StringRedisSerializer implements RedisSerializer { + + private final Charset charset; + + StringRedisSerializer() { + this(StandardCharsets.UTF_8); + } + + private StringRedisSerializer(Charset charset) { + Assert.notNull(charset, "Charset must not be null!"); + this.charset = charset; + } + + @Override + public String deserialize(byte[] bytes) { + return (bytes == null ? null : new String(bytes, charset)); + } + + @Override + public byte[] serialize(Object object) { + String string = JSON.toJSONString(object); + if (StrUtil.isEmpty(string)) { + return null; + } + string = string.replace("\"", ""); + return string.getBytes(charset); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RsaProperties.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RsaProperties.class new file mode 100644 index 0000000..04820c3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RsaProperties.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RsaProperties.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RsaProperties.java new file mode 100644 index 0000000..399a47a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/RsaProperties.java @@ -0,0 +1,38 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * @author Zheng Jie + * @website https://el-admin.vip + * @description + * @date 2020-05-18 + **/ +@Data +@Component +public class RsaProperties { + + public static String privateKey; + + @Value("${rsa.private_key}") + public void setPrivateKey(String privateKey) { + RsaProperties.privateKey = privateKey; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SpringContextHolder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SpringContextHolder.class new file mode 100644 index 0000000..5d6e40b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SpringContextHolder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SpringContextHolder.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SpringContextHolder.java new file mode 100644 index 0000000..3a2ae32 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SpringContextHolder.java @@ -0,0 +1,155 @@ +package org.nl.config;/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.core.env.Environment; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Jie + * @date 2019-01-07 + */ +@Slf4j +public class SpringContextHolder implements ApplicationContextAware, DisposableBean { + + private static ApplicationContext applicationContext = null; + //数据库连接的bean名字 + public static String dataSourceBeanName="dataSource"; + private static final List CALL_BACKS = new ArrayList<>(); + private static boolean addCallback = true; + + /** + * 针对 某些初始化方法,在SpringContextHolder 未初始化时 提交回调方法。 + * 在SpringContextHolder 初始化后,进行回调使用 + * + * @param callBack 回调函数 + */ + public synchronized static void addCallBacks(CallBack callBack) { + if (addCallback) { + SpringContextHolder.CALL_BACKS.add(callBack); + } else { + log.warn("CallBack:{} 已无法添加!立即执行", callBack.getCallBackName()); + callBack.executor(); + } + } + public static ApplicationContext getApplicationContext() { + try { + + } catch (Exception e) { + e.printStackTrace(); + } + return applicationContext; + + } + + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) { + assertContextInjected(); + return (T) applicationContext.getBean(name); + } + + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getBean(Class requiredType) { + assertContextInjected(); + return applicationContext.getBean(requiredType); + } + + /** + * 获取SpringBoot 配置信息 + * + * @param property 属性key + * @param defaultValue 默认值 + * @param requiredType 返回类型 + * @return / + */ + public static T getProperties(String property, T defaultValue, Class requiredType) { + T result = defaultValue; + try { + result = getBean(Environment.class).getProperty(property, requiredType); + } catch (Exception ignored) {} + return result; + } + + /** + * 获取SpringBoot 配置信息 + * + * @param property 属性key + * @return / + */ + public static String getProperties(String property) { + return getProperties(property, null, String.class); + } + + /** + * 获取SpringBoot 配置信息 + * + * @param property 属性key + * @param requiredType 返回类型 + * @return / + */ + public static T getProperties(String property, Class requiredType) { + return getProperties(property, null, requiredType); + } + + /** + * 检查ApplicationContext不为空. + */ + private static void assertContextInjected() { + if (applicationContext == null) { + throw new IllegalStateException("applicaitonContext属性未注入, 请在applicationContext" + + ".xml中定义SpringContextHolder或在SpringBoot启动类中注册SpringContextHolder."); + } + } + + /** + * 清除SpringContextHolder中的ApplicationContext为Null. + */ + private static void clearHolder() { + log.debug("清除SpringContextHolder中的ApplicationContext:" + + applicationContext); + applicationContext = null; + } + + @Override + public void destroy() { + SpringContextHolder.clearHolder(); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if (SpringContextHolder.applicationContext != null) { + log.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext); + } + SpringContextHolder.applicationContext = applicationContext; + if (addCallback) { + for (CallBack callBack : SpringContextHolder.CALL_BACKS) { + callBack.executor(); + } + CALL_BACKS.clear(); + } + SpringContextHolder.addCallback = false; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringConverter.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringConverter.class new file mode 100644 index 0000000..79c68a3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringConverter.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringConverter.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringConverter.java new file mode 100644 index 0000000..e7506c7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringConverter.java @@ -0,0 +1,20 @@ +package org.nl.config; + + +import cn.hutool.core.util.StrUtil; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +@Component +public class StringConverter implements Converter { + + @Override + public String convert(String source) { + if (StrUtil.isNotEmpty(source)) { + if (source.contains("\\")) { + source = source.replace("\\", "\\\\\\"); + } + } + return source; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringRedisSerializer.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringRedisSerializer.class new file mode 100644 index 0000000..9a16870 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/StringRedisSerializer.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerConfig.class new file mode 100644 index 0000000..70a45c4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerConfig.java new file mode 100644 index 0000000..fa7ae74 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerConfig.java @@ -0,0 +1,161 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import com.fasterxml.classmate.TypeResolver; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.data.domain.Pageable; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.schema.AlternateTypeRule; +import springfox.documentation.schema.AlternateTypeRuleConvention; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +import static com.google.common.collect.Lists.newArrayList; +import static springfox.documentation.schema.AlternateTypeRules.newRule; + +/** + * api页面 /doc.html + * @author Zheng Jie + * @date 2018-11-23 + */ +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Value("${sa-token.token-name}") + private String tokenHeader; + + @Value("${sa-token.token-prefix}") + private String tokenStartWith; + + @Value("${swagger.enabled}") + private Boolean enabled; + + @Bean + @SuppressWarnings("all") + public Docket createRestApi() { +// ParameterBuilder ticketPar = new ParameterBuilder(); +//// List pars = new ArrayList<>(); +//// ticketPar.name(tokenHeader).description("token") +//// .modelRef(new ModelRef("string")) +//// .parameterType("header") +//// .defaultValue(tokenStartWith + " ") +//// .required(true) +//// .build(); +// pars.add(ticketPar.build()); + return new Docket(DocumentationType.SWAGGER_2) + .enable(enabled) + .apiInfo(apiInfo()) + .select() +// .paths(Predicates.not(PathSelectors.regex("/error.*"))) + .paths(PathSelectors.any()) + .build() +// .globalOperationParameters(pars) + //添加登陆认证 + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .description("一个简单且易上手的 Spring boot 后台管理框架") + .title("EL-ADMIN 接口文档") + .version("2.4") + .build(); + } + + private List securitySchemes() { + //设置请求头信息 + List securitySchemes = new ArrayList<>(); + ApiKey apiKey = new ApiKey(tokenHeader, tokenHeader, "header"); + securitySchemes.add(apiKey); + return securitySchemes; + } + + private List securityContexts() { + //设置需要登录认证的路径 + List securityContexts = new ArrayList<>(); + // ^(?!auth).*$ 表示所有包含auth的接口不需要使用securitySchemes即不需要带token + // ^标识开始 ()里是一子表达式 ?!/auth表示匹配不是/auth的位置,匹配上则添加请求头,注意路径已/开头 .表示任意字符 *表示前面的字符匹配多次 $标识结束 + securityContexts.add(getContextByPath("^(?!/auth).*$")); + return securityContexts; + } + + private SecurityContext getContextByPath(String pathRegex) { + return SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.regex(pathRegex)) + .build(); + } + + private List defaultAuth() { + List securityReferences = new ArrayList<>(); + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + securityReferences.add(new SecurityReference(tokenHeader, authorizationScopes)); + return securityReferences; + } +} + +/** + * 将Pageable转换展示在swagger中 + */ +@Configuration +class SwaggerDataConfig { + + @Bean + public AlternateTypeRuleConvention pageableConvention(final TypeResolver resolver) { + return new AlternateTypeRuleConvention() { + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; + } + + @Override + public List rules() { + return newArrayList(newRule(resolver.resolve(Pageable.class), resolver.resolve(Page.class))); + } + }; + } + + @ApiModel + @Data + private static class Page { + @ApiModelProperty("页码 (0..N)") + private Integer page; + + @ApiModelProperty("每页显示的数目") + private Integer size; + + @ApiModelProperty("以下列格式排序标准:property[,asc | desc]。 默认排序顺序为升序。 支持多种排序条件:如:id,asc") + private List sort; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig$1.class new file mode 100644 index 0000000..24d82c7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig$Page.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig$Page.class new file mode 100644 index 0000000..f7fe10d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig$Page.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig.class new file mode 100644 index 0000000..295ad88 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/SwaggerDataConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebMvcConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebMvcConfig.class new file mode 100644 index 0000000..790975a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebMvcConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebMvcConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebMvcConfig.java new file mode 100644 index 0000000..13ed781 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebMvcConfig.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import org.nl.config.language.InitLocaleResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * WebMvcConfigurer + * + * @author Zheng Jie + * @date 2018-11-30 + */ +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + @Bean + public LocaleResolver localeResolver(){ + return new InitLocaleResolver(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebSocketConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebSocketConfig.class new file mode 100644 index 0000000..0f16189 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebSocketConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebSocketConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebSocketConfig.java new file mode 100644 index 0000000..28a447c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/WebSocketConfig.java @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +/** + * @author ZhangHouYing + * @date 2019-08-24 15:44 + */ +@Configuration +public class WebSocketConfig { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/BigNumberSerializer.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/BigNumberSerializer.class new file mode 100644 index 0000000..1afe009 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/BigNumberSerializer.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/BigNumberSerializer.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/BigNumberSerializer.java new file mode 100644 index 0000000..ac3d8ef --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/BigNumberSerializer.java @@ -0,0 +1,42 @@ +package org.nl.config.jackson; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JacksonStdImpl; +import com.fasterxml.jackson.databind.ser.std.NumberSerializer; + +import java.io.IOException; + +/** + * 超出 JS 最大最小值 处理 + * + * @author Lion Li + */ +@JacksonStdImpl +public class BigNumberSerializer extends NumberSerializer { + + /** + * 根据 JS Number.MAX_SAFE_INTEGER 与 Number.MIN_SAFE_INTEGER 得来 + */ + private static final long MAX_SAFE_INTEGER = 9007199254740991L; + private static final long MIN_SAFE_INTEGER = -9007199254740991L; + + /** + * 提供实例 + */ + public static final BigNumberSerializer INSTANCE = new BigNumberSerializer(Number.class); + + public BigNumberSerializer(Class rawType) { + super(rawType); + } + + @Override + public void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException { + // 超出范围 序列化位字符串 + if (value.longValue() > MIN_SAFE_INTEGER && value.longValue() < MAX_SAFE_INTEGER) { + super.serialize(value, gen, provider); + } else { + gen.writeString(value.toString()); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/JacksonObjectMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/JacksonObjectMapper.class new file mode 100644 index 0000000..aec0090 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/JacksonObjectMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/JacksonObjectMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/JacksonObjectMapper.java new file mode 100644 index 0000000..c97d5dc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/jackson/JacksonObjectMapper.java @@ -0,0 +1,81 @@ +package org.nl.config.jackson; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; + +import java.math.BigInteger; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; + +/** + * jackson 配置 + * + * @author Lion Li + * @author JohanChan + * @ProjectName Demo + * @Description 与前端交互时对实体类中Long类型的ID字段序列号 + * @time 2021/6/23 11:30 + */ +/** + * @author JohanChan + * @ProjectName Demo + * @Description 与前端交互时对实体类中Long类型的ID字段序列号 + * @time 2021/6/23 11:30 + */ + +/** + * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象 + * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] + * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] + */ +public class JacksonObjectMapper extends ObjectMapper { + + public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; + public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; + + public JacksonObjectMapper() { + super(); + //收到未知属性时不报异常 + this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); + + //反序列化时,属性不存在的兼容处理 + this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + + SimpleModule simpleModule = new SimpleModule() + //将BigInteger型数字转换成字符串,避免丢失精度 + .addSerializer(BigInteger.class, ToStringSerializer.instance) + //将Long型数字转换成字符串,避免丢失精度 + .addSerializer(Long.class, ToStringSerializer.instance) + //将Integer型数字转换成字符串 + .addSerializer(Integer.class, ToStringSerializer.instance) + //将int型数字转换成字符串 + .addSerializer(int.class, ToStringSerializer.instance) + //将long型数字转换成字符串 + .addSerializer(long.class, ToStringSerializer.instance) + //序列化和反序列化日期格式 + .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) + .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) + .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) + .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) + .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) + .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); + + + //注册功能模块 例如,可以添加自定义序列化器和反序列化器 + this.registerModule(simpleModule); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/InitLocaleResolver.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/InitLocaleResolver.class new file mode 100644 index 0000000..93b5fd2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/InitLocaleResolver.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/InitLocaleResolver.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/InitLocaleResolver.java new file mode 100644 index 0000000..85367b9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/InitLocaleResolver.java @@ -0,0 +1,37 @@ +package org.nl.config.language; + +import org.apache.commons.lang3.StringUtils; +import org.nl.config.MapOf; +import org.springframework.web.servlet.LocaleResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; +import java.util.Map; + + +public class InitLocaleResolver implements LocaleResolver { + public static Map Language_Country = MapOf.of("vi","vi-VN","id","in-ID","in","in-ID","en-US,en;q=0.9","en-US","en","en-US","zh","zh-CN","ko","ko-KR"); + public static String language = ""; + @Override + public Locale resolveLocale(HttpServletRequest request) { + String header = request.getHeader("Accept-Language"); + if (StringUtils.isNotEmpty(header)){ + String lang = Language_Country.get(header); + language = lang; + if (StringUtils.isNotEmpty(lang)){ + String[] l = lang.split("-"); + //印尼的ISO标准国家代码为id-ID + return new Locale(l[0], l[1]); + } + } + return Locale.getDefault(); + } + + @Override + public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { + } + public String getLanguage(){ + return language; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/LangProcess.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/LangProcess.class new file mode 100644 index 0000000..42e8525 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/LangProcess.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/LangProcess.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/LangProcess.java new file mode 100644 index 0000000..0adf89f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/language/LangProcess.java @@ -0,0 +1,19 @@ +package org.nl.config.language; + +import org.apache.commons.lang3.StringUtils; +import org.nl.config.SpringContextHolder; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + + +public class LangProcess { + + public static String msg(String code,String...args){ + MessageSource bean = SpringContextHolder.getBean(MessageSource.class); + if (StringUtils.isEmpty(code)){ + return " "; + } + String message = bean.getMessage(code, args, LocaleContextHolder.getLocale()); + return message; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogAppender.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogAppender.class new file mode 100644 index 0000000..da3d4ae Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogAppender.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogAppender.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogAppender.java new file mode 100644 index 0000000..000ca5e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogAppender.java @@ -0,0 +1,49 @@ +package org.nl.config.lucene; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.encoder.PatternLayoutEncoder; +import ch.qos.logback.core.rolling.RollingFileAppender; +import ch.qos.logback.core.rolling.TimeBasedRollingPolicy; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.nio.charset.Charset; + +public class DynamicLogAppender { + /** + * 通过传入的动态名字,动态设置appender + * @param dynamicName + * @return + */ + public RollingFileAppender getAppender(String oldLogPath,String dynamicName) { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + RollingFileAppender appender = new RollingFileAppender(); + //appender的name属性 + appender.setName(dynamicName); + appender.setContext(context); + + //设置文件名 + appender.setFile(new File(oldLogPath, dynamicName + "\\" + DateUtil.format(new DateTime(),"yyyy-MM-dd")+".log").getAbsolutePath()); + //设置日志文件输出格式 + PatternLayoutEncoder encoder = new PatternLayoutEncoder(); + encoder.setContext(context); + encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); + encoder.setCharset(Charset.forName("UTF-8")); + encoder.start(); + + //设置日志记录器的滚动策略 + TimeBasedRollingPolicy policy = new TimeBasedRollingPolicy(); + policy.setFileNamePattern(oldLogPath+dynamicName+".%d{yyyy-MM-dd}.log"); + policy.setParent(appender); //设置父节点是appender + policy.setContext(context); + policy.start(); + + //加入下面两个节点 + appender.setRollingPolicy(policy); + appender.setEncoder(encoder); + appender.start(); + return appender; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogger.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogger.class new file mode 100644 index 0000000..01e6780 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogger.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogger.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogger.java new file mode 100644 index 0000000..566a899 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/DynamicLogger.java @@ -0,0 +1,35 @@ +package org.nl.config.lucene; + +import ch.qos.logback.classic.Logger; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.core.rolling.RollingFileAppender; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +public class DynamicLogger { + String logPath;//日志存储路径 + public DynamicLogger(String logPath) { + this.logPath = logPath; + } + //对外暴露日志对象:每次拿的对象从内存里拿,没有再构建 + private static Map container = new HashMap<>(); + public Logger getLogger(String dynamicName) { + Logger logger = container.get(dynamicName); + if(logger != null) { + return logger; + } + logger = build(dynamicName); + container.put(dynamicName,logger); + return logger; + } + //构建Logger对象,给Logger指定appender + private Logger build(String dynamicName) { + RollingFileAppender runTaskAppender =new DynamicLogAppender().getAppender(this.logPath,dynamicName); + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + Logger logger = context.getLogger(dynamicName); + logger.addAppender(runTaskAppender); + return logger; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Indexer.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Indexer.class new file mode 100644 index 0000000..a2a5fed Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Indexer.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Indexer.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Indexer.java new file mode 100644 index 0000000..fa22002 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Indexer.java @@ -0,0 +1,184 @@ +package org.nl.config.lucene; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.io.FileUtils; +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.TextField; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; +import org.springframework.beans.factory.annotation.Value; +import org.wltea.analyzer.lucene.IKAnalyzer; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Set; + +/** + * lucene索引器 + */ +public class Indexer { + /** + * 写索引实例 + */ + private IndexWriter writer; + + public IndexWriter getWriter() { + return writer; + } + + /** + * 构造方法,实例化IndexWriter + * + * @param indexDir + * @throws Exception + */ + public Indexer(String indexDir) throws Exception { + Directory dir = FSDirectory.open(Paths.get(indexDir)); + //标准分词器,会自动去掉空格啊,is a the等单词 +// Analyzer analyzer = new StandardAnalyzer(); + Analyzer analyzer = new IKAnalyzer(); + //将标准分词器配到写索引的配置中 + IndexWriterConfig config = new IndexWriterConfig(analyzer); + //实例化写索引对象 + writer = new IndexWriter(dir, config); + } + + /** + * 索引指定目录下的所有文件 + * + * @param dataDir + * @return + * @throws Exception + */ + public int indexAll(String dataDir) throws Exception { + // 获取该路径下的所有文件 + File[] files = new File(dataDir).listFiles(); + if (null != files) { + for (File file : files) { + //调用下面的indexFile方法,对每个文件进行索引 + indexFile(file); + } + } + //返回索引的文件数 +// return writer.numDocs(); + return writer.numRamDocs(); + } + + /** + * 索引指定的文件 + * + * @param file + * @throws Exception + */ + private void indexFile(File file) throws Exception { + System.out.println("索引文件的路径:" + file.getCanonicalPath()); + //调用下面的getDocument方法,获取该文件的document + Document doc = getDocument(file); + //添加索引文档 + //Document doc = json2Doc(jsonDoc); +// Document doc = new Document(); +// doc.add(new TextField("content", jsonDoc, Field.Store.YES)); + Field fieldContent = new TextField("fieldContent", FileUtils.readFileToString(null, "UTF-8"), Field.Store.YES); + + //将doc添加到索引中 + writer.addDocument(doc); + } + + /** + * 获取文档,文档里再设置每个字段,就类似于数据库中的一行记录 + * + * @param file + * @return + * @throws Exception + */ + private Document getDocument(File file) throws Exception { + Document doc = new Document(); + //开始添加字段 + //添加内容 + doc.add(new TextField("contents", new FileReader(file))); + //添加文件名,并把这个字段存到索引文件里 + doc.add(new TextField("fileName", file.getName(), Field.Store.YES)); + //添加文件路径 + doc.add(new TextField("fullPath", file.getCanonicalPath(), Field.Store.YES)); + return doc; + } + + public Document json2Doc(String strDoc) { + Document doc = new Document(); + JSONObject jsonDoc = JSONObject.parseObject(strDoc); + Set keys = jsonDoc.keySet(); + for (String key : keys) { + doc.add(new TextField(key, jsonDoc.getString(key), Field.Store.YES)); + } + return doc; + } + + public void addLogIndex(String msg) throws IOException { + //步骤一:创建Directory对象,用于指定索引库的位置 RAMDirectory内存 + Directory directory = FSDirectory.open(new File("D:\\lucene\\index").toPath()); + //步骤二:创建一个IndexWriter对象,用于写索引 +// Analyzer analyzer = new StandardAnalyzer(); + IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(new IKAnalyzer(false))); +// indexWriter.deleteAll();//清理所有索引库 +// IndexWriter indexWriter=new IndexWriter(directory,new IndexWriterConfig(new StandardAnalyzer())); + //记录索引开始时间 + long startTime = System.currentTimeMillis(); + //步骤三:读取磁盘中文件,对应每一个文件创建一个文档对象 + Document document = new Document(); +// document.add(new TextField("fieldContent", device_id, Field.Store.YES)); + document.add(new TextField("fieldContent", msg, Field.Store.YES)); + indexWriter.addDocument(document); + //记录索引结束时间 + long endTime = System.currentTimeMillis(); + System.out.println("建立索引" + "共耗时" + (endTime - startTime) + "毫秒"); + indexWriter.commit(); + //步骤八:关闭资源 + indexWriter.close(); + System.out.println("建立索引成功-----关闭资源"); + } + + //系统的日志文件路径 + @Value("${logging.file.path}") + private String logUrl; + + public static void main(String[] args) throws IOException { + //步骤一:创建Directory对象,用于指定索引库的位置 RAMDirectory内存 + Directory directory = FSDirectory.open(new File("D:\\lucene\\index").toPath()); + //步骤二:创建一个IndexWriter对象,用于写索引 +// Analyzer analyzer = new StandardAnalyzer(); + IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(new IKAnalyzer(false))); + + indexWriter.deleteAll();//清理所有索引库 +// indexWriter=new IndexWriter(directory,new IndexWriterConfig(new StandardAnalyzer())); + //记录索引开始时间 + long startTime = System.currentTimeMillis(); + //步骤三:读取磁盘中文件,对应每一个文件创建一个文档对象 + File file = new File("D:\\testlog"); + //步骤四:获取文件列表 + File[] files = file.listFiles(); + for (File item : files) { + BufferedReader bufferedReader = new BufferedReader(new FileReader(item)); + String strLine = null; + while (null != (strLine = bufferedReader.readLine())) { + Document document = new Document(); +// document.add(new Field()); + document.add(new TextField("fieldContent", strLine, Field.Store.YES)); + indexWriter.addDocument(document); + } + } + //记录索引结束时间 + long endTime = System.currentTimeMillis(); + System.out.println("建立索引" + "共耗时" + (endTime - startTime) + "毫秒"); + indexWriter.commit(); + //步骤八:关闭资源 + indexWriter.close(); + System.out.println("建立索引成功-----关闭资源"); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/LuceneIndexWriter.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/LuceneIndexWriter.class new file mode 100644 index 0000000..c6f909f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/LuceneIndexWriter.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/LuceneIndexWriter.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/LuceneIndexWriter.java new file mode 100644 index 0000000..fb739ce --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/LuceneIndexWriter.java @@ -0,0 +1,60 @@ +package org.nl.config.lucene; + +import cn.hutool.core.date.DateUtil; +import org.apache.lucene.index.CorruptIndexException; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; +import org.wltea.analyzer.lucene.IKAnalyzer; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class LuceneIndexWriter { + private static IndexWriter indexWriter; + + static { + try { + Directory directory = FSDirectory.open(new File(UrlConfig.luceneUrl).toPath()); + IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer()); + indexWriter = new IndexWriter(directory, config); + } catch (Exception e) { + e.printStackTrace(); + } + /**当当前线程结束时,自动关闭IndexWriter,使用Runtime对象*/ + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + try { + closeIndexWriter(); + } catch (Exception e) { + e.printStackTrace(); + } + })); + } + /**在线程结束时,自动关闭IndexWriter*/ + public static IndexWriter getIndexWriter() { + return indexWriter; + } + /**关闭IndexWriter + * @throws IOException + * @throws CorruptIndexException */ + public static void closeIndexWriter() throws Exception { + if(indexWriter != null) { + indexWriter.close(); + } + } + + public static void main(String[] args) throws IOException { + indexWriter.deleteAll(); + } + + public static String getDate(String timeString) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");//时间格式 + Date date = sdf.parse(timeString); + timeString = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss.SSS");//格式化后的时间 + return timeString; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Searcher.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Searcher.class new file mode 100644 index 0000000..8e46430 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Searcher.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Searcher.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Searcher.java new file mode 100644 index 0000000..75284ee --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/Searcher.java @@ -0,0 +1,140 @@ +package org.nl.config.lucene; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.*; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.util.BytesRef; + +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +/** + * lucene查询器 + */ +@Slf4j +public class Searcher { + + public static Map search(String indexDir, String ext,Map whereJson) throws Exception { + //获取要查询的路径,也就是索引所在的位置 + Directory dir = FSDirectory.open(Paths.get(indexDir)); + IndexReader reader = DirectoryReader.open(dir); + //构建IndexSearcher + IndexSearcher searcher = new IndexSearcher(reader); + //标准分词器,会自动去掉空格啊,is a the等单词 +// Analyzer analyzer = new StandardAnalyzer(); +// Analyzer analyzer = new IKAnalyzer(false); + //查询解析器 +// QueryParser queryParser = new QueryParser("fieldContent", analyzer); + + //记录索引开始时间 + long startTime = System.currentTimeMillis(); + // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数: + int pageSize = Integer.parseInt(whereJson.get("size").toString());// 每页条数 + int pageNum = Integer.parseInt(whereJson.get("page").toString());// 当前页码 + int start = pageNum * pageSize;// 当前页的起始条数 + int end = start + pageSize;// 当前页的结束条数(不能包含) + // 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序 + Sort sort = new Sort(new SortField("logTime", SortField.Type.DOC,true)); + + TopDocs docs = null; + BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); + //时间范围查询 + String startDate = (String) whereJson.get("begin_time"); + String endDate = (String) whereJson.get("end_time"); + Calendar calendar=Calendar.getInstance(); + calendar.set(1970, 0, 1); + if (startDate == null){ + startDate = DateUtil.format(calendar.getTime(),"yyyy-MM-dd HH:mm:ss.SSS"); + }else{ + startDate = LuceneIndexWriter.getDate(startDate); + } + if (endDate == null){ + endDate = DateUtil.format(new DateTime(),"yyyy-MM-dd HH:mm:ss.SSS"); + } else { + endDate = LuceneIndexWriter.getDate(endDate); + } + TermRangeQuery termRangeQuery = new TermRangeQuery("logTime", new BytesRef(startDate), new BytesRef(endDate), true, true); + booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST); + if (whereJson.get("device_code") != null){ + Query termQuery = new TermQuery(new Term("device_code", (String) whereJson.get("device_code"))); + booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST); + } + if (whereJson.get("method") != null){ + Query termQuery = new TermQuery(new Term("method", (String) whereJson.get("method"))); + booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST); + } + if (whereJson.get("status_code") != null){ + Query termQuery = new TermQuery(new Term("status_code", (String) whereJson.get("status_code"))); + booleanQueryBuilder.add(termQuery,BooleanClause.Occur.MUST); + } + if (whereJson.get("requestparam") != null){ + WildcardQuery query = new WildcardQuery(new Term("requestparam", "*"+(String) whereJson.get("requestparam")+"*")); + booleanQueryBuilder.add(query,BooleanClause.Occur.MUST); + } + if (whereJson.get("responseparam") != null){ + WildcardQuery query = new WildcardQuery(new Term("responseparam", "*"+(String) whereJson.get("responseparam")+"*")); + booleanQueryBuilder.add(query,BooleanClause.Occur.MUST); + } + if (whereJson.get("blurry") != null) { + WildcardQuery query = new WildcardQuery(new Term("fieldContent", "*"+(String) whereJson.get("blurry")+"*")); + booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); + } + docs = searcher.search(booleanQueryBuilder.build(), end,sort); + //记录索引时间 + long endTime = System.currentTimeMillis(); + log.info("匹配{}共耗时{}毫秒",booleanQueryBuilder.build(),(endTime-startTime)); + log.info("查询到{}条日志文件", docs.totalHits.value); + List list = new ArrayList<>(); + ScoreDoc[] scoreDocs = docs.scoreDocs; + if (end > docs.totalHits.value) end = (int) docs.totalHits.value; + JSONArray array = new JSONArray(); + + for (int i = start; i < end; i++) { + ScoreDoc scoreDoc = scoreDocs[i]; + Document doc = reader.document(scoreDoc.doc); + JSONObject object = new JSONObject(); + object.put("content",doc.get("fieldContent")); + object.put("device_code",doc.get("device_code")); + object.put("logTime",doc.get("logTime")); + object.put("method",doc.get("method")); + object.put("status_code",doc.get("status_code")); + object.put("requestparam",doc.get("requestparam")); + object.put("responseparam",doc.get("responseparam")); + if(doc.get("fieldContent") != null) { + array.add(object); + } + } + for(Object logDto:array){ + log.info(logDto.toString()); + } + reader.close(); + JSONObject jo = new JSONObject(); + jo.put("content", array); + jo.put("totalElements", docs.totalHits.value); + return jo; + } + + public static void main(String[] args) { + String indexDir = "D:\\lucene\\index"; + //查询这个字符串 + String q = "07.832"; + Map whereJson = null; + try { + search(indexDir, q,whereJson); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/StaticConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/StaticConfig.class new file mode 100644 index 0000000..4fdf46f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/StaticConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/StaticConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/StaticConfig.java new file mode 100644 index 0000000..c7958bb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/StaticConfig.java @@ -0,0 +1,21 @@ +package org.nl.config.lucene; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @deprecated 设置静态参数初始化 + */ +@Configuration +public class StaticConfig { + //日志索引目录 + @Value("${lucene.index.path}") + private String luceneDir; + + @Bean + public int initStatic() { + UrlConfig.setLuceneUrl(luceneDir); + return 0; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/UrlConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/UrlConfig.class new file mode 100644 index 0000000..738a934 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/UrlConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/UrlConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/UrlConfig.java new file mode 100644 index 0000000..dd7ce01 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/lucene/UrlConfig.java @@ -0,0 +1,13 @@ +package org.nl.config.lucene; + +public class UrlConfig { + public static String luceneUrl; + + public static String getLuceneUrl() { + return luceneUrl; + } + + public static void setLuceneUrl(String luceneUrl) { + UrlConfig.luceneUrl = luceneUrl; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator$1.class new file mode 100644 index 0000000..d085fb5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator.class new file mode 100644 index 0000000..28d8b24 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator.java new file mode 100644 index 0000000..2e59dc3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CodeGenerator.java @@ -0,0 +1,100 @@ +package org.nl.config.mybatis; + +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class CodeGenerator { + + /** + *

+ * 读取控制台内容 + *

+ */ + public static String scanner(String tip) { + Scanner scanner = new Scanner(System.in); + StringBuilder help = new StringBuilder(); + help.append("请输入" + tip + ":"); + System.out.println(help.toString()); + if (scanner.hasNext()) { + String ipt = scanner.next(); + if (!StringUtils.isEmpty(ipt)) { + return ipt; + } + } + throw new MybatisPlusException("请输入正确的" + tip + "!"); + } + + + public static void main(String[] args) { + String menusName = scanner("请输入对应菜单名称"); + String moduleName = scanner("请输入模块名称"); + // Mybatis代码生成器 + AutoGenerator mpg = new AutoGenerator(); + + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + // 默认不覆盖 + gc.setFileOverride(false); + String projectPath = System.getProperty("user.dir"); + gc.setOutputDir(projectPath + "/src/main/java/"); + gc.setAuthor("generator"); + gc.setOpen(false); +// gc.setSwagger2(true); + gc.setEntityName("%s"); + gc.setServiceName("I%sService"); + gc.setServiceImplName("%sServiceImpl"); + mpg.setGlobalConfig(gc); + // 数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); + dsc.setUrl("jdbc:mysql://127.0.0.1:3306/stand_lms?setUnicode=true&characterEncoding=utf8"); + dsc.setDriverName("com.mysql.cj.jdbc.Driver"); + dsc.setUsername("root"); + dsc.setPassword("12356"); + mpg.setDataSource(dsc); + // 包配置 + PackageConfig pc = new PackageConfig(); +// pc.setModuleName(""); + pc.setParent("org.nl."+menusName); + pc.setController("controller." + moduleName); + pc.setMapper("service."+moduleName+".dao.mapper"); + pc.setService("service." + moduleName); + pc.setServiceImpl("service." + moduleName + ".impl"); + pc.setEntity("service." + moduleName + ".dao"); + pc.setXml("service." + moduleName + ".dao.mapper"); + mpg.setPackageInfo(pc); +// // 自定义配置 + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + } + }; + mpg.setCfg(cfg); + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); +// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!"); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(true); + // 公共父类 +// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!"); + // 写于父类中的公共字段 +// strategy.setSuperEntityColumns("id"); + strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); + strategy.setControllerMappingHyphenStyle(false); +// strategy.setTablePrefix("sys_"); + mpg.setStrategy(strategy); +// mpg.setTemplateEngine(new FreemarkerTemplateEngine()); + mpg.execute(); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CustomIdGenerator.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CustomIdGenerator.class new file mode 100644 index 0000000..c2c1456 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CustomIdGenerator.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CustomIdGenerator.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CustomIdGenerator.java new file mode 100644 index 0000000..bb53c71 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/CustomIdGenerator.java @@ -0,0 +1,18 @@ +package org.nl.config.mybatis; + +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import org.springframework.stereotype.Component; + +/** + * @Author: lyd + * @Description: ID自动生成策略 + * @Date: 2023/5/4 + */ +@Component +public class CustomIdGenerator implements IdentifierGenerator { + @Override + public Number nextId(Object entity) { + return IdUtil.getSnowflake(1,1).nextId(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/MybatisPlusConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/MybatisPlusConfig.class new file mode 100644 index 0000000..f04d12a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/MybatisPlusConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/MybatisPlusConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/MybatisPlusConfig.java new file mode 100644 index 0000000..6b57662 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/mybatis/MybatisPlusConfig.java @@ -0,0 +1,31 @@ +package org.nl.config.mybatis; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@EnableTransactionManagement +@Configuration +public class MybatisPlusConfig { + + /** + * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除) + 添加自增插件 + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 分页插件 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + //乐观锁插件 + interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + + return interceptor; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvert.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvert.class new file mode 100644 index 0000000..c1b1769 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvert.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvert.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvert.java new file mode 100644 index 0000000..caea9b9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvert.java @@ -0,0 +1,34 @@ +package org.nl.config.redis; + +import cn.hutool.core.util.StrUtil; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.nl.system.service.redis.vo.RedisMonitorRespVO; + +import java.util.ArrayList; +import java.util.Properties; + +/** + * @Author: lyd + * @Description: redis---Spring Boot 对象转换 MapStruct + * @Date: 2022-08-04 + */ +@Mapper +public interface RedisConvert { + + RedisConvert INSTANCE = Mappers.getMapper(RedisConvert.class); + + default RedisMonitorRespVO build(Properties info, Long dbSize, Properties commandStats) { + RedisMonitorRespVO respVO = RedisMonitorRespVO.builder().info(info).dbSize(dbSize) + .commandStats(new ArrayList<>(commandStats.size())).build(); + commandStats.forEach((key, value) -> { + respVO.getCommandStats().add(RedisMonitorRespVO.CommandStat.builder() + .command(StrUtil.subAfter((String) key, "cmdstat_", false)) + .calls(Integer.valueOf(StrUtil.subBetween((String) value, "calls=", ","))) + .usec(Long.valueOf(StrUtil.subBetween((String) value, "usec=", ","))) + .build()); + }); + return respVO; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvertImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvertImpl.class new file mode 100644 index 0000000..6d563d0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/redis/RedisConvertImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/CorsFilter.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/CorsFilter.java new file mode 100644 index 0000000..9a67267 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/CorsFilter.java @@ -0,0 +1,56 @@ +//package org.nl.config.saconfig; +// +//import org.springframework.core.annotation.Order; +//import org.springframework.stereotype.Component; +//import org.springframework.web.cors.CorsConfiguration; +// +//import javax.servlet.*; +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +// +///** +// * 跨域过滤器 +// * @author kong +// */ +//@Component +//@Order(-200) +//public class CorsFilter implements Filter { +// +// static final String OPTIONS = "OPTIONS"; +// +// @Override +// public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) +// throws IOException, ServletException { +// HttpServletRequest request = (HttpServletRequest) req; +// HttpServletResponse response = (HttpServletResponse) res; +// // 允许指定域访问跨域资源 +// response.setHeader("Access-Control-Allow-Origin", "*"); +// // 允许所有请求方式 +// response.setHeader("Access-Control-Allow-Methods", "*"); +// // 有效时间 +// response.setHeader("Access-Control-Max-Age", "3600"); +// // 允许的header参数 +// response.setHeader("Access-Control-Allow-Headers", "*"); +// response.setHeader("Access-Control-Allow-Credentials", "true"); +// +// // 如果是预检请求,直接返回 +// if (OPTIONS.equals(request.getMethod())) { +// System.out.println("=======================浏览器发来了OPTIONS预检请求=========="); +// response.getWriter().print(""); +// return; +// } +// +// // System.out.println("*********************************过滤器被使用**************************"); +// chain.doFilter(req, res); +// } +// +// @Override +// public void init(FilterConfig filterConfig) { +// } +// +// @Override +// public void destroy() { +// } +// +//} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/LoginUserHandler.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/LoginUserHandler.class new file mode 100644 index 0000000..6f25ba8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/LoginUserHandler.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/LoginUserHandler.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/LoginUserHandler.java new file mode 100644 index 0000000..2d259a7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/LoginUserHandler.java @@ -0,0 +1,24 @@ +package org.nl.config.saconfig; + +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.util.SaResult; +import org.springframework.stereotype.Component; + +import java.util.function.BiFunction; + +/* + * @author ZZQ + * @Date 2022/11/24 3:47 下午 + */ +@Component +public class LoginUserHandler implements BiFunction { + @Override + public Object apply(String user, String password) { + //用户登入账号密码查询: + StpUtil.login(Long.valueOf(password)); + + return SaResult.ok("登录成功!").setData(StpUtil.getTokenValue()); + + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/SaInitCOnfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/SaInitCOnfig.class new file mode 100644 index 0000000..a924549 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/SaInitCOnfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/SaInitCOnfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/SaInitCOnfig.java new file mode 100644 index 0000000..6a967a9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/saconfig/SaInitCOnfig.java @@ -0,0 +1,34 @@ +package org.nl.config.saconfig; + +import cn.dev33.satoken.config.SaSsoConfig; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ModelAndView; + +/* + * @author ZZQ + * @Date 2022/11/28 10:58 上午 + */ +@Configuration +public class SaInitCOnfig { + + @Autowired + LoginUserHandler loginUserHandler; + + @Autowired + public void configSso(SaSsoConfig sso) { + System.out.println("启动初始化-----SaSsoConfig"); + // 配置:未登录时返回的View + sso.setNotLoginView(() -> new ModelAndView("sa-login")); + // 配置:登录处理函数 + sso.setDoLoginHandle(loginUserHandler); + + sso.setSendHttp(s -> { + HttpResponse execute = HttpRequest.get(s).execute(); + return execute.body(); + }); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskExecutePool.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskExecutePool.class new file mode 100644 index 0000000..856790e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskExecutePool.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskExecutePool.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskExecutePool.java new file mode 100644 index 0000000..0f7083a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskExecutePool.java @@ -0,0 +1,70 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config.thread; + +import lombok.extern.slf4j.Slf4j; +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; + +/** + * 异步任务线程池装配类 + * @author https://juejin.im/entry/5abb8f6951882555677e9da2 + * @date 2019年10月31日15:06:18 + */ +@Slf4j +@Configuration +public class AsyncTaskExecutePool implements AsyncConfigurer { + + /** 注入配置类 */ + private final AsyncTaskProperties config; + + public AsyncTaskExecutePool(AsyncTaskProperties config) { + this.config = config; + } + + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + //核心线程池大小 + executor.setCorePoolSize(config.getCorePoolSize()); + //最大线程数 + executor.setMaxPoolSize(config.getMaxPoolSize()); + //队列容量 + executor.setQueueCapacity(config.getQueueCapacity()); + //活跃时间 + executor.setKeepAliveSeconds(config.getKeepAliveSeconds()); + //线程名字前缀 + executor.setThreadNamePrefix("el-async-"); + // setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务 + // CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return (throwable, method, objects) -> { + log.error("===="+throwable.getMessage()+"====", throwable); + log.error("exception method:"+method.getName()); + }; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskProperties.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskProperties.class new file mode 100644 index 0000000..6c4ffec Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskProperties.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskProperties.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskProperties.java new file mode 100644 index 0000000..3a1541e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/AsyncTaskProperties.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config.thread; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 线程池配置属性类 + * @author https://juejin.im/entry/5abb8f6951882555677e9da2 + * @date 2019年10月31日14:58:18 + */ +@Data +@Component +@ConfigurationProperties(prefix = "task.pool") +public class AsyncTaskProperties { + + private int corePoolSize; + + private int maxPoolSize; + + private int keepAliveSeconds; + + private int queueCapacity; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/TheadFactoryName.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/TheadFactoryName.class new file mode 100644 index 0000000..4f370fc Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/TheadFactoryName.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/TheadFactoryName.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/TheadFactoryName.java new file mode 100644 index 0000000..c4676b6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/TheadFactoryName.java @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config.thread; + +import org.springframework.stereotype.Component; + +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 自定义线程名称 + * @author Zheng Jie + * @date 2019年10月31日17:49:55 + */ +@Component +public class TheadFactoryName implements ThreadFactory { + + private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1); + private final ThreadGroup group; + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final String namePrefix; + + public TheadFactoryName() { + this("el-pool"); + } + + private TheadFactoryName(String name){ + SecurityManager s = System.getSecurityManager(); + group = (s != null) ? s.getThreadGroup() : + Thread.currentThread().getThreadGroup(); + //此时namePrefix就是 name + 第几个用这个工厂创建线程池的 + this.namePrefix = name + + POOL_NUMBER.getAndIncrement(); + } + + @Override + public Thread newThread(Runnable r) { + //此时线程的名字 就是 namePrefix + -thread- + 这个线程池中第几个执行的线程 + Thread t = new Thread(group, r, + namePrefix + "-thread-"+threadNumber.getAndIncrement(), + 0); + if (t.isDaemon()) { + t.setDaemon(false); + } + if (t.getPriority() != Thread.NORM_PRIORITY) { + t.setPriority(Thread.NORM_PRIORITY); + } + return t; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/ThreadPoolExecutorUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/ThreadPoolExecutorUtil.class new file mode 100644 index 0000000..32edb31 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/ThreadPoolExecutorUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/ThreadPoolExecutorUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/ThreadPoolExecutorUtil.java new file mode 100644 index 0000000..00c1bfe --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/config/thread/ThreadPoolExecutorUtil.java @@ -0,0 +1,43 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.config.thread; + + +import org.nl.config.SpringContextHolder; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * 用于获取自定义线程池 + * @author Zheng Jie + * @date 2019年10月31日18:16:47 + */ +public class ThreadPoolExecutorUtil { + + public static ThreadPoolExecutor getPoll(){ + AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class); + return new ThreadPoolExecutor( + properties.getCorePoolSize(), + properties.getMaxPoolSize(), + properties.getKeepAliveSeconds(), + TimeUnit.SECONDS, + new ArrayBlockingQueue<>(properties.getQueueCapacity()), + new TheadFactoryName() + ); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/start/Init.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/start/Init.class new file mode 100644 index 0000000..cd0ce46 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/start/Init.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/start/Init.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/start/Init.java new file mode 100644 index 0000000..c98e6cc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/start/Init.java @@ -0,0 +1,21 @@ +package org.nl.start; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * 随项目启动模块 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class Init implements ApplicationRunner { + + @Override + public void run(ApplicationArguments args) throws Exception { + System.out.println("项目启动成功!"); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleController.class new file mode 100644 index 0000000..746b9b1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleController.java new file mode 100644 index 0000000..bdfe2db --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleController.java @@ -0,0 +1,78 @@ +package org.nl.system.controller.coderule; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.coderule.ISysCodeRuleService; +import org.nl.system.service.coderule.dao.SysCodeRule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 编码规则表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@RestController +@Api(tags = "系统:编码生成") +@RequestMapping("/api/genCode") +public class SysCodeRuleController { + @Autowired + private ISysCodeRuleService codeRuleService; + + @ApiOperation("查询编码") + @GetMapping + @SaCheckPermission("genCode:list") + public ResponseEntity queryAll(@RequestParam Map form, PageQuery pageable) { + return new ResponseEntity<>(TableDataInfo.build(codeRuleService.queryAll(form, pageable)), HttpStatus.OK); + } + + @Log("新增编码") + @ApiOperation("新增编码") + @PostMapping + @SaCheckPermission("genCode:add") + public ResponseEntity create(@Validated @RequestBody SysCodeRule codeRule) { + codeRuleService.create(codeRule); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("删除编码") + @ApiOperation("删除编码") + @DeleteMapping + @SaCheckPermission("genCode:del") + public ResponseEntity delete(@RequestBody Set ids) { + codeRuleService.deleteCodeRule(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("修改编码") + @ApiOperation("修改编码") + @PutMapping + @SaCheckPermission("genCode:edit") + public ResponseEntity update(@RequestBody SysCodeRule codeRule) { + codeRuleService.updateCodeRule(codeRule); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @ApiOperation("导出任务数据") + @GetMapping(value = "/codeDemo") + @SaCheckPermission("genCode:list") + public ResponseEntity CodeDemo(@RequestParam Map form) throws IOException { + return new ResponseEntity<>(codeRuleService.codeDemo(form), HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleDetailController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleDetailController.class new file mode 100644 index 0000000..9267938 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleDetailController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleDetailController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleDetailController.java new file mode 100644 index 0000000..c0268dc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/coderule/SysCodeRuleDetailController.java @@ -0,0 +1,68 @@ +package org.nl.system.controller.coderule; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.coderule.ISysCodeRuleDetailService; +import org.nl.system.service.coderule.dao.SysCodeRuleDetail; +import org.nl.system.service.coderule.dto.CodeRuleDetailQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + *

+ * 编码规则明细表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Api(tags = "系统:编码详情管理") +@RestController +@RequestMapping("/api/codeDetail") +public class SysCodeRuleDetailController { + + @Autowired + private ISysCodeRuleDetailService codeDetailService; + + @ApiOperation("查询编码明细") + @GetMapping + @SaCheckPermission("genCode:list") + public ResponseEntity queryAll(CodeRuleDetailQuery form, PageQuery pageable){ + return new ResponseEntity<>(TableDataInfo.build(codeDetailService.queryAll(form,pageable)), HttpStatus.OK); + } + + @Log("新增编码明细") + @ApiOperation("新增编码明细") + @PostMapping + @SaCheckPermission("genCode:add") + public ResponseEntity create(@RequestBody SysCodeRuleDetail codeRuleDetail){ + codeDetailService.create(codeRuleDetail); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("删除编码明细") + @ApiOperation("删除编码明细") + @DeleteMapping(value = "/{id}") + @SaCheckPermission("genCode:del") + public ResponseEntity delete(@PathVariable String id){ + codeDetailService.delete(id); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("修改编码明细") + @ApiOperation("修改编码明细") + @PutMapping + @SaCheckPermission("genCode:edit") + public ResponseEntity update(@RequestBody SysCodeRuleDetail json){ + codeDetailService.update(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dept/DeptController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dept/DeptController.class new file mode 100644 index 0000000..41ee2aa Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dept/DeptController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dept/DeptController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dept/DeptController.java new file mode 100644 index 0000000..1eaea85 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dept/DeptController.java @@ -0,0 +1,117 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.controller.dept; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.PageUtil; +import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dept.ISysDeptService; +import org.nl.system.service.dept.dao.SysDept; +import org.nl.system.service.dept.dto.DeptQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Set; + +/** +* @author Zheng Jie +* @date 2019-03-25 +*/ +@RestController +@Api(tags = "系统:部门管理") +@RequestMapping("/api/dept") +public class DeptController { + + @Autowired + private ISysDeptService deptService; + + @ApiOperation("查询部门") + @GetMapping + public ResponseEntity query(DeptQuery query) throws Exception { + List list = deptService.list(query.build()); + return new ResponseEntity<>(PageUtil.toPage(list, list.size()),HttpStatus.OK); + } + + @ApiOperation("查询部门") + @GetMapping("/vo") + public ResponseEntity queryvo(DeptQuery query, PageQuery pageQuery) throws Exception { + Page deptPage = deptService.queryVo(query, pageQuery); + return new ResponseEntity((TableDataInfo.build(deptPage)),HttpStatus.OK); + } + + + @ApiOperation("查询所有部门树") + @GetMapping("/allTree") + public ResponseEntity allTree(DeptQuery query) { + return new ResponseEntity<>(deptService.buildTree(query),HttpStatus.OK); + } + + @ApiOperation("查询部门:根据ID获取同级与上级数据") + @PostMapping("/superior") + @SaCheckPermission(value = {"user:list", "dept:list"}, mode = SaMode.AND) + public ResponseEntity getSuperior(@RequestBody List ids) { + if (CollectionUtils.isEmpty(ids)){ + return ResponseEntity.noContent().build(); + } + return new ResponseEntity<>(deptService.getSuperior(ids),HttpStatus.OK); + } + + @Log("新增部门") + @ApiOperation("新增部门") + @PostMapping +// @SaCheckPermission("dept:add") + public ResponseEntity create(@Validated @RequestBody SysDept resources){ + deptService.createDept(resources); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("修改部门") + @ApiOperation("修改部门") + @PutMapping +// @SaCheckPermission("dept:edit") + public ResponseEntity update(@Validated @RequestBody SysDept dept){ + if (dept.getPid() != null && dept.getDept_id().equals(dept.getPid())) { + throw new BadRequestException(LangProcess.msg("universal_superior")); + } + deptService.updateDept(dept); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除部门") + @ApiOperation("删除部门") + @DeleteMapping +// @SaCheckPermission("dept:del") + public ResponseEntity delete(@RequestBody Set deptIds){ + if (CollectionUtils.isEmpty(deptIds)){ + return ResponseEntity.noContent().build(); + } + deptService.delateDept(deptIds); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dict/SysDictController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dict/SysDictController.class new file mode 100644 index 0000000..edb6b05 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dict/SysDictController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dict/SysDictController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dict/SysDictController.java new file mode 100644 index 0000000..66b7adb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/dict/SysDictController.java @@ -0,0 +1,125 @@ +package org.nl.system.controller.dict; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dto.DictQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 字典表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-14 + */ +@RestController +@RequestMapping("/api/dict") +public class SysDictController { + + @Autowired + private ISysDictService dictService; + + @Log("查询字典") + @GetMapping + @ApiOperation("查询字典") +// @SaCheckPermission("dict:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery pageable){ + return new ResponseEntity<>(TableDataInfo.build(dictService.queryAll(whereJson,pageable)), HttpStatus.OK); + } + + @ApiOperation("查询所有字典信息") + @GetMapping(value = "/all") +// @SaCheckPermission("dict:list") + public ResponseEntity queryAll(){ + return new ResponseEntity<>(dictService.queryAll(),HttpStatus.OK); + } + + @Log("新增字典") + @PostMapping + @ApiOperation("新增字典") +// @SaCheckPermission("dict:add") + public ResponseEntity create(@RequestBody Dict dict){ + dictService.create(dict); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改字典") + @ApiOperation("修改字典") + //@SaCheckPermission("@el.check('dict:edit')") + public ResponseEntity updateDict(@Validated @RequestBody Dict dto){ + dictService.updateDict(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除字典") + @ApiOperation("删除字典") + @DeleteMapping +// @SaCheckPermission("dict:del") + public ResponseEntity delete(@RequestBody Set ids){ + dictService.deleteBatchByIds(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/dictDetail") + @ApiOperation("查询字典详情") + public ResponseEntity queryDetails(@RequestParam Map criteria, PageQuery pageable){ + DictQuery dictQuery = JSONObject.parseObject(JSONObject.toJSONString(criteria), DictQuery.class); + return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery,pageable)),HttpStatus.OK); + } + + @ApiOperation("查询多个字典详情") + @GetMapping(value = "/dictDetail/map") + public ResponseEntity getDictDetailMaps(@RequestParam String dictName){ + String[] names = dictName.split("[,,]"); + Map> dictMap = new HashMap<>(16); + for (String name : names) { + dictMap.put(name, dictService.getDictByName(name)); + } + return new ResponseEntity<>(dictMap, HttpStatus.OK); + } + + @Log("新增字典详情") + @ApiOperation("新增字典详情") + @PostMapping("/dictDetail") +// @SaCheckPermission("dict:add") + public ResponseEntity createDetail(@RequestBody Dict resources){ + dictService.createDetail(resources); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("修改字典详情") + @ApiOperation("修改字典详情") + @PutMapping("/dictDetail") +// @SaCheckPermission("dict:edit") + public ResponseEntity updateDetail(@RequestBody Dict resources){ + dictService.updateDetail(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除字典详情") + @ApiOperation("删除字典详情") + @DeleteMapping(value = "/dictDetail/{id}") +// @SaCheckPermission("dict:del") + public ResponseEntity deleteDetail(@PathVariable String id){ + dictService.deleteDetail(id); + return new ResponseEntity<>(HttpStatus.OK); + } + +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGenConfigController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGenConfigController.class new file mode 100644 index 0000000..1618580 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGenConfigController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGenConfigController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGenConfigController.java new file mode 100644 index 0000000..81d06da --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGenConfigController.java @@ -0,0 +1,45 @@ +package org.nl.system.controller.generator; + + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.nl.system.service.generator.ICodeGenConfigService; +import org.nl.system.service.generator.dao.CodeGenConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + *

+ * 代码生成配置表 前端控制器 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +@SaIgnore +@RestController +@Api(tags = "系统:代码生成管理") +@RequestMapping("api/genConfig") +public class CodeGenConfigController { + + @Autowired + private ICodeGenConfigService genConfigService; + + @ApiOperation("查询表数据") + @GetMapping(value = "/{tableName}") + public ResponseEntity query(@PathVariable String tableName){ + return new ResponseEntity<>(genConfigService.findByTableName(tableName), HttpStatus.OK); + } + + @ApiOperation("修改") + @PutMapping + public ResponseEntity update(@Validated @RequestBody CodeGenConfig genConfig){ + return new ResponseEntity<>(genConfigService.update(genConfig.getTable_name(), genConfig),HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGeneratorController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGeneratorController.class new file mode 100644 index 0000000..8306e29 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGeneratorController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGeneratorController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGeneratorController.java new file mode 100644 index 0000000..c518eb0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/generator/CodeGeneratorController.java @@ -0,0 +1,92 @@ +package org.nl.system.controller.generator; + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.system.service.generator.ICodeGenConfigService; +import org.nl.system.service.generator.ICodeGeneratorService; +import org.nl.system.service.generator.dao.CodeColumnConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + *

+ * 列的数据信息表 前端控制器 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +@SaIgnore +@RestController +@RequestMapping("/api/generator") +@Api(tags = "系统:代码生成管理") +public class CodeGeneratorController { + @Autowired + private ICodeGeneratorService generatorService; + @Autowired + private ICodeGenConfigService genConfigService; + + @Value("${generator.enabled}") + private Boolean generatorEnabled; + + @ApiOperation("查询数据库数据") + @GetMapping(value = "/tables") + public ResponseEntity queryTables(@RequestParam(defaultValue = "") String name, PageQuery pageable){ + return new ResponseEntity<>(TableDataInfo.build(generatorService.getTables(name, pageable)), HttpStatus.OK); + } + + @ApiOperation("查询字段数据") + @GetMapping(value = "/columns") + public ResponseEntity queryColumns(@RequestParam String tableName){ + return new ResponseEntity<>(TableDataInfo.build(generatorService.getColumns(tableName)), HttpStatus.OK); + } + + @ApiOperation("批量修改字段数据") + @PutMapping + public ResponseEntity save(@RequestBody List columnInfos){ + generatorService.updateBatchById(columnInfos); + return new ResponseEntity<>(HttpStatus.OK); + } + + @ApiOperation("同步字段数据") + @PostMapping(value = "sync") + public ResponseEntity sync(@RequestBody List tables){ + for (String table : tables) { + generatorService.sync(generatorService.getColumns(table), generatorService.query(table)); + } + return new ResponseEntity<>(HttpStatus.OK); + } + + @ApiOperation("生成代码") + @PostMapping(value = "/{tableName}/{type}") + public ResponseEntity generator(@PathVariable String tableName, @PathVariable Integer type, HttpServletRequest request, HttpServletResponse response){ + if(!generatorEnabled && type == 0){ + throw new BadRequestException(LangProcess.msg("error_generate_code")); + } + switch (type){ + // 生成代码 + case 0: generatorService.generator(genConfigService.findByTableName(tableName), generatorService.getColumns(tableName)); + break; + // 预览 + case 1: return generatorService.preview(genConfigService.findByTableName(tableName), generatorService.getColumns(tableName)); + // 打包 + case 2: generatorService.download(genConfigService.findByTableName(tableName), generatorService.getColumns(tableName), request, response); + break; + default: throw new BadRequestException(LangProcess.msg("error_options")); + } + return new ResponseEntity<>(HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logging/SysLogController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logging/SysLogController.class new file mode 100644 index 0000000..98f7d38 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logging/SysLogController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logging/SysLogController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logging/SysLogController.java new file mode 100644 index 0000000..5323312 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logging/SysLogController.java @@ -0,0 +1,81 @@ +package org.nl.system.controller.logging; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.logging.ISysLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + *

+ * 系统日志 前端控制器 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@RestController +@RequestMapping("/api/logs") +@Api(tags = "系统:日志管理") +public class SysLogController { + @Autowired + private ISysLogService logService; + @GetMapping + @ApiOperation("日志查询") + //@SaCheckPermission("@el.check()") + public ResponseEntity query(@RequestParam Map criteria, PageQuery pageable){ + criteria.put("log_type","INFO"); + return new ResponseEntity<>(TableDataInfo.build(logService.queryAll(criteria,pageable)), HttpStatus.OK); + } + + @GetMapping(value = "/user") + // @ApiOperation("用户日志查询") + public ResponseEntity queryUserLog(@RequestParam Map criteria, PageQuery pageable){ + criteria.put("log_type","INFO"); + criteria.put("username", SecurityUtils.getCurrentUsername()); + return new ResponseEntity<>(TableDataInfo.build(logService.queryAll(criteria,pageable)), HttpStatus.OK); + } + + @GetMapping(value = "/error") + @ApiOperation("错误日志查询") + // @SaCheckPermission("@el.check()") + public ResponseEntity queryErrorLog(@RequestParam Map criteria, PageQuery pageable){ + criteria.put("log_type","ERROR"); + return new ResponseEntity<>(TableDataInfo.build(logService.queryAll(criteria,pageable)), HttpStatus.OK); + } + + @GetMapping(value = "/error/{id}") + @ApiOperation("日志异常详情查询") + // @SaCheckPermission("@el.check()") + public ResponseEntity queryErrorLogs(@PathVariable String id){ + return new ResponseEntity<>(logService.findByErrDetail(id), HttpStatus.OK); + } + + @DeleteMapping(value = "/del/error") + @Log("删除所有ERROR日志") + @ApiOperation("删除所有ERROR日志") + // @SaCheckPermission("@el.check()") + public ResponseEntity delAllErrorLog(){ + logService.delAllByError(); + return new ResponseEntity<>(HttpStatus.OK); + } + + @DeleteMapping(value = "/del/info") + @Log("删除所有INFO日志") + @ApiOperation("删除所有INFO日志") + // @SaCheckPermission("@el.check()") + public ResponseEntity delAllInfoLog(){ + logService.delAllByInfo(); + return new ResponseEntity<>(HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageController.class new file mode 100644 index 0000000..b87d25e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageController.java new file mode 100644 index 0000000..65e23de --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageController.java @@ -0,0 +1,99 @@ +package org.nl.system.controller.logicflow; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.logicflow.IStageService; +import org.nl.system.service.logicflow.dao.Stage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; + +/** + *

+ * 舞台主表 前端控制器 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Slf4j +@RestController +@Api(tags = "舞台管理") +@RequestMapping("/api/stage") +public class StageController { + + @Autowired + private IStageService stageService; + + @GetMapping + @Log("查询舞台") + @ApiOperation("查询舞台") + //@SaCheckPermission("stage:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(stageService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @PostMapping + @Log("新增舞台") + @ApiOperation("新增舞台") + //@SaCheckPermission("stage:add") + public ResponseEntity create(@Validated @RequestBody Stage dto) { + stageService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改舞台") + @ApiOperation("修改舞台") + //@SaCheckPermission("stage:edit") + public ResponseEntity update(@Validated @RequestBody Stage dto) { + stageService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除舞台") + @ApiOperation("删除舞台") + //@SaCheckPermission("stage:del") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + stageService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/selectList") + @Log("下拉选舞台") + @ApiOperation("下拉选舞台") + //@SaCheckPermission("routePlan:list") + public ResponseEntity selectList() { + return new ResponseEntity<>(stageService.selectList(), HttpStatus.OK); + } + + @PostMapping("/addNewStage") + @Log("保存舞台数据") + @ApiOperation("保存舞台数据") + public ResponseEntity addNewStage(@Validated @RequestBody Stage dto) { + log.info("dto{}",dto); + stageService.addNewStage(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/getNewStageDataByCode") + @Log("根据stage_code获取舞台数据") + @ApiOperation("根据stage_code获取舞台数据") + public ResponseEntity getNewStageDataByCode(@RequestBody String code) { + Stage one = stageService.getOne(new LambdaQueryWrapper().eq(Stage::getStage_code, code)); + return new ResponseEntity<>(one, HttpStatus.CREATED); + } + +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageImageController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageImageController.class new file mode 100644 index 0000000..a4ea29e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageImageController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageImageController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageImageController.java new file mode 100644 index 0000000..c8e5f2d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/logicflow/StageImageController.java @@ -0,0 +1,80 @@ +package org.nl.system.controller.logicflow; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.logicflow.IStageImageService; +import org.nl.system.service.logicflow.dao.StageImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; + + +/** + * @Author: lyd + * @Description: 舞台图标控制层 + * @Date: 2022-07-29 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "舞台管理") +@RequestMapping("/api/stageImage") +@Slf4j +public class StageImageController { + + @Autowired + private IStageImageService stageImageService; + @GetMapping + @Log("查询舞台") + @ApiOperation("查询舞台") + //@SaCheckPermission("stageImage:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(stageImageService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @PostMapping + @Log("新增舞台图片") + @ApiOperation("新增舞台图片") + //@SaCheckPermission("stageImage:add") + public ResponseEntity create(@Validated @RequestBody StageImage entity) { + stageImageService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改舞台") + @ApiOperation("修改舞台") + //@SaCheckPermission("stageImage:edit") + public ResponseEntity update(@Validated @RequestBody StageImage entity) { + stageImageService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除舞台") + @ApiOperation("删除舞台") + //@SaCheckPermission("stageImage:del") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + stageImageService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/selectList") + @Log("下拉选设备图标") + @ApiOperation("下拉选设备图标") + //@SaCheckPermission("routePlan:list") + public ResponseEntity selectList() { + return new ResponseEntity<>(stageImageService.selectList(), HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/lucence/LuceneController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/lucence/LuceneController.class new file mode 100644 index 0000000..c419308 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/lucence/LuceneController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/lucence/LuceneController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/lucence/LuceneController.java new file mode 100644 index 0000000..1ee76d9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/lucence/LuceneController.java @@ -0,0 +1,35 @@ +package org.nl.system.controller.lucence; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.lucene.LuceneService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@Api(tags = "日志检索") +@RequestMapping("/api/lucene") +@Slf4j +public class LuceneController { + + private final LuceneService luceneService; + + @GetMapping("/getAll") + @Log("日志检索") + @ApiOperation("日志检索") + //@PreAuthorize("@el.check('task:list')") + public ResponseEntity get(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(luceneService.getAll(whereJson, page), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/menu/SysMenuController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/menu/SysMenuController.class new file mode 100644 index 0000000..4228b97 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/menu/SysMenuController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/menu/SysMenuController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/menu/SysMenuController.java new file mode 100644 index 0000000..71e5679 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/menu/SysMenuController.java @@ -0,0 +1,129 @@ +package org.nl.system.controller.menu; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; + +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.menu.ISysMenuService; +import org.nl.system.service.menu.dao.SysMenu; +import org.nl.system.service.menu.dto.MenuDto; +import org.nl.system.service.menu.dto.MenuQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 菜单表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@RestController +@RequestMapping("api/sysMenu") +public class SysMenuController { + @Autowired + private ISysMenuService iSysMenuService; + + @GetMapping(value = "/build") + @ApiOperation("根据用户获取菜单") + public ResponseEntity buildMenus(@Validated String systemType) { + //校验系统表是否存在该系统类型 + return new ResponseEntity(iSysMenuService.buildMenus(systemType),HttpStatus.OK); + } + + @ApiOperation("返回全部的菜单") + @GetMapping(value = "/lazy") + @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) + public ResponseEntity query(@RequestParam String pid) { + return new ResponseEntity<>(iSysMenuService.getMenus(pid), HttpStatus.OK); + } + @ApiOperation("获取菜单列表") + @PostMapping(value = "/getMenusByRole") + @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) + public ResponseEntity getMenusByRole(@RequestBody JSONObject json) { + String role_id = json.getString("role_id"); + String system_type = json.getString("system_type"); + String category = json.getString("category"); + return new ResponseEntity<>(iSysMenuService.getMenusByRole(role_id, system_type, category), HttpStatus.OK); + } + + @ApiOperation("根据菜单ID返回所有子节点ID,包含自身ID") + @GetMapping(value = "/child") + @SaCheckPermission(value = {"menu:list", "roles:list"}, mode = SaMode.AND) + public ResponseEntity child(@RequestParam String id) { + Set menuSet = new HashSet<>(); + List menuList = iSysMenuService.getMenus(id); + menuSet.add(iSysMenuService.findById(id)); + menuSet = iSysMenuService.getChildMenus(menuList, menuSet); + Set ids = menuSet.stream().map(SysMenu::getMenu_id).collect(Collectors.toSet()); + return new ResponseEntity<>(ids, HttpStatus.OK); + } + + @GetMapping + @ApiOperation("查询菜单") + @SaCheckPermission("menu:list") + public ResponseEntity pageQuery(MenuQuery query, PageQuery page) throws Exception { + List list = iSysMenuService.query(query, page); + return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); + } + + @ApiOperation("查询菜单:根据ID获取同级与上级数据") + @PostMapping("/superior") + @SaCheckPermission("menu:list") + public ResponseEntity getSuperior(@RequestBody JSONObject param) { + Set menuDtos = new LinkedHashSet<>(); + String id=param.getString("ids"); + if (StrUtil.isNotEmpty(id)) { + menuDtos.addAll(iSysMenuService.getSuperior(iSysMenuService.doToDto(iSysMenuService.findById(id)), new ArrayList<>())); + return new ResponseEntity<>(iSysMenuService.buildTree(new ArrayList<>(menuDtos)), HttpStatus.OK); + } + return new ResponseEntity<>(iSysMenuService.getMenus(null), HttpStatus.OK); + } + + @Log("新增菜单") + @ApiOperation("新增菜单") + @PostMapping + @SaCheckPermission("menu:add") + public ResponseEntity create(@RequestBody SysMenu form) { + iSysMenuService.create(form); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("修改菜单") + @ApiOperation("修改菜单") + @PutMapping + @SaCheckPermission("menu:edit") + public ResponseEntity update( @RequestBody SysMenu form) { + iSysMenuService.update(form); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除菜单") + @ApiOperation("删除菜单") + @DeleteMapping + @SaCheckPermission("menu:del") + public ResponseEntity delete(@RequestBody Set ids) { + Set menuSet = new HashSet<>(); + for (String id : ids) { + List menuList = iSysMenuService.getMenus(id); + menuSet.add(iSysMenuService.findById(id)); + menuSet = iSysMenuService.getChildMenus(menuList, menuSet); + } + iSysMenuService.delete(menuSet); + return new ResponseEntity<>(HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/monitor/MonitorController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/monitor/MonitorController.class new file mode 100644 index 0000000..293369e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/monitor/MonitorController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/monitor/MonitorController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/monitor/MonitorController.java new file mode 100644 index 0000000..092e749 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/monitor/MonitorController.java @@ -0,0 +1,47 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.controller.monitor; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.nl.system.service.monitor.MonitorService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Zheng Jie + * @date 2020-05-02 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统-服务监控管理") +@RequestMapping("/api/monitor") +public class MonitorController { + + private final MonitorService serverService; + + @GetMapping + @ApiOperation("查询服务监控") + @SaCheckPermission("monitor:list") + public ResponseEntity query() { + return new ResponseEntity<>(serverService.getServers(),HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/notice/SysNoticeController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/notice/SysNoticeController.class new file mode 100644 index 0000000..913fbd3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/notice/SysNoticeController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/notice/SysNoticeController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/notice/SysNoticeController.java new file mode 100644 index 0000000..5d63042 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/notice/SysNoticeController.java @@ -0,0 +1,107 @@ +package org.nl.system.controller.notice; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.notice.dao.SysNotice; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-09 +**/ +@Slf4j +@RestController +@Api(tags = "消息通知管理") +@RequestMapping("/api/notice") +public class SysNoticeController { + + @Autowired + private ISysNoticeService noticeService; + + @GetMapping + @Log("查询消息通知") + @ApiOperation("查询消息通知") + //@SaCheckPermission("@el.check('sysNotice:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(noticeService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增消息通知") + @ApiOperation("新增消息通知") + //@SaCheckPermission("@el.check('sysNotice:add')") + public ResponseEntity create(@Validated @RequestBody SysNotice entity){ + noticeService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改消息通知") + @ApiOperation("修改消息通知") + //@SaCheckPermission("@el.check('sysNotice:edit')") + public ResponseEntity update(@Validated @RequestBody SysNotice entity){ + noticeService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除消息通知") + @ApiOperation("删除消息通知") + //@SaCheckPermission("@el.check('sysNotice:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + noticeService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("获取未读的接收消息条数") + @GetMapping("/countByReceiveNotRead") + public ResponseEntity countByReceiveNotRead(){ + return new ResponseEntity<>(noticeService.countByReceiveNotRead(), HttpStatus.OK); + } + + @Log("接收消息分页") + @GetMapping("/pageByReceive") + public ResponseEntity pageByReceive(){ + return new ResponseEntity<>(noticeService.pageByReceive(), HttpStatus.OK); + } + + @Log("标为已读") + @PostMapping("/read") + public ResponseEntity read(@RequestBody String id){ + noticeService.read(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("消息详情") + @PostMapping("/findById") + public ResponseEntity findById(@RequestBody String id){ + return new ResponseEntity<>(noticeService.getById(id), HttpStatus.OK); + } + + @Log("修改已处理") + @PostMapping("/deal") + public ResponseEntity deal(@RequestBody String id){ + noticeService.deal(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("批量已读") + @PostMapping("/changeRead") + @ApiOperation("批量已读") + public ResponseEntity changeRead(@RequestBody JSONObject jsonObject) { + noticeService.changeRead(jsonObject); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/param/SysParamController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/param/SysParamController.class new file mode 100644 index 0000000..4ffc240 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/param/SysParamController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/param/SysParamController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/param/SysParamController.java new file mode 100644 index 0000000..b78ffb0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/param/SysParamController.java @@ -0,0 +1,84 @@ +package org.nl.system.controller.param; + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + *

+ * 系统参数表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-14 + */ +@Api(tags = "系统参数管理") +@Slf4j +@RestController +@RequestMapping("/api/param") +class SysParamController { + + @Autowired + private ISysParamService paramService; + @GetMapping + @Log("查询系统参数") + @ApiOperation("查询系统参数") + //@SaCheckPermission("param:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(paramService.queryPage(whereJson, page)), HttpStatus.OK); + } + + @PostMapping + @Log("新增系统参数") + @ApiOperation("新增系统参数") + //@SaCheckPermission("param:add") + public ResponseEntity create(@Validated @RequestBody Param param){ + paramService.create(param); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改系统参数") + @ApiOperation("修改系统参数") + //@SaCheckPermission("param:edit") + public ResponseEntity update(@Validated @RequestBody Param param){ + paramService.update(param); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除系统参数") + @ApiOperation("删除系统参数") + //@SaCheckPermission("param:del") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + List Ids = Arrays.asList(ids); + paramService.deleteByIds(Ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getValueByCode/{code}") + @Log("根据编码获取值") + @ApiOperation("根据编码获取值") + @SaIgnore + public ResponseEntity getValueByCode(@PathVariable String code) { + return new ResponseEntity<>(paramService.findByCode(code), HttpStatus.CREATED); + } + +} + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/permission/SysDataPermissionController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/permission/SysDataPermissionController.class new file mode 100644 index 0000000..cb9cee5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/permission/SysDataPermissionController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/permission/SysDataPermissionController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/permission/SysDataPermissionController.java new file mode 100644 index 0000000..4a94366 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/permission/SysDataPermissionController.java @@ -0,0 +1,110 @@ +package org.nl.system.controller.permission; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.permission.ISysDataPermissionService; +import org.nl.system.service.permission.dao.SysDataPermission; +import org.nl.system.service.permission.dto.SysDataPermissionQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Set; + +/** + *

+ * 数据数据权限表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Slf4j +@RestController +@Api(tags = "数据管理") +@RequestMapping("/api/dataPermission") +public class SysDataPermissionController { + + @Autowired + private ISysDataPermissionService dataPermissionService; + + @GetMapping + @Log("查询数据权限") + @ApiOperation("查询数据权限") + //@SaCheckPermission("@el.check('dataPermission:list')") + public ResponseEntity query(SysDataPermissionQuery dataPermissionQuery, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(dataPermissionService.queryAll(dataPermissionQuery, page)), HttpStatus.OK); + } + + @PostMapping + @Log("新增数据权限") + @ApiOperation("新增数据权限") + //@SaCheckPermission("@el.check('dataPermission:add')") + public ResponseEntity create(@Validated @RequestBody SysDataPermission permission) { + dataPermissionService.create(permission); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改数据权限") + @ApiOperation("修改数据权限") + //@SaCheckPermission("@el.check('dataPermission:edit')") + public ResponseEntity update(@Validated @RequestBody SysDataPermission permission) { + dataPermissionService.update(permission); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除数据权限") + @ApiOperation("删除数据权限") + //@SaCheckPermission("@el.check('dataPermission:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + dataPermissionService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/scopeType") + @Log("获取数据权限范围") + @ApiOperation("获取数据权限范围") + public ResponseEntity getDataScopeType(){ + return new ResponseEntity<>(dataPermissionService.getDataScopeType(),HttpStatus.OK); + } + + @GetMapping("/dataPermissionOption") + @Log("获取数据权限下拉框") + @ApiOperation("获取数据权限下拉框") + public ResponseEntity getDataPermissionOption(){ + return new ResponseEntity<>(dataPermissionService.getDataPermissionOption(),HttpStatus.OK); + } + + @PostMapping("/saveDataPermission") + @Log("保存数据权限") + @ApiOperation("保存数据权限") + public ResponseEntity saveDataPermission(@RequestBody JSONObject datas){ + dataPermissionService.savePermission(datas); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/dataShow") + @Log("查看数据权限") + @ApiOperation("查看数据权限") + public ResponseEntity getDataShow(@RequestBody String id){ + return new ResponseEntity<>(dataPermissionService.getDataShow(id),HttpStatus.OK); + } + + @PostMapping("/dataDetail") + @Log("查看数据明细") + @ApiOperation("查看数据明细") + public ResponseEntity getDataDetail(@RequestBody JSONObject data){ + return new ResponseEntity<>(dataPermissionService.getDataDetail(data),HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/quartz/SysQuartzJobController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/quartz/SysQuartzJobController.class new file mode 100644 index 0000000..9d9ee83 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/quartz/SysQuartzJobController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/quartz/SysQuartzJobController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/quartz/SysQuartzJobController.java new file mode 100644 index 0000000..dc3aebf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/quartz/SysQuartzJobController.java @@ -0,0 +1,104 @@ +package org.nl.system.controller.quartz; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; +import org.nl.system.service.quartz.ISysQuartzJobService; +import org.nl.system.service.quartz.dao.SysQuartzJob; +import org.nl.system.service.quartz.dto.JobQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Set; + +/** + *

+ * 定时任务表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Slf4j +@RestController +@RequestMapping("/api/jobs") +@Api(tags = "系统:定时任务管理") +public class SysQuartzJobController { + private static final String ENTITY_NAME = "quartzJob"; + + @Autowired + private ISysQuartzJobService quartzJobService; + + @ApiOperation("查询定时任务") + @GetMapping + @SaCheckPermission("timing:list") + public ResponseEntity query(JobQuery criteria, PageQuery pageable) { + return new ResponseEntity<>(TableDataInfo.build(quartzJobService.queryAll(criteria, pageable)), HttpStatus.OK); + } + + @ApiOperation("查询任务执行日志") + @GetMapping(value = "/logs") + @SaCheckPermission("timing:list") + public ResponseEntity queryJobLog(JobQuery criteria, PageQuery pageable) { + return new ResponseEntity<>(TableDataInfo.build(quartzJobService.queryAllLog(criteria, pageable)), HttpStatus.OK); + } + + @Log("新增定时任务") + @ApiOperation("新增定时任务") + @PostMapping + @SaCheckPermission("timing:add") + public ResponseEntity create(@Validated @RequestBody SysQuartzJob resources) { + if (resources.getJob_id() != null) { + throw new BadRequestException(LangProcess.msg("universal_scheduled_create",ENTITY_NAME)); + } + quartzJobService.createJob(resources); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("修改定时任务") + @ApiOperation("修改定时任务") + @PutMapping + @SaCheckPermission("timing:edit") + public ResponseEntity update(@Validated @RequestBody SysQuartzJob resources) { + quartzJobService.updateJob(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("更改定时任务状态") + @ApiOperation("更改定时任务状态") + @PutMapping(value = "/{id}") + @SaCheckPermission("timing:edit") + public ResponseEntity update(@PathVariable String id) { + quartzJobService.updateIsPause(quartzJobService.getById(id)); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("执行定时任务") + @ApiOperation("执行定时任务") + @PutMapping(value = "/exec/{id}") + @SaCheckPermission("timing:edit") + public ResponseEntity execution(@PathVariable String id) { + quartzJobService.execution(quartzJobService.getById(id)); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除定时任务") + @ApiOperation("删除定时任务") + @DeleteMapping + @SaCheckPermission("timing:del") + public ResponseEntity delete(@RequestBody Set ids) { + quartzJobService.deleteJob(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/redis/RedisController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/redis/RedisController.class new file mode 100644 index 0000000..bf38ffe Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/redis/RedisController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/redis/RedisController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/redis/RedisController.java new file mode 100644 index 0000000..ec89c86 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/redis/RedisController.java @@ -0,0 +1,57 @@ +package org.nl.system.controller.redis; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.redis.RedisService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: lyd + * @Description: Redis监控管理 + * @Date: 2022-08-04 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格管理") +@RequestMapping("/api/redis") +@Slf4j +public class RedisController { + + private final RedisService redisService; + + @GetMapping("/get-monitor-info") + @Log("查询redis的信息") + @ApiOperation("查询redis的信息") + public ResponseEntity getRedisMonitorInfo() { + return new ResponseEntity<>(redisService.getRedisMonitorInfo(),HttpStatus.OK); + } + + @GetMapping("/get-key-define-list") + @Log("获得 Redis Key 模板列表") + @ApiOperation("获得 Redis Key 模板列表") + public ResponseEntity getKeyDefineList() { + return new ResponseEntity<>(redisService.getKeyDefineList(),HttpStatus.OK); + } + + @GetMapping("/get-key-value-list") + @Log("获得 Redis Key Value列表") + @ApiOperation("获得 Redis Key Value列表") + public ResponseEntity getKeyValueList() { + return new ResponseEntity<>( redisService.getKeyValueList(),HttpStatus.OK); + } + + @Log("根据key删除Redis数据") + @ApiOperation("根据key删除Redis数据") + @DeleteMapping + public ResponseEntity deleteByKey(@RequestBody String[] ids) { + redisService.deleteByKey(ids); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/role/SysRoleController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/role/SysRoleController.class new file mode 100644 index 0000000..11ce428 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/role/SysRoleController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/role/SysRoleController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/role/SysRoleController.java new file mode 100644 index 0000000..2eacfa3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/role/SysRoleController.java @@ -0,0 +1,82 @@ +package org.nl.system.controller.role; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.system.service.role.ISysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; + +/** + *

+ * 角色表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@RestController +@RequestMapping("/api/sysRole") +public class SysRoleController { + + @Autowired + private ISysRoleService roleService; + + @ApiOperation("分页查询角色") + @GetMapping + @SaCheckPermission("roles:list") + public ResponseEntity pageQuery(@RequestParam Map param, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(roleService.query(param, page)), HttpStatus.OK); + } + + @ApiOperation("查询所有角色") + @GetMapping("/all") + public ResponseEntity queryAll() { + return new ResponseEntity<>(roleService.list(), HttpStatus.OK); + } + + @Log("新增角色") + @ApiOperation("新增角色") + @PostMapping + @SaCheckPermission("roles:add") + public ResponseEntity create(@RequestBody JSONObject param) { + roleService.create(param); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("修改角色") + @ApiOperation("修改角色") + @PutMapping + @SaCheckPermission("roles:edit") + public ResponseEntity update(@RequestBody JSONObject param) { + roleService.update(param); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除角色") + @ApiOperation("删除角色") + @DeleteMapping + @SaCheckPermission("roles:del") + public ResponseEntity delete(@RequestBody Set ids) { + roleService.deleteBatchByIds(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("修改角色菜单") + @ApiOperation("修改角色菜单") + @PutMapping(value = "/menu") + @SaCheckPermission("roles:edit") + public ResponseEntity updateMenu(@RequestBody JSONObject form) { + roleService.updateMenu(form); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController$1.class new file mode 100644 index 0000000..7c19456 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController.class new file mode 100644 index 0000000..87a56df Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController.java new file mode 100644 index 0000000..5314d97 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/AuthorizationController.java @@ -0,0 +1,111 @@ + +package org.nl.system.controller.secutiry; + + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.wf.captcha.base.Captcha; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.RedisUtils; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.dto.CurrentUser; +import org.nl.common.security.config.bean.LoginCodeEnum; +import org.nl.common.security.config.bean.LoginProperties; +import org.nl.system.service.secutiry.impl.OnlineUserService; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * @author Zheng Jie + * @date 2018-11-23 + * 授权、根据token获取用户详细信息 + */ +@Slf4j +@RestController +@RequestMapping("/auth") +@Api(tags = "系统:系统授权接口") +public class AuthorizationController { + @Autowired + private RedisUtils redisUtils; + @Autowired + private OnlineUserService onlineUserService; + @Autowired + private ISysUserService userService; + @Autowired + private LoginProperties loginProperties; + + @ApiOperation("登录授权") + @PostMapping(value = "/login") + public ResponseEntity login(@RequestBody Map authMap, HttpServletRequest request) throws Exception { + if (ObjectUtil.isEmpty(authMap)){ + return ResponseEntity.noContent().build(); + } + return ResponseEntity.ok(onlineUserService.login(authMap, request)); + } + + + @ApiOperation("获取用户信息") + @GetMapping(value = "/info") + public ResponseEntity getUserInfo() { + CurrentUser currentUser = SecurityUtils.getCurrentUser(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("roles", SecurityUtils.getCurrentUserPermissions()); + jsonObject.put("user", currentUser.getUser()); + return ResponseEntity.ok(jsonObject); + } + + @ApiOperation("获取指定用户信息") + @GetMapping(value = "/userInfo") + public ResponseEntity getUserInfo(Long loginId) { + if (loginId != null){ + SysUser user = userService.getById(loginId); + return ResponseEntity.ok(user); + } + return ResponseEntity.noContent().build(); + } + + @ApiOperation("获取验证码") + @GetMapping(value = "/code") + public ResponseEntity getCode() { + // 获取运算的结果 + Captcha captcha = loginProperties.getCaptcha(); + String uuid = IdUtil.simpleUUID(); + //当验证码类型为 arithmetic时且长度 >= 2 时,captcha.text()的结果有几率为浮点型 + String captchaValue = captcha.text(); + if (captcha.getCharType() - 1 == LoginCodeEnum.arithmetic.ordinal() && captchaValue.contains(".")) { + captchaValue = captchaValue.split("\\.")[0]; + } + // 保存 + redisUtils.set(uuid, captchaValue, loginProperties.getLoginCode().getExpiration(), TimeUnit.MINUTES); + // 验证码信息 + Map imgResult = new HashMap(2) {{ + put("img", captcha.toBase64()); + put("uuid", uuid); + }}; + return ResponseEntity.ok(imgResult); + } + + @ApiOperation("退出登录") + @DeleteMapping(value = "/logout") + public ResponseEntity logout(HttpServletRequest request) { + if (ObjectUtil.isNotEmpty(StpUtil.getTokenValue())) { + onlineUserService.logout(StpUtil.getTokenValue()); + } + StpUtil.logout(); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController$1.class new file mode 100644 index 0000000..a05fbc7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController.class new file mode 100644 index 0000000..ec924b7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController.java new file mode 100644 index 0000000..7ef09e6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/secutiry/MobileAuthorizationController.java @@ -0,0 +1,116 @@ +package org.nl.system.controller.secutiry; + +import cn.dev33.satoken.annotation.SaIgnore; +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.logging.annotation.Log; +import org.nl.common.utils.RsaUtils; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.dto.CurrentUser; +import org.nl.config.RsaProperties; +import org.nl.config.language.LangProcess; +import org.nl.system.service.role.ISysRoleService; +import org.nl.system.service.role.dao.SysRole; +import org.nl.system.service.secutiry.dto.AuthUserDto; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.nl.system.service.user.dao.mapper.SysUserMapper; +import org.nl.system.service.user.dto.SysUserDetail; +import org.nl.system.service.user.dto.UserQuery; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * @Author: lyd + * @Description: 手持登录鉴权 + * @Date: 2023/7/31 + */ +@Slf4j +@RestController +@RequestMapping("/mobile/auth") +@Api(tags = "手持:系统授权接口") +public class MobileAuthorizationController { + @Autowired + private ISysUserService userService; + @Autowired + private ISysRoleService roleService; + @ApiOperation("登录授权") + @PostMapping(value = "/login") + @SaIgnore + public ResponseEntity login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception { + // 密码解密 - 前端的加密规则: encrypt(根据实际更改) + String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword()); + // 校验数据库 + // 根据用户名查询,在比对密码 + SysUser userInfo = userService.getOne(new LambdaQueryWrapper() + .eq(SysUser::getUsername, authUser.getUsername())); // 拿到多个已经抛出异常 + if (ObjectUtil.isEmpty(userInfo) || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, "salt"))) { // 这里需要密码加密 + throw new BadRequestException(LangProcess.msg("login_pwdWrong")); + } + + // 获取权限列表 - 登录查找权限 + List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); + if (!userInfo.getIs_used()) { + throw new BadRequestException(LangProcess.msg("login_account")); + } + + // 登录输入,登出删除 + CurrentUser user = new CurrentUser(); + user.setId(userInfo.getUser_id()); + user.setUsername(userInfo.getUsername()); + user.setPresonName(userInfo.getPerson_name()); + user.setUser(userInfo); + user.setPermissions(permissionList); + + // SaLoginModel 配置登录相关参数 + StpUtil.login(userInfo.getUser_id(), new SaLoginModel() + .setDevice("PE") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 + .setExtra("loginInfo", user) // Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) + ); + UserQuery query=new UserQuery(); + query.setBlurry(user.getUsername()); + PageQuery page=new PageQuery(); + List userDetail = userService.getUserDetail(query, page); + String roles=""; + for(SysRole role:userDetail.get(0).getRoles()){ + if(ObjectUtil.isNotEmpty(role.getRemark())){ + roles+=role.getRemark()+','; + } + } + // 返回 token 与 用户信息 + JSONObject jsonObject = new JSONObject(); +// jsonObject.put("roles", permissionList); + jsonObject.put("user", userInfo); + String finalRoles = roles; + JSONObject authInfo = new JSONObject(2) {{ + put("token", "Bearer " + StpUtil.getTokenValue()); + put("user", jsonObject); + put("roles", finalRoles); + }}; + + return ResponseEntity.ok(authInfo); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/tools/ToolLocalStorageController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/tools/ToolLocalStorageController.class new file mode 100644 index 0000000..a6253e7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/tools/ToolLocalStorageController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/tools/ToolLocalStorageController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/tools/ToolLocalStorageController.java new file mode 100644 index 0000000..10e2338 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/tools/ToolLocalStorageController.java @@ -0,0 +1,85 @@ +package org.nl.system.controller.tools; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; +import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; +import org.nl.system.service.tools.IToolLocalStorageService; +import org.nl.system.service.tools.dao.ToolLocalStorage; +import org.nl.system.service.tools.dto.ToolLocalStorageQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Set; + +/** + *

+ * 本地存储表 前端控制器 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@RestController +@Api(tags = "工具:本地存储管理") +@RequestMapping("/api/localStorage") +public class ToolLocalStorageController { + @Autowired + private IToolLocalStorageService localStorageService; + + @ApiOperation("查询文件") + @GetMapping +// @SaCheckPermission("storage:list") + public ResponseEntity query(ToolLocalStorageQuery criteria, PageQuery pageable) { + return new ResponseEntity<>(TableDataInfo.build(localStorageService.queryAll(criteria, pageable)), HttpStatus.OK); + } + + @ApiOperation("上传文件") + @PostMapping + @SaIgnore +// @SaCheckPermission("storage:add") + public ResponseEntity create(@RequestParam String name, @RequestParam("file") MultipartFile file) { + return new ResponseEntity<>(localStorageService.create(name, file), HttpStatus.CREATED); + } + + @PostMapping("/pictures") + @ApiOperation("上传图片") + public ResponseEntity upload(@RequestParam MultipartFile file) { + // 判断文件是否为图片 + String suffix = FileUtil.getExtensionName(file.getOriginalFilename()); + if (!FileUtil.IMAGE.equals(FileUtil.getFileType(suffix))) { + throw new BadRequestException(LangProcess.msg("universal_image")); + } + return new ResponseEntity<>(localStorageService.create(null, file), HttpStatus.OK); + } + + @Log("修改文件") + @ApiOperation("修改文件") + @PutMapping + @SaCheckPermission("storage:edit") + public ResponseEntity update(@Validated @RequestBody ToolLocalStorage resources) { + localStorageService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除文件") + @DeleteMapping + @ApiOperation("多选删除") + public ResponseEntity delete(@RequestBody Set ids) { + localStorageService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/OnlineController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/OnlineController.class new file mode 100644 index 0000000..4ea9af0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/OnlineController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/OnlineController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/OnlineController.java new file mode 100644 index 0000000..567898e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/OnlineController.java @@ -0,0 +1,68 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.controller.user; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nl.common.utils.EncryptUtils; +import org.nl.system.service.secutiry.impl.OnlineUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; + +/** + * @author Zheng Jie + */ +@RestController +@RequestMapping("/auth/online") +@Api(tags = "系统:在线用户管理") +public class OnlineController { + + @Autowired + private OnlineUserService onlineUserService; + + @ApiOperation("查询在线用户") + @GetMapping + // @SaCheckPermission("@el.check()") + public ResponseEntity query(String filter, Pageable pageable){ + return new ResponseEntity<>(onlineUserService.getAll(filter, pageable),HttpStatus.OK); + } + + @ApiOperation("导出数据") + @GetMapping(value = "/download") + // @SaCheckPermission("@el.check()") + public void download(HttpServletResponse response, String filter) throws IOException { + onlineUserService.download(onlineUserService.getAll(filter), response); + } + + @ApiOperation("踢出用户") + @DeleteMapping + // @SaCheckPermission("@el.check()") + public ResponseEntity delete(@RequestBody Set keys) throws Exception { + for (String key : keys) { + // 解密Key + key = EncryptUtils.desDecrypt(key); + onlineUserService.kickOut(key); + } + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/UserController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/UserController.class new file mode 100644 index 0000000..de4789e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/UserController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/UserController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/UserController.java new file mode 100644 index 0000000..05db5b5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/controller/user/UserController.java @@ -0,0 +1,147 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.controller.user; + +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.dev33.satoken.stp.StpUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.config.RsaProperties; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RsaUtils; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.logging.annotation.Log; +import org.nl.config.language.LangProcess; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.nl.system.service.user.dto.UserQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; +import java.util.Set; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +@Api(tags = "系统:用户管理") +@RestController +@RequestMapping("/api/users") +@RequiredArgsConstructor +public class UserController { + + @Autowired + private ISysUserService userService; + + + @ApiOperation("查询用户") + @GetMapping + public ResponseEntity query(UserQuery query, PageQuery page){ + return new ResponseEntity(TableDataInfo.build(userService.getUserDetail(query, page)),HttpStatus.OK); + } + + @Log("新增用户") + @ApiOperation("新增用户") + @PostMapping +// @SaCheckPermission("user:add") + public ResponseEntity create(@RequestBody Map user){ + userService.create(user); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @Log("修改用户") + @ApiOperation("修改用户") + @PutMapping +// @SaCheckPermission("user:edit") + public ResponseEntity update( @RequestBody Map resources) throws Exception { + userService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("修改用户:个人中心") + @ApiOperation("修改用户:个人中心") +// @PutMapping(value = "center") + public ResponseEntity center(@RequestBody SysUser resources){ + if(!resources.getUser_id().equals(StpUtil.getLoginIdAsLong())){ + throw new BadRequestException(LangProcess.msg("login_update_information")); + } + userService.saveOrUpdate(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除用户") + @ApiOperation("删除用户") + @DeleteMapping +// @SaCheckPermission("user:del") + public ResponseEntity delete(@RequestBody Set ids) { + userService.removeByIds(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @ApiOperation("修改密码") + @PostMapping(value = "/updatePass") + public ResponseEntity updatePass(@RequestBody JSONObject passVo) throws Exception { + // 解密,得到字符密码 + String oldPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getString("oldPass")); + String newPass = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,passVo.getString("newPass")); + SysUser user = userService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, SecurityUtils.getCurrentUsername())); + if (!SaSecureUtil.md5BySalt(user.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(oldPass, "salt"))) { + throw new BadRequestException(LangProcess.msg("login_pwdWrong_1")); + } + if (!SaSecureUtil.md5BySalt(user.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(newPass, "salt"))) { + throw new BadRequestException(LangProcess.msg("login_pwdWrong_2")); + } + user.setPassword(SaSecureUtil.md5BySalt(newPass, "salt")); + userService.updateById(user); + return new ResponseEntity<>(HttpStatus.OK); + } + + @ApiOperation("修改头像") + @PostMapping(value = "/updateAvatar") + public ResponseEntity updateAvatar(@RequestParam MultipartFile avatar){ + return new ResponseEntity<>(userService.updateAvatar(avatar), HttpStatus.OK); + } + + @Log("修改邮箱") + @ApiOperation("修改邮箱") + @PostMapping(value = "/updateEmail/{code}") + public ResponseEntity updateEmail(@PathVariable String code,@RequestBody SysUser user) throws Exception { + String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,user.getPassword()); + SysUser userInfo = userService.getOne(new QueryWrapper().eq("username",SecurityUtils.getCurrentUsername())); + if(!SaSecureUtil.md5BySalt(userInfo.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(password, "salt"))){ + throw new BadRequestException(LangProcess.msg("error_pwd")); + } + userService.update(new UpdateWrapper().set(userInfo.getUsername(),user.getEmail())); + return new ResponseEntity<>(HttpStatus.OK); + } + + /** + * 如果当前用户的角色级别低于创建用户的角色级别,则抛出权限不足的错误 + * @param resources / + */ + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleDetailService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleDetailService.class new file mode 100644 index 0000000..5b57839 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleDetailService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleDetailService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleDetailService.java new file mode 100644 index 0000000..f595798 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleDetailService.java @@ -0,0 +1,37 @@ +package org.nl.system.service.coderule; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.coderule.dao.SysCodeRuleDetail; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.coderule.dto.CodeRuleDetailQuery; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + *

+ * 编码规则明细表 服务类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +public interface ISysCodeRuleDetailService extends IService { + + IPage queryAll(CodeRuleDetailQuery form, PageQuery pageable); + + void create(SysCodeRuleDetail codeRuleDetail); + + /** + * 根据id删除 + * @param id + */ + void delete(String id); + + /** + * 修改明细 + * @param json + */ + void update(SysCodeRuleDetail json); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleService.class new file mode 100644 index 0000000..06abbc2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleService.java new file mode 100644 index 0000000..49d63fb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/ISysCodeRuleService.java @@ -0,0 +1,54 @@ +package org.nl.system.service.coderule; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.coderule.dao.SysCodeRule; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.coderule.dto.CodeRuleQuery; + +import java.util.Map; +import java.util.Set; + +/** + *

+ * 编码规则表 服务类 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface ISysCodeRuleService extends IService { + + /** + * 分页查询 + * @param form + * @param pageable + * @return + */ + IPage queryAll(Map form, PageQuery pageable); + + /** + * 创建编码 + * @param form + * @return + */ + String codeDemo(Map form); + + /** + * 添加 + * @param codeRule + */ + void create(SysCodeRule codeRule); + + /** + * 删除编码 + * @param ids + */ + void deleteCodeRule(Set ids); + + /** + * 修改编码 + * @param codeRule + */ + void updateCodeRule(SysCodeRule codeRule); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRule.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRule.class new file mode 100644 index 0000000..54be8c0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRule.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRule.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRule.java new file mode 100644 index 0000000..8563b74 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRule.java @@ -0,0 +1,93 @@ +package org.nl.system.service.coderule.dao; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 编码规则表 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_code_rule") +public class SysCodeRule implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 当前值 + */ + private String current_value; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建id + */ + private String create_id; + + /** + * 创建者 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改id + */ + private String update_id; + + /** + * 修改者 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + @TableField(exist = false) + private String demo; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRuleDetail.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRuleDetail.class new file mode 100644 index 0000000..6a5a4fd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRuleDetail.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRuleDetail.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRuleDetail.java new file mode 100644 index 0000000..b85d88a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/SysCodeRuleDetail.java @@ -0,0 +1,132 @@ +package org.nl.system.service.coderule.dao; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 编码规则明细表 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_code_rule_detail") +public class SysCodeRuleDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 明细标识 + */ + @TableId + private String id; + + /** + * 编码规则类型 + */ + private String type; + + /** + * 初始值 + */ + private String init_value; + + /** + * 当前值 + */ + private String current_value; + + /** + * 允许最大值 + */ + private String max_value; + + /** + * 步长 + */ + private String step; + + /** + * 填充值 + */ + private String fillchar; + + /** + * 格式 + */ + private String format; + + /** + * 长度 + */ + private Integer length; + + /** + * 排序号 + */ + private BigDecimal sort_num; + + /** + * 备注 + */ + private String remark; + + /** + * 编码规则标识 + */ + private String code_rule_id; + + /** + * 是否启用 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建id + */ + private String create_id; + + /** + * 创建者 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改id + */ + private String update_id; + + /** + * 修改者 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + @TableField(exist = false) + private String dict_name; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.class new file mode 100644 index 0000000..eb44a43 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.java new file mode 100644 index 0000000..a76ceae --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.coderule.dao.mapper; + +import org.nl.system.service.coderule.dao.SysCodeRuleDetail; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 编码规则明细表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface SysCodeRuleDetailMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.xml new file mode 100644 index 0000000..d6301b1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleDetailMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.class new file mode 100644 index 0000000..744f227 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.java new file mode 100644 index 0000000..b4042f5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.coderule.dao.mapper; + +import org.nl.system.service.coderule.dao.SysCodeRule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 编码规则表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface SysCodeRuleMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.xml new file mode 100644 index 0000000..75142bc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dao/mapper/SysCodeRuleMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleDetailQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleDetailQuery.class new file mode 100644 index 0000000..21be9fa Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleDetailQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleDetailQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleDetailQuery.java new file mode 100644 index 0000000..0aabcf2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleDetailQuery.java @@ -0,0 +1,22 @@ +package org.nl.system.service.coderule.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.coderule.dao.SysCodeRuleDetail; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/20 + */ +@Data +public class CodeRuleDetailQuery extends BaseQuery { + String id; + + @Override + public void paramMapping() { + this.doP.put("id", QParam.builder().k(new String[]{"code_rule_id"}).type(QueryTEnum.EQ).build()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleQuery.class new file mode 100644 index 0000000..90f22e8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleQuery.java new file mode 100644 index 0000000..421f6f2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/dto/CodeRuleQuery.java @@ -0,0 +1,19 @@ +package org.nl.system.service.coderule.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.coderule.dao.SysCodeRule; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/19 + */ +public class CodeRuleQuery extends BaseQuery { + + @Override + public void paramMapping() { + this.doP.put("blurry", QParam.builder().k(new String[]{"code", "name"}).type(QueryTEnum.LK).build()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.class new file mode 100644 index 0000000..3dd19b1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java new file mode 100644 index 0000000..778f3f4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleDetailServiceImpl.java @@ -0,0 +1,79 @@ +package org.nl.system.service.coderule.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.coderule.ISysCodeRuleDetailService; +import org.nl.system.service.coderule.dao.SysCodeRuleDetail; +import org.nl.system.service.coderule.dao.mapper.SysCodeRuleDetailMapper; +import org.nl.system.service.coderule.dto.CodeRuleDetailQuery; +import org.nl.system.service.coderule.utils.CodeRuleTypeEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; + +/** + *

+ * 编码规则明细表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Service +public class SysCodeRuleDetailServiceImpl extends ServiceImpl implements ISysCodeRuleDetailService { + @Autowired + private SysCodeRuleDetailMapper codeRuleDetailMapper; + @Override + public IPage queryAll(CodeRuleDetailQuery form, PageQuery page) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(SysCodeRuleDetail::getCode_rule_id, form.getId()) + .orderByAsc(SysCodeRuleDetail::getSort_num); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + codeRuleDetailMapper.selectPage(pages, lam); + return pages; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(SysCodeRuleDetail codeRuleDetail) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentNickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + codeRuleDetail.setId(IdUtil.getSnowflake(1,1).nextIdStr()); + codeRuleDetail.setCurrent_value(codeRuleDetail.getInit_value()); + codeRuleDetail.setCreate_id(currentUserId); + codeRuleDetail.setCreate_name(currentNickName); + codeRuleDetail.setCreate_time(now); + codeRuleDetail.setUpdate_id(currentUserId); + codeRuleDetail.setUpdate_name(currentNickName); + codeRuleDetail.setUpdate_time(now); + if (codeRuleDetail.getType().equals(CodeRuleTypeEnum.DATE.getType())) { + Date date = DateUtil.date(); + String format = codeRuleDetail.getFormat(); + String nowDate = DateUtil.format(date, format); + codeRuleDetail.setInit_value(nowDate); + codeRuleDetail.setCurrent_value(nowDate); + } + codeRuleDetailMapper.insert(codeRuleDetail); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(String id) { + codeRuleDetailMapper.deleteById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysCodeRuleDetail json) { + codeRuleDetailMapper.updateById(json); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.class new file mode 100644 index 0000000..9f72d8a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java new file mode 100644 index 0000000..d195afe --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java @@ -0,0 +1,175 @@ +package org.nl.system.service.coderule.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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.MapOf; +import org.nl.config.language.LangProcess; +import org.nl.system.service.coderule.ISysCodeRuleService; +import org.nl.system.service.coderule.dao.SysCodeRule; +import org.nl.system.service.coderule.dao.SysCodeRuleDetail; +import org.nl.system.service.coderule.dao.mapper.SysCodeRuleDetailMapper; +import org.nl.system.service.coderule.dao.mapper.SysCodeRuleMapper; +import org.nl.system.service.coderule.utils.CodeRuleTypeEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 编码规则表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Service +public class SysCodeRuleServiceImpl extends ServiceImpl implements ISysCodeRuleService { + @Autowired + private SysCodeRuleMapper codeRuleMapper; + @Autowired + private SysCodeRuleDetailMapper codeRuleDetailMapper; + + @Override + public IPage queryAll(Map form, PageQuery pageable) { + String blurry = ObjectUtil.isNotEmpty(form.get("blurry"))?form.get("blurry").toString():null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(blurry), SysCodeRule::getCode, blurry) + .or(ObjectUtil.isNotEmpty(blurry)) + .like(ObjectUtil.isNotEmpty(blurry), SysCodeRule::getName, blurry); + IPage page = new Page<>(pageable.getPage() + 1, pageable.getSize()); + codeRuleMapper.selectPage(page, lam); + page.getRecords().forEach(sysCodeRule -> sysCodeRule.setDemo(codeDemo(MapOf.of("flag", "0", "code", sysCodeRule.getCode())))); + return page; + } + + @Override + public synchronized String codeDemo(Map form) { + String code = (String) form.get("code"); + String id = codeRuleMapper.selectOne(new LambdaQueryWrapper().eq(SysCodeRule::getCode, code)).getId(); + // 如果flag = 1就执行更新数据库的操作 + String flag = (String) form.get("flag"); + List ruleDetails = codeRuleDetailMapper.selectList(new LambdaQueryWrapper().eq(SysCodeRuleDetail::getCode_rule_id, id)); + String demo = ""; + boolean isSame = true; + for(SysCodeRuleDetail detail : ruleDetails) { + String value = ""; + String type = detail.getType(); + //固定直接取值 + if (type.equals(CodeRuleTypeEnum.FIXED.getType())) { + value = detail.getInit_value(); + } + //日期判断数据库的值与当前值是否相同来决定顺序的值 + if (type.equals(CodeRuleTypeEnum.DATE.getType())) { + String currentValue = detail.getCurrent_value(); + Date date = DateUtil.date(); + String format = detail.getFormat(); + String nowDate = DateUtil.format(date, format); + if (!nowDate.equals(currentValue)) { + isSame = false; + } + if (flag.equals("1")) { + detail.setInit_value(nowDate); + detail.setCurrent_value(nowDate); + } + value = nowDate; + } + //顺序的值:如果日期一样就+步长,等于最大值就归为初始值;日期不一样就归为初始值 + if (type.equals(CodeRuleTypeEnum.ORDER.getType())) { + String numValue = ""; + int step = Integer.parseInt(detail.getStep()); + Long maxValue = Long.valueOf(detail.getMax_value()); + if (!isSame && (Long.valueOf(detail.getCurrent_value()) + step) > maxValue) { + numValue = detail.getInit_value(); + } else { + numValue = Integer.parseInt(detail.getCurrent_value()) + step + ""; + } + int size = numValue.length(); + int length = detail.getLength(); + String fillchar = detail.getFillchar(); + for (int m = 0; m < (length - size); m++) { + value += fillchar; + } + value += numValue; + if (flag.equals("1")) { + if (!isSame) { + int initValue = Integer.parseInt(detail.getInit_value()); + if (StrUtil.isEmpty((initValue + ""))) { + throw new BadRequestException(LangProcess.msg("universal_init_code")); + } + detail.setCurrent_value(String.valueOf(initValue)); + } else { + int numCurr = Integer.parseInt(detail.getCurrent_value()); + if (numCurr >= maxValue) { + numCurr = Integer.parseInt(detail.getInit_value()); + detail.setCurrent_value(String.valueOf(numCurr)); + }else{ + detail.setCurrent_value(String.valueOf(numCurr + step)); + } + } + } + } + demo += value; + if (flag.equals("1")) { + codeRuleDetailMapper.updateById(detail); + } + } + return demo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(SysCodeRule codeRule) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + List sysCodeRules = codeRuleMapper.selectList(new LambdaQueryWrapper().eq(SysCodeRule::getCode, codeRule.getCode())); + if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new BadRequestException(LangProcess.msg("universal_code_exist1", sysCodeRules.get(0).getCode())); + codeRule.setId(IdUtil.getSnowflake(1,1).nextIdStr()); + codeRule.setCreate_id(currentUserId); + codeRule.setCreate_name(currentUsername); + codeRule.setCreate_time(now); + codeRule.setUpdate_id(currentUserId); + codeRule.setUpdate_name(currentUsername); + codeRule.setUpdate_time(now); + codeRuleMapper.insert(codeRule); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteCodeRule(Set ids) { + ids.forEach(id -> { + codeRuleMapper.deleteById(id); + codeRuleDetailMapper.delete(new LambdaQueryWrapper().eq(SysCodeRuleDetail::getCode_rule_id, id)); + }); + } + + @Override + public void updateCodeRule(SysCodeRule codeRule) { + List sysCodeRules = codeRuleMapper.selectList(new LambdaQueryWrapper() + .eq(SysCodeRule::getCode, codeRule.getCode()) + .ne(SysCodeRule::getId, codeRule.getId())); + if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new BadRequestException(LangProcess.msg("universal_code_exist2")); + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + codeRule.setUpdate_id(currentUserId); + codeRule.setUpdate_name(currentUsername); + codeRule.setUpdate_time(now); + codeRuleMapper.updateById(codeRule); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/utils/CodeRuleTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/utils/CodeRuleTypeEnum.class new file mode 100644 index 0000000..323d200 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/utils/CodeRuleTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/utils/CodeRuleTypeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/utils/CodeRuleTypeEnum.java new file mode 100644 index 0000000..939d2ea --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/coderule/utils/CodeRuleTypeEnum.java @@ -0,0 +1,20 @@ +package org.nl.system.service.coderule.utils; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 编码类型枚举 + * @Date: 2022/12/19 + */ +@Getter +@AllArgsConstructor +public enum CodeRuleTypeEnum { + FIXED("01", "固定"), + DATE("02", "日期"), + ORDER("03", "顺序"); + + private final String type; + private final String description; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysDeptService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysDeptService.class new file mode 100644 index 0000000..8804f72 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysDeptService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysDeptService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysDeptService.java new file mode 100644 index 0000000..8d159d8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysDeptService.java @@ -0,0 +1,70 @@ +package org.nl.system.service.dept; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.apache.poi.ss.formula.functions.T; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.dept.dao.SysDept; +import org.nl.system.service.dept.dto.DeptQuery; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 部门 服务类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface ISysDeptService extends IService { + /** + * 条件查询 + * @param query + * @param pageQuery + * @return + */ + Page queryVo(DeptQuery query, PageQuery pageQuery); + + /** + * 条件查询树结构 + * @param query + * @return + */ + Map buildTree(DeptQuery query); + + /** + * 查询当前部门id的上级id + * @param deptIds + * @return + */ + Map getSuperior(List deptIds); + + /** + * 保存用户部门关系 + * @param UserId + * @param deptIds + */ + void saveUserDeptRelation(String UserId, Collection deptIds); + void delUserDeptRelation(String user); + + /** + * 更新部门:同时更新节点 + * @param dept + */ + void updateDept(SysDept dept); + + /** + * 删除部门及子部门 + * @param deptIds + */ + void delateDept(Set deptIds); + + void createDept(SysDept dept); + + List getUserDeptByUserId(String userId); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysUserDeptService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysUserDeptService.class new file mode 100644 index 0000000..e7bfdc8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysUserDeptService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysUserDeptService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysUserDeptService.java new file mode 100644 index 0000000..d36b292 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/ISysUserDeptService.java @@ -0,0 +1,16 @@ +package org.nl.system.service.dept; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.dept.dao.SysUserDept; + +/** + *

+ * 部门表 服务类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface ISysUserDeptService extends IService { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysDept.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysDept.class new file mode 100644 index 0000000..0e714f2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysDept.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysDept.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysDept.java new file mode 100644 index 0000000..b865cf3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysDept.java @@ -0,0 +1,93 @@ +package org.nl.system.service.dept.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 部门 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_dept") +public class SysDept implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "dept_id", type = IdType.NONE) + private String dept_id; + + /** + * 上级部门 + */ + private String pid; + + /** + * 子部门数目 + */ + private Integer sub_count; + + /** + * 名称 + */ + private String name; + + /** + * 排序 + */ + private Integer dept_sort; + + /** + * 状态 + */ + private Boolean is_used; + + private String create_id; + + /** + * 创建者 + */ + private String create_name; + + private String update_id; + + /** + * 更新者 + */ + private String update_name; + + /** + * 创建日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date create_time; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date update_time; + + /** + * 部门编号 + */ + private String code; + + private String ext_id; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysUserDept.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysUserDept.class new file mode 100644 index 0000000..888a68c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysUserDept.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysUserDept.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysUserDept.java new file mode 100644 index 0000000..fb29ffa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/SysUserDept.java @@ -0,0 +1,35 @@ +package org.nl.system.service.dept.dao; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + *

+ * 部门表 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_user_dept") +public class SysUserDept implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户标识 + */ + private Long user_id; + + /** + * 部门标识 + */ + private Long dept_id; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.class new file mode 100644 index 0000000..9b413de Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.java new file mode 100644 index 0000000..33ce82b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.java @@ -0,0 +1,46 @@ +package org.nl.system.service.dept.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.nl.system.service.dept.dao.SysDept; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + *

+ * 部门 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface SysDeptMapper extends BaseMapper { + + /** + * 保存依赖关系 + * @param UserId + * @param deptId + */ + void saveDeptRelation(@Param("user") String UserId,@Param("depts") Collection deptId); + void delDeptRelation(@Param("user") String UserId); + + List getDeptRelation(@Param("deptIds") Collection deptIds); + + /** + * 跟新sub_count字段 + * @param deptId + * @return + */ + int updateSubCount(String deptId); + + /** + * 返回字符串列表 split = , + * @param pid + * @return + */ + String findAllChild(String pid); + + List getUserDeptByUserId(String userId); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.xml new file mode 100644 index 0000000..37eb4c5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysDeptMapper.xml @@ -0,0 +1,53 @@ + + + + + + replace into sys_user_dept values + + (#{user},#{dept}) + + + + delete from sys_user_dept where user_id = #{user} + + + + update sys_dept set sub_count = + (select m.count from (select count(*) count from sys_dept where pid = #{pid}) as m) + where dept_id = #{pid} + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.class new file mode 100644 index 0000000..fba538a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.java new file mode 100644 index 0000000..54a4953 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.dept.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.system.service.dept.dao.SysUserDept; + +/** + *

+ * 部门表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface SysUserDeptMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.xml new file mode 100644 index 0000000..6abf529 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dao/mapper/SysUserDeptMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptQuery.class new file mode 100644 index 0000000..32dc35b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptQuery.java new file mode 100644 index 0000000..51854f0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptQuery.java @@ -0,0 +1,33 @@ +package org.nl.system.service.dept.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.dept.dao.SysDept; + +import java.util.List; + +/* + * @author ZZQ + * @Date 2022/12/15 4:20 下午 + */ +@Data +public class DeptQuery extends BaseQuery { + + private List deptIds; + + private String name; + + private String code; + + private Long pid; + + private Boolean pid_is_null; + + @Override + public void paramMapping() { + super.doP.put("pid_is_null", QParam.builder().k(new String[]{"pid"}).type(QueryTEnum.NO).build()); + super.doP.put("deptIds", QParam.builder().k(new String[]{"dept_id"}).type(QueryTEnum.IN).build()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptTree.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptTree.class new file mode 100644 index 0000000..a1dae54 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptTree.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptTree.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptTree.java new file mode 100644 index 0000000..0aaf8b8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/dto/DeptTree.java @@ -0,0 +1,41 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.dept.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** +* @author Zheng Jie +* @date 2019-03-25 +*/ +@Getter +@Setter +public class DeptTree implements Serializable { + + private String dept_id; + + private String pid; + + private String name; + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysDeptServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysDeptServiceImpl.class new file mode 100644 index 0000000..53d854d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysDeptServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysDeptServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..b2ae7e2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysDeptServiceImpl.java @@ -0,0 +1,185 @@ +package org.nl.system.service.dept.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.dto.CurrentUser; +import org.nl.common.domain.vo.DeptVo; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dept.dto.DeptTree; +import org.nl.common.utils.CopyUtil; +import org.nl.config.IdUtil; +import org.nl.system.service.dept.ISysDeptService; +import org.nl.system.service.dept.dao.SysDept; +import org.nl.system.service.dept.dao.mapper.SysDeptMapper; +import org.nl.system.service.dept.dto.DeptQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 部门 服务实现类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Service +public class SysDeptServiceImpl extends ServiceImpl implements ISysDeptService { + + @Autowired + private SysDeptMapper sysDeptMapper; + + @Override + public Map buildTree(DeptQuery query) { + List list = this.list(query.build()); + List deptTrees = CopyUtil.copyList(list, DeptTree.class); + return this.buildTree(deptTrees); + } + + @Override + public Map getSuperior(List deptIds) { + return null; + } + + private Map buildTree(List deptDtos) { + List trees= new ArrayList<>(); + Set depts = new LinkedHashSet<>(); + List deptNames = deptDtos.stream().map(DeptTree::getName).collect(Collectors.toList()); + boolean isChild; + for (DeptTree deptDTO : deptDtos) { + isChild = false; + if (deptDTO.getPid() == null) { + trees.add(deptDTO); + } + for (DeptTree it : deptDtos) { + if (it.getPid() != null && deptDTO.getDept_id().equals(it.getPid())) { + isChild = true; + if (deptDTO.getChildren() == null) { + deptDTO.setChildren(new ArrayList<>()); + } + deptDTO.getChildren().add(it); + } + } + if (isChild) { + depts.add(deptDTO); + } else if (deptDTO.getPid() != null && !deptNames.contains(this.getById(deptDTO.getPid()).getName())) { + depts.add(deptDTO); + } + } + Map map = new HashMap<>(2); + map.put("totalElements", deptDtos.size()); + map.put("content", CollectionUtil.isEmpty(trees) ? deptDtos : trees); + return map; + } + + @Override + public Page queryVo(DeptQuery query, PageQuery pageQuery) { + if (query.getPid_is_null() == null){ + if (query.getPid() == null){ + query.setPid_is_null(true); + } + if (StringUtils.isNotEmpty(query.getName()) || query.getIs_used()!=null){ + query.setPid_is_null(null); + } + } + Page page = this.page(pageQuery.build(SysDept.class), query.build()); + page.setRecords(CopyUtil.copyList(page.getRecords(), DeptVo.class)); + if (StringUtils.isNotEmpty(query.getName()) || query.getIs_used()!=null){ + page.getRecords().forEach(a->((DeptVo)a).setHas_children(false) ); + } + return page; + } + + + @Override + public void saveUserDeptRelation(String userId, Collection deptIds) { + if (StringUtils.isEmpty(userId) || CollectionUtils.isEmpty(deptIds)){ + return; + } + sysDeptMapper.saveDeptRelation(userId,deptIds); + } + + @Override + public void delUserDeptRelation(String user) { + sysDeptMapper.delDeptRelation(user); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateDept(SysDept dept) { + if (dept == null ||StringUtils.isEmpty(dept.getDept_id())){ + return; + } + this.updateById(dept); + //删除节点信息 + sysDeptMapper.updateSubCount(dept.getDept_id()); + if (StringUtils.isNotEmpty(dept.getPid())){ + sysDeptMapper.updateSubCount(dept.getPid()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delateDept(Set deptIds) { + if (CollectionUtils.isEmpty(deptIds)){ + return; + } + verification(deptIds); + Set depts = new HashSet<>(); + Set pids = new HashSet<>(); + List deptList = sysDeptMapper.selectList(new QueryWrapper().in("dept_id", deptIds)); + for (String deptId : deptIds) { + depts.add(deptId); + String allChild = sysDeptMapper.findAllChild(deptId); + if (StringUtils.isNotEmpty(allChild)){ + String[] split = allChild.split(","); + depts.addAll(Arrays.asList(split)); + } + } + this.remove(new QueryWrapper().in("dept_id", depts)); + deptList.forEach(dept -> { + if (StringUtils.isNotEmpty(dept.getPid())){sysDeptMapper.updateSubCount(dept.getPid());} + }); + + } + + private void verification(Set depeIds) { + if (!CollectionUtils.isEmpty(depeIds)){ + List deptRelation = sysDeptMapper.getDeptRelation(depeIds); + if (!CollectionUtils.isEmpty(deptRelation)){ + throw new BadRequestException(LangProcess.msg("universal_dept_exist")); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createDept(SysDept dept) { + dept.setDept_id(IdUtil.getStringId()); + CurrentUser user = SecurityUtils.getCurrentUser(); + dept.setCreate_id(user.getId()); + dept.setCreate_name(user.getPresonName()); + dept.setCreate_time(new Date()); + this.save(dept); + // 清理缓存 + if (StringUtils.isNotEmpty(dept.getPid())){ + sysDeptMapper.updateSubCount(dept.getPid()); + } + } + + @Override + public List getUserDeptByUserId(String userId) { + return sysDeptMapper.getUserDeptByUserId(userId); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysUserDeptServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysUserDeptServiceImpl.class new file mode 100644 index 0000000..d5993a8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysUserDeptServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysUserDeptServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysUserDeptServiceImpl.java new file mode 100644 index 0000000..e9a9774 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dept/impl/SysUserDeptServiceImpl.java @@ -0,0 +1,20 @@ +package org.nl.system.service.dept.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.system.service.dept.ISysUserDeptService; +import org.nl.system.service.dept.dao.SysUserDept; +import org.nl.system.service.dept.dao.mapper.SysUserDeptMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 部门表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Service +public class SysUserDeptServiceImpl extends ServiceImpl implements ISysUserDeptService { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/ISysDictService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/ISysDictService.class new file mode 100644 index 0000000..dd37a8f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/ISysDictService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/ISysDictService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/ISysDictService.java new file mode 100644 index 0000000..f56a0ba --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/ISysDictService.java @@ -0,0 +1,88 @@ +package org.nl.system.service.dict; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dto.DictQuery; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 字典表 服务类 + *

+ * + * @author generator + * @since 2022-12-14 + */ +public interface ISysDictService extends IService { + + /** + * 分页查找 + * @param whereJson + * @param pageable + * @return + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 新增 + * @param dict + */ + void create(Dict dict); + + /** + * 修改字典数据 + * @param dto + */ + void updateDict(Dict dto); + + /** + * 通过id批量删除字典 + * @param ids + */ + void deleteBatchByIds(Set ids); + + /** + * 分页查询获取字典明细 + * @param criteria + * @param pageable + * @return + */ + IPage queryAllDetail(DictQuery criteria, PageQuery pageable); + + /** + * 获取字典明细 + * @param name + * @return + */ + List getDictByName(String name); + + /** + * 添加字典明细 + * @param resources + */ + void createDetail(Dict resources); + + /** + * 更新字典明细 + * @param resources + */ + void updateDetail(Dict resources); + + /** + * 删除字典 + * @param id + */ + void deleteDetail(String id); + + /** + * 查询所有字典信息 + * @return + */ + List queryAll(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/Dict.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/Dict.class new file mode 100644 index 0000000..69dc5ae Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/Dict.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/Dict.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/Dict.java new file mode 100644 index 0000000..2010f30 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/Dict.java @@ -0,0 +1,107 @@ +package org.nl.system.service.dict.dao; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 字典表 + *

+ * + * @author generator + * @since 2022-12-14 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_dict") +public class Dict implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 字典标识 + */ + @TableId(value = "dict_id") + private String dict_id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 字典标签 + */ + private String label; + + /** + * 字典值 + */ + private String value; + + /** + * 排序号 + */ + private BigDecimal dict_sort; + + /** + * 字典类型 + */ + private String dict_type; + + /** + * 参数1 + */ + private String para1; + + /** + * 参数2 + */ + private String para2; + + /** + * 参数3 + */ + private String para3; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.class new file mode 100644 index 0000000..2526737 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.java new file mode 100644 index 0000000..d83ff61 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.dict.dao.mapper; + +import org.nl.system.service.dict.dao.Dict; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 字典表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-14 + */ +public interface SysDictMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.xml new file mode 100644 index 0000000..d4acd65 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dao/mapper/SysDictMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dto/DictQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dto/DictQuery.class new file mode 100644 index 0000000..f27c07e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dto/DictQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dto/DictQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dto/DictQuery.java new file mode 100644 index 0000000..c446f91 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/dto/DictQuery.java @@ -0,0 +1,18 @@ +package org.nl.system.service.dict.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.system.service.dict.dao.Dict; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/15 + */ +@Data +public class DictQuery extends BaseQuery { + private String code; + + private String dict_name; + private String dict_id; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/impl/SysDictServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/impl/SysDictServiceImpl.class new file mode 100644 index 0000000..4d01908 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/impl/SysDictServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/impl/SysDictServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/impl/SysDictServiceImpl.java new file mode 100644 index 0000000..54b9167 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/dict/impl/SysDictServiceImpl.java @@ -0,0 +1,197 @@ +package org.nl.system.service.dict.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.system.service.dict.dto.DictQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 字典表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-14 + */ +@Service +public class SysDictServiceImpl extends ServiceImpl implements ISysDictService { + @Autowired + private SysDictMapper sysDictMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String blurry = null; + if (ObjectUtil.isNotEmpty(whereJson.get("blurry"))) blurry = whereJson.get("blurry").toString(); + IPage pages = this.page(new Page<>(page.getPage() + 1, page.getSize()), new QueryWrapper() + .select("MAX(dict_id) AS dict_id, code, name") + .lambda() + .like(ObjectUtil.isNotEmpty(blurry), Dict::getCode, blurry) + .or(ObjectUtil.isNotEmpty(blurry)) + .like(ObjectUtil.isNotEmpty(blurry), Dict::getName, blurry) + .orderBy(true, true, Dict::getCode) + .groupBy(Dict::getCode, Dict::getName)); + return pages; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(Dict dict) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String date = DateUtil.now(); + List oldDict = sysDictMapper.selectList(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dict.getCode()), Dict::getCode, dict.getCode())); + if (ObjectUtil.isNotEmpty(oldDict)) throw new BadRequestException(LangProcess.msg("universal_dict_exist",dict.getCode())); + dict.setDict_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + dict.setCreate_id(currentUserId); + dict.setCreate_name(nickName); + dict.setCreate_time(date); + dict.setUpdate_id(currentUserId); + dict.setUpdate_name(nickName); + dict.setUpdate_time(date); + sysDictMapper.insert(dict); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateDict(Dict dto) { + Dict dict = sysDictMapper.selectById(dto.getDict_id()); + if (ObjectUtil.isEmpty(dict)) { + throw new BadRequestException(LangProcess.msg("universal_dict_NoExist")); + } + List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dto.getCode())); + if (ObjectUtil.isNotEmpty(dictList) && !dto.getCode().equals(dict.getCode())) + throw new BadRequestException(LangProcess.msg("universal_dict_exist",dict.getCode())); + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentNickName = SecurityUtils.getCurrentNickName(); + // 根据code获取所有字典 + List dicts = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dict.getCode())); + dicts.forEach(di -> { + di.setCode(dto.getCode()); + di.setName(dto.getName()); + di.setUpdate_id(currentUserId); + di.setUpdate_name(currentNickName); + di.setUpdate_time(DateUtil.now()); + sysDictMapper.updateById(di); + }); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteBatchByIds(Set ids) { + // 查找code删除 + ids.forEach(id -> { + String code = sysDictMapper.selectById(id).getCode(); + sysDictMapper.delete(new LambdaQueryWrapper().eq(Dict::getCode, code)); + }); + } + + @Override + public IPage queryAllDetail(DictQuery criteria, PageQuery page) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(Dict::getCode, criteria.getCode()) + .isNotNull(Dict::getLabel) + .ne(Dict::getLabel, "") + .orderBy(true, true, Dict::getDict_sort); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + sysDictMapper.selectPage(pages, lam); + return pages; + } + + @Override + public List getDictByName(String name) { + List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, name) + .isNotNull(Dict::getLabel) + .ne(Dict::getLabel, "")); + return dictList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createDetail(Dict dict) { + // 校验是否已经有标签 + Dict one = sysDictMapper.selectOne(new LambdaQueryWrapper().eq(Dict::getLabel, dict.getLabel()) + .eq(Dict::getCode, dict.getCode())); + if (ObjectUtil.isNotEmpty(one)) throw new BadRequestException(LangProcess.msg("universal_label_exist",dict.getLabel())); + // 判断是否有空的值 + List selectOne = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, dict.getCode())); + Dict dic = selectOne.get(0); + if (ObjectUtil.isEmpty(dic.getLabel())) { + // 空就赋值 + dic.setCode(dict.getCode()); + dic.setLabel(dict.getLabel()); + dic.setValue(dict.getValue()); + dic.setDict_sort(dict.getDict_sort()); + dic.setDict_type(dict.getDict_type()); + dic.setPara1(dict.getPara1()); + dic.setPara2(dict.getPara2()); + dic.setPara3(dict.getPara3()); + sysDictMapper.updateById(dic); + return; + } + // 插入新的数据 + dict.setDict_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + dict.setCode(dic.getCode()); + dict.setName(dic.getName()); + dict.setCreate_id(SecurityUtils.getCurrentUserId()); + dict.setCreate_name(SecurityUtils.getCurrentNickName()); + dict.setCreate_time(DateUtil.now()); + dict.setUpdate_id(SecurityUtils.getCurrentUserId()); + dict.setUpdate_name(SecurityUtils.getCurrentNickName()); + dict.setUpdate_time(DateUtil.now()); + sysDictMapper.insert(dict); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateDetail(Dict resources) { + Dict dict = sysDictMapper.selectById(resources.getDict_id()); + if (ObjectUtil.isEmpty(dict)) { + throw new BadRequestException(LangProcess.msg("universal_error")); + } + // 校验是否已经有标签 + List dictList = sysDictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getLabel, resources.getLabel()) + .eq(Dict::getCode, resources.getCode())); + if (ObjectUtil.isNotEmpty(dictList) && !resources.getLabel().equals(dict.getLabel())) { + throw new BadRequestException(LangProcess.msg("universal_label_exist",dict.getLabel())); + } + resources.setUpdate_id(SecurityUtils.getCurrentUserId()); + resources.setUpdate_name(SecurityUtils.getCurrentNickName()); + resources.setUpdate_time(DateUtil.now()); + sysDictMapper.updateById(resources); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteDetail(String id) { + sysDictMapper.deleteById(id); + } + + @Override + public List queryAll() { + return sysDictMapper.selectList(new QueryWrapper() + .select("MAX(dict_id) AS dictId, code, name") + .lambda() + .groupBy(Dict::getCode, Dict::getName)); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGenConfigService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGenConfigService.class new file mode 100644 index 0000000..cd6d20f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGenConfigService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGenConfigService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGenConfigService.java new file mode 100644 index 0000000..1ae10b9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGenConfigService.java @@ -0,0 +1,30 @@ +package org.nl.system.service.generator; + +import org.nl.system.service.generator.dao.CodeGenConfig; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 代码生成配置表 服务类 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +public interface ICodeGenConfigService extends IService { + + /** + * 根据表名查找 + * @param tableName + * @return + */ + CodeGenConfig findByTableName(String tableName); + + /** + * 根据表名更新 + * @param tableName + * @param genConfig + * @return + */ + CodeGenConfig update(String tableName, CodeGenConfig genConfig); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGeneratorService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGeneratorService.class new file mode 100644 index 0000000..8de37bd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGeneratorService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGeneratorService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGeneratorService.java new file mode 100644 index 0000000..ee1fd9f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/ICodeGeneratorService.java @@ -0,0 +1,72 @@ +package org.nl.system.service.generator; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.generator.dao.CodeColumnConfig; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.generator.dao.CodeGenConfig; +import org.nl.system.service.generator.dto.TablesInfo; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.Async; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + *

+ * 列的数据信息表 服务类 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +public interface ICodeGeneratorService extends IService { + + /** + * 获得所有的表格信息 + * @return + */ + IPage getTables(String name, PageQuery pageQuery); + + /** + * 得到数据表的元数据 + * @param tableName 表名 + * @return / + */ + IPage getColumns(String tableName); + + /** + * 根据表名查询表字段 + * @param tableName + * @return + */ + List query(String tableName); + + /** + * 同步表数据 + * @param columnInfos / + * @param columnInfoList / + */ + @Async + void sync(IPage columnInfos, List columnInfoList); + + ResponseEntity preview(CodeGenConfig byTableName, IPage columns); + + /** + * 打包下载 + * @param genConfig 配置信息 + * @param columnsPage 字段信息分页数据 + * @param request / + * @param response / + */ + void download(CodeGenConfig genConfig, IPage columnsPage, HttpServletRequest request, HttpServletResponse response); + + /** + * 代码生成 + * @param genConfig 配置信息 + * @param columnsPage 字段信息分页数据 + */ + void generator(CodeGenConfig genConfig, IPage columnsPage); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig$CodeColumnConfigBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig$CodeColumnConfigBuilder.class new file mode 100644 index 0000000..08fb481 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig$CodeColumnConfigBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig.class new file mode 100644 index 0000000..35017f9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig.java new file mode 100644 index 0000000..f5427fc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeColumnConfig.java @@ -0,0 +1,73 @@ +package org.nl.system.service.generator.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 列的数据信息表 + *

+ * + * @author generator + * @since 2023-05-03 + */ +@Data +@Builder +@EqualsAndHashCode(callSuper = false) +@TableName("code_column_config") +public class CodeColumnConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId(value = "column_id", type = IdType.ASSIGN_ID) + private String column_id; + + @ApiModelProperty(value = "表名") + private String table_name; + + @ApiModelProperty(value = "数据库字段名称") + private String column_name; + + @ApiModelProperty(value = "数据库字段类型") + private String column_type; + + @ApiModelProperty(value = "数据库字段键类型") + private String key_type; + + @ApiModelProperty(value = "字段额外的参数") + private String extra; + + @ApiModelProperty(value = "数据库字段描述") + private String remark; + + @ApiModelProperty(value = "是否必填") + private Boolean not_null; + + @ApiModelProperty(value = "是否在列表显示") + private Boolean list_show; + + @ApiModelProperty(value = "是否表单显示") + private Boolean form_show; + + @ApiModelProperty(value = "表单类型") + private String form_type; + + @ApiModelProperty(value = "查询 1:模糊 2:精确") + private String query_type; + + @ApiModelProperty(value = "字典名称") + private String dict_name; + + @ApiModelProperty(value = "日期注解") + private String date_annotation; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeGenConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeGenConfig.class new file mode 100644 index 0000000..83e9423 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeGenConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeGenConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeGenConfig.java new file mode 100644 index 0000000..3d438c1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/CodeGenConfig.java @@ -0,0 +1,82 @@ +package org.nl.system.service.generator.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + *

+ * 代码生成配置表 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@TableName("code_gen_config") +public class CodeGenConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + public CodeGenConfig(String table_name) { + this.table_name = table_name; + } + + /** + * ID + */ + @TableId(value = "config_id") + private String config_id; + + /** + * 表名 + */ + private String table_name; + + /** + * 作者 + */ + private String author; + + /** + * 是否覆盖 + */ + private Boolean cover; + + /** + * 模块名称 + */ + private String module_name; + + /** + * 包名 + */ + private String pack; + + /** + * 路径 + */ + private String path; + + /** + * api路径 + */ + private String api_path; + + /** + * 表前缀 + */ + private String prefix; + + /** + * 接口名称 + */ + private String api_alias; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.class new file mode 100644 index 0000000..dd110b1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.java new file mode 100644 index 0000000..c1306b6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.java @@ -0,0 +1,35 @@ +package org.nl.system.service.generator.dao.mapper; + +import org.nl.system.service.generator.dao.CodeColumnConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.system.service.generator.dto.ColumnInfo; +import org.nl.system.service.generator.dto.TablesInfo; + +import java.util.List; + +/** + *

+ * 列的数据信息表 Mapper 接口 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +public interface CodeColumnConfigMapper extends BaseMapper { + + /** + * 分页查找 + * @param name + * @return + */ + List getTables(String name, int pageSize, int offset); + + /** + * 分页查询的总数 + * @param name + * @return + */ + long getTablesTotal(String name); + + List getTablesByTableName(String tableName); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.xml new file mode 100644 index 0000000..e35f1b8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeColumnConfigMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.class new file mode 100644 index 0000000..d677b57 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.java new file mode 100644 index 0000000..1fb385f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.generator.dao.mapper; + +import org.nl.system.service.generator.dao.CodeGenConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 代码生成配置表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-03 + */ +public interface CodeGenConfigMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.xml new file mode 100644 index 0000000..72ca44c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dao/mapper/CodeGenConfigMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/ColumnInfo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/ColumnInfo.class new file mode 100644 index 0000000..4882a83 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/ColumnInfo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/ColumnInfo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/ColumnInfo.java new file mode 100644 index 0000000..79e389f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/ColumnInfo.java @@ -0,0 +1,48 @@ +package org.nl.system.service.generator.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: lyd + * @Description: 字段信息 + * @Date: 2023/5/3 + */ +@Data +public class ColumnInfo { + @ApiModelProperty(value = "数据库字段名称") + private String column_name; + + @ApiModelProperty(value = "数据库字段类型") + private String column_type; + + @ApiModelProperty(value = "数据库字段键类型") + private String key_type; + + @ApiModelProperty(value = "字段额外的参数") + private String extra; + + @ApiModelProperty(value = "数据库字段描述") + private String remark; + + @ApiModelProperty(value = "是否必填") + private Boolean not_null; + + @ApiModelProperty(value = "是否在列表显示") + private Boolean list_show; + + @ApiModelProperty(value = "是否表单显示") + private Boolean form_show; + + @ApiModelProperty(value = "表单类型") + private String form_type; + + @ApiModelProperty(value = "查询 1:模糊 2:精确") + private String query_type; + + @ApiModelProperty(value = "字典名称") + private String dict_name; + + @ApiModelProperty(value = "日期注解") + private String date_annotation; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/TablesInfo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/TablesInfo.class new file mode 100644 index 0000000..82bbab5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/TablesInfo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/TablesInfo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/TablesInfo.java new file mode 100644 index 0000000..9dce5d9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/dto/TablesInfo.java @@ -0,0 +1,40 @@ +package org.nl.system.service.generator.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: lyd + * @Description: 表的数据信息 + * @Date: 2023/5/3 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TablesInfo { + /** + * 表名 + */ + private String table_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 引擎 + */ + private String ENGINE; + + /** + * 字符序 + */ + private String coding; + + /** + * 注释 + */ + private String remark; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGenConfigServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGenConfigServiceImpl.class new file mode 100644 index 0000000..d239002 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGenConfigServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGenConfigServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGenConfigServiceImpl.java new file mode 100644 index 0000000..7d0f5af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGenConfigServiceImpl.java @@ -0,0 +1,71 @@ +package org.nl.system.service.generator.impl; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.system.service.generator.ICodeGenConfigService; +import org.nl.system.service.generator.dao.CodeGenConfig; +import org.nl.system.service.generator.dao.mapper.CodeGenConfigMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; + +/** + *

+ * 代码生成配置表 服务实现类 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +@Service +public class CodeGenConfigServiceImpl extends ServiceImpl implements ICodeGenConfigService { + + @Autowired + private CodeGenConfigMapper codeGenConfigMapper; + + @Override + public CodeGenConfig findByTableName(String tableName) { + CodeGenConfig codeGenConfig = codeGenConfigMapper.selectOne(new LambdaQueryWrapper() + .eq(CodeGenConfig::getTable_name, tableName)); + if (ObjectUtil.isEmpty(codeGenConfig)) { + return new CodeGenConfig(tableName); + } + return codeGenConfig; + } + + @Override + public CodeGenConfig update(String tableName, CodeGenConfig genConfig) { + // 如果 api 路径为空,则自动生成路径 + if(StrUtil.isEmpty(genConfig.getApi_path())){ + String separator = File.separator; + String[] paths; + String symbol = "\\"; + if (symbol.equals(separator)) { + paths = genConfig.getPath().split("\\\\"); + } else { + paths = genConfig.getPath().split(File.separator); + } + StringBuilder api = new StringBuilder(); + for (String path : paths) { + api.append(path); + api.append(separator); + if ("src".equals(path)) { + api.append("api"); + break; + } + } + genConfig.setApi_path(api.toString()); + } + if (ObjectUtil.isNotEmpty(genConfig.getConfig_id())) { + codeGenConfigMapper.updateById(genConfig); + } else { + genConfig.setConfig_id(IdUtil.getSnowflake(1,1).nextIdStr()); + codeGenConfigMapper.insert(genConfig); + } + return genConfig; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.class new file mode 100644 index 0000000..3453184 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java new file mode 100644 index 0000000..d569aa8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/generator/impl/CodeGeneratorServiceImpl.java @@ -0,0 +1,180 @@ +package org.nl.system.service.generator.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.GenUtil; +import org.nl.config.language.LangProcess; +import org.nl.system.service.generator.ICodeGeneratorService; +import org.nl.system.service.generator.dao.CodeColumnConfig; +import org.nl.system.service.generator.dao.CodeGenConfig; +import org.nl.system.service.generator.dao.mapper.CodeColumnConfigMapper; +import org.nl.system.service.generator.dto.ColumnInfo; +import org.nl.system.service.generator.dto.TablesInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 列的数据信息表 服务实现类 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +@Service +public class CodeGeneratorServiceImpl extends ServiceImpl implements ICodeGeneratorService { + + @Autowired + private CodeColumnConfigMapper columnConfigMapper; + + @Override + public IPage getTables(String name, PageQuery pageQuery) { + IPage pages = new Page<>(); + int page = pageQuery.getPage(); + int pageSize = pageQuery.getSize(); + int offset = page * pageSize; + List tableInfos = columnConfigMapper.getTables(name, pageSize, offset); + long num = columnConfigMapper.getTablesTotal(name); + pages.setRecords(tableInfos); + pages.setCurrent(page + 1); + pages.setSize(pageSize); + pages.setTotal(num); + return pages; + } + + @Override + public IPage getColumns(String tableName) { + IPage pages = new Page<>(); + // 查找行列数据表 + List codeColumnConfigs = columnConfigMapper + .selectList(new LambdaQueryWrapper() + .eq(CodeColumnConfig::getTable_name, tableName)); + if (ObjectUtil.isEmpty(codeColumnConfigs)) { + // 为空查找全新的数据 + codeColumnConfigs = query(tableName); + // 保存 + this.saveBatch(codeColumnConfigs); + } + pages.setRecords(codeColumnConfigs); + return pages; + } + + @Override + public List query(String tableName) { + List columnConfigList = columnConfigMapper.getTablesByTableName(tableName); + // 设置默认值 + List columnInfos = columnConfigList.stream() + .map(config -> CodeColumnConfig + .builder() + .column_id(IdUtil.getSnowflake(1,1).nextIdStr()) + .table_name(tableName) + .column_name(config.getColumn_name()) + .column_type(config.getColumn_type()) + .key_type(config.getKey_type()) + .extra(config.getExtra()) + .not_null((ObjectUtil.isNotEmpty(config.getKey_type()) + &&ObjectUtil.isNotEmpty(config.getExtra()) + &&GenUtil.PK.equalsIgnoreCase(config.getKey_type()) + &&GenUtil.EXTRA.equalsIgnoreCase(config.getExtra())) + ?false:ObjectUtil.isNotEmpty(config.getNot_null())?config.getNot_null():false) + .remark(ObjectUtil.isNotEmpty(config.getRemark())?config.getRemark():null) + .list_show(true) + .form_show(true) + .build()) + .collect(Collectors.toList()); + return columnInfos; + } + + @Override + public void sync(IPage columnInfos, List columnInfoList) { + List records = columnInfos.getRecords(); + // 第一种情况,数据库类字段改变或者新增字段 + for (CodeColumnConfig columnInfo : columnInfoList) { + // 根据字段名称查找 + List columns = records.stream().filter(c -> c.getColumn_name().equals(columnInfo.getColumn_name())).collect(Collectors.toList()); + // 如果能找到,就修改部分可能被字段 + if (CollectionUtil.isNotEmpty(columns)) { + CodeColumnConfig column = columns.get(0); + column.setColumn_type(columnInfo.getColumn_type()); + column.setExtra(columnInfo.getExtra()); + column.setKey_type(columnInfo.getKey_type()); + if (StrUtil.isEmpty(column.getRemark())) { + column.setRemark(columnInfo.getRemark()); + } + columnConfigMapper.updateById(column); + } else { + // 如果找不到,则保存新字段信息 + columnConfigMapper.insert(columnInfo); + } + } + // 第二种情况,数据库字段删除了 + for (CodeColumnConfig columnInfo : records) { + // 根据字段名称查找 + List columns = columnInfoList.stream().filter(c -> c.getColumn_name().equals(columnInfo.getColumn_name())).collect(Collectors.toList()); + // 如果找不到,就代表字段被删除了,则需要删除该字段 + if (CollectionUtil.isEmpty(columns)) { + columnConfigMapper.deleteById(columnInfo.getColumn_id()); + } + } + } + + @Override + public ResponseEntity preview(CodeGenConfig genConfig, IPage columns) { + List columnsRecords = columns.getRecords(); + if (genConfig.getConfig_id() == null) { + throw new BadRequestException(LangProcess.msg("universal_generators")); + } + List> genList = GenUtil.preview(columnsRecords, genConfig); + return new ResponseEntity<>(genList, HttpStatus.OK); + } + + @Override + public void download(CodeGenConfig genConfig, IPage columnsPage, HttpServletRequest request, HttpServletResponse response) { + List columns = columnsPage.getRecords(); + if (genConfig.getConfig_id() == null) { + throw new BadRequestException(LangProcess.msg("universal_generators")); + } + try { + File file = new File(GenUtil.download(columns, genConfig)); + String zipPath = file.getPath() + ".zip"; + ZipUtil.zip(file.getPath(), zipPath); + FileUtil.downloadFile(request, response, new File(zipPath), true); + } catch (IOException e) { + throw new BadRequestException(LangProcess.msg("error_pack")); + } + } + + @Override + public void generator(CodeGenConfig genConfig, IPage columnsPage) { + List columns = columnsPage.getRecords(); + if (genConfig.getConfig_id() == null) { + throw new BadRequestException(LangProcess.msg("universal_generators")); + } + try { + GenUtil.generatorCode(columns, genConfig); + } catch (IOException e) { + log.error(e.getMessage(), e); + throw new BadRequestException(LangProcess.msg("error_generate")); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/ISysLogService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/ISysLogService.class new file mode 100644 index 0000000..47fd9be Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/ISysLogService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/ISysLogService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/ISysLogService.java new file mode 100644 index 0000000..5ae003c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/ISysLogService.java @@ -0,0 +1,44 @@ +package org.nl.system.service.logging; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.logging.dao.SysLog; + +import java.util.Map; + +/** + *

+ * 系统日志 服务类 + *

+ * + * @author generator + * @since 2023-05-08 + */ +public interface ISysLogService extends IService { + + /** + * 分页查询日志 + * @param criteria + * @param pageable + * @return + */ + IPage queryAll(Map criteria, PageQuery pageable); + + /** + * 查询异常详情 + * @param id 日志ID + * @return Object + */ + Object findByErrDetail(String id); + + /** + * 删除所有异常日志 + */ + void delAllByError(); + + /** + * 删除所有操作日志 + */ + void delAllByInfo(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/SysLog.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/SysLog.class new file mode 100644 index 0000000..f038b1c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/SysLog.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/SysLog.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/SysLog.java new file mode 100644 index 0000000..6067341 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/SysLog.java @@ -0,0 +1,55 @@ +package org.nl.system.service.logging.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.time.LocalDateTime; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 系统日志 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_log") +public class SysLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "log_id") + private String log_id; + + private String description; + + private String log_type; + + private String method; + + private String params; + + private String request_ip; + + private Long time; + + private String username; + + private String address; + + private String browser; + + /** 异常详细 */ + private byte[] exception_detail; + + private String create_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.class new file mode 100644 index 0000000..a0b0ff5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.java new file mode 100644 index 0000000..3205364 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.logging.dao.mapper; + +import org.nl.system.service.logging.dao.SysLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 系统日志 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-08 + */ +public interface SysLogMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.xml new file mode 100644 index 0000000..38be495 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dao/mapper/SysLogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dto/SysLogQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dto/SysLogQuery.class new file mode 100644 index 0000000..24b2eb9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dto/SysLogQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dto/SysLogQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dto/SysLogQuery.java new file mode 100644 index 0000000..2fbf523 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/dto/SysLogQuery.java @@ -0,0 +1,12 @@ +package org.nl.system.service.logging.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.system.service.logging.dao.SysLog; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/8 + */ +public class SysLogQuery extends BaseQuery { +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/impl/SysLogServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/impl/SysLogServiceImpl.class new file mode 100644 index 0000000..b2bfdef Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/impl/SysLogServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/impl/SysLogServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/impl/SysLogServiceImpl.java new file mode 100644 index 0000000..9042e2f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logging/impl/SysLogServiceImpl.java @@ -0,0 +1,74 @@ +package org.nl.system.service.logging.impl; + +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.ValidationUtil; +import org.nl.system.service.logging.ISysLogService; +import org.nl.system.service.logging.dao.SysLog; +import org.nl.system.service.logging.dao.mapper.SysLogMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + *

+ * 系统日志 服务实现类 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Slf4j +@Service +public class SysLogServiceImpl extends ServiceImpl implements ISysLogService { + + @Autowired + private SysLogMapper logMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery pageable) { + String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry"))?whereJson.get("blurry").toString():null; + String log_type = ObjectUtil.isNotEmpty(whereJson.get("log_type"))?whereJson.get("log_type").toString():null; + String username = ObjectUtil.isNotEmpty(whereJson.get("username"))?whereJson.get("username").toString():null; + String begin_time = ObjectUtil.isNotEmpty(whereJson.get("begin_time"))?whereJson.get("begin_time").toString():null; + String end_time = ObjectUtil.isNotEmpty(whereJson.get("end_time"))?whereJson.get("end_time").toString():null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(log_type), SysLog::getLog_type, log_type) + .eq(ObjectUtil.isNotEmpty(username), SysLog::getUsername, username) + .like(ObjectUtil.isNotEmpty(blurry), SysLog::getDescription, blurry) + .le(ObjectUtil.isNotEmpty(end_time), SysLog::getCreate_time, end_time) + .ge(ObjectUtil.isNotEmpty(begin_time), SysLog::getCreate_time, begin_time) + .orderByDesc(SysLog::getCreate_time); + IPage page = new Page<>(pageable.getPage()+1, pageable.getSize()); + logMapper.selectPage(page, lam); + return page; + } + + @Override + public Object findByErrDetail(String id) { + SysLog sysLog = logMapper.selectById(id); + if (ObjectUtil.isEmpty(sysLog)) { + sysLog = new SysLog(); + } + ValidationUtil.isNull(sysLog.getLog_id(), "SysLog", "log_id", id); + byte[] details = sysLog.getException_detail(); + return Dict.create().set("exception", new String(ObjectUtil.isNotNull(details) ? details : "".getBytes())); + } + + @Override + public void delAllByError() { + logMapper.delete(new LambdaQueryWrapper().eq(SysLog::getLog_type, "ERROR")); + } + + @Override + public void delAllByInfo() { + logMapper.delete(new LambdaQueryWrapper().eq(SysLog::getLog_type, "INFO")); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageImageService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageImageService.class new file mode 100644 index 0000000..4d4848d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageImageService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageImageService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageImageService.java new file mode 100644 index 0000000..037907a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageImageService.java @@ -0,0 +1,56 @@ +package org.nl.system.service.logicflow; + +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.logicflow.dao.StageImage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 设备舞台图标表 服务类 + *

+ * + * @author generator + * @since 2023-05-08 + */ +public interface IStageImageService extends IService { + + /** + * 分页 + * @param whereJson + * @param page + * @return + */ + IPage queryAll(Map whereJson, PageQuery page); + + /** + * 创建 + * @param entity + */ + void create(StageImage entity); + + /** + * 更新 + * @param entity + */ + void update(StageImage entity); + + /** + * 删除 + * @param ids + */ + void deleteAll(Set ids); + + /** + * 前端舞台编辑选择设备图标下拉选列表 + * + * @return + */ + List selectList(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageService.class new file mode 100644 index 0000000..af4fd71 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageService.java new file mode 100644 index 0000000..3e54179 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/IStageService.java @@ -0,0 +1,62 @@ +package org.nl.system.service.logicflow; + +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.logicflow.dao.Stage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 舞台主表 服务类 + *

+ * + * @author generator + * @since 2023-05-08 + */ +public interface IStageService extends IService { + + /** + * 分页查询 + * @param whereJson + * @param page + * @return + */ + IPage queryAll(Map whereJson, PageQuery page); + + /** + * 新增 + * @param dto + */ + void create(Stage dto); + + /** + * 修改 + * @param dto + */ + void update(Stage dto); + + /** + * 删除 + * @param ids + */ + void deleteAll(Set ids); + + /** + * 前端舞台下拉选列表 + * + * @return + */ + List selectList(); + + /** + * 添加舞台数据 + * @param dto + */ + void addNewStage(Stage dto); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/Stage.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/Stage.class new file mode 100644 index 0000000..5fe01bb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/Stage.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/Stage.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/Stage.java new file mode 100644 index 0000000..33f9a3e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/Stage.java @@ -0,0 +1,78 @@ +package org.nl.system.service.logicflow.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 舞台主表 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("stage") +public class Stage implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 舞台标识 + */ + @TableId + private String stage_uuid; + + /** + * 舞台编码 + */ + private String stage_code; + + /** + * 舞台名字 + */ + private String stage_name; + + /** + * 舞台数据 + */ + private String stage_data; + + /** + * 是否启用 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建者 + */ + private String create_id; + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改者 + */ + private String update_id; + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/StageImage.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/StageImage.class new file mode 100644 index 0000000..e5a1156 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/StageImage.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/StageImage.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/StageImage.java new file mode 100644 index 0000000..a96dd0d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/StageImage.java @@ -0,0 +1,83 @@ +package org.nl.system.service.logicflow.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 设备舞台图标表 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("stage_image") +public class StageImage implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 图标标识 + */ + @TableId + private String image_uuid; + + /** + * 图标编码 + */ + private String image_code; + + /** + * 图标名字 + */ + private String image_name; + + /** + * 适用驱动 + */ + private String driver_code_json; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建者 + */ + private String create_id; + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改者 + */ + private String update_id; + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.class new file mode 100644 index 0000000..1f37db4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.java new file mode 100644 index 0000000..9d6eeb8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.logicflow.dao.mapper; + +import org.nl.system.service.logicflow.dao.StageImage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 设备舞台图标表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-08 + */ +public interface StageImageMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.xml new file mode 100644 index 0000000..93e3cac --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageImageMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.class new file mode 100644 index 0000000..433b30c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.java new file mode 100644 index 0000000..abf68d1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.logicflow.dao.mapper; + +import org.nl.system.service.logicflow.dao.Stage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 舞台主表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-08 + */ +public interface StageMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.xml new file mode 100644 index 0000000..10c03e4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/dao/mapper/StageMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageImageServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageImageServiceImpl.class new file mode 100644 index 0000000..83128e7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageImageServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java new file mode 100644 index 0000000..ade3f14 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageImageServiceImpl.java @@ -0,0 +1,90 @@ +package org.nl.system.service.logicflow.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.logicflow.IStageImageService; +import org.nl.system.service.logicflow.dao.StageImage; +import org.nl.system.service.logicflow.dao.mapper.StageImageMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 设备舞台图标表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Service +public class StageImageServiceImpl extends ServiceImpl implements IStageImageService { + + @Autowired + private StageImageMapper stageImageMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + stageImageMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(StageImage entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setImage_uuid(IdUtil.simpleUUID()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + stageImageMapper.insert(entity); + } + + @Override + public void update(StageImage entity) { + StageImage dto = stageImageMapper.selectOne(new LambdaQueryWrapper() + .eq(StageImage::getImage_uuid, entity.getImage_uuid())); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUsername = SecurityUtils.getCurrentUsername(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String now = DateUtil.now(); + entity.setUpdate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(currentUsername); + stageImageMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + stageImageMapper.deleteBatchIds(ids); + } + + @Override + public List selectList() { + List stageImages = stageImageMapper.selectList(new LambdaQueryWrapper() + .eq(StageImage::getIs_delete, "0") + .eq(StageImage::getIs_active, "1") + .orderByDesc(StageImage::getUpdate_time)); + stageImages.forEach(stageImage -> stageImage.setImage_name(stageImage.getImage_code().split("-")[0])); + return stageImages; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageServiceImpl.class new file mode 100644 index 0000000..b9a741b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageServiceImpl.java new file mode 100644 index 0000000..b0320b1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/logicflow/impl/StageServiceImpl.java @@ -0,0 +1,110 @@ +package org.nl.system.service.logicflow.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.logicflow.IStageService; +import org.nl.system.service.logicflow.dao.Stage; +import org.nl.system.service.logicflow.dao.mapper.StageMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 舞台主表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-08 + */ +@Service +public class StageServiceImpl extends ServiceImpl implements IStageService { + + @Autowired + private StageMapper stageMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + stageMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(Stage entity) { + Stage stage = stageMapper.selectOne(new LambdaQueryWrapper().eq(Stage::getStage_code, entity.getStage_code())); + if (ObjectUtil.isNotEmpty(stage)) { + throw new BadRequestException(LangProcess.msg("universal_stage_exist",entity.getStage_code())); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setStage_uuid(IdUtil.simpleUUID()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + stageMapper.insert(entity); + } + + @Override + public void update(Stage dto) { + Stage entity = stageMapper.selectOne(new LambdaQueryWrapper().eq(Stage::getStage_uuid, dto.getStage_uuid())); + if (entity == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUsername = SecurityUtils.getCurrentUsername(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_id(currentUserId); + dto.setUpdate_name(currentUsername); + stageMapper.updateById(dto); + } + + @Override + public void deleteAll(Set ids) { + stageMapper.deleteBatchIds(ids); + } + + @Override + public List selectList() { + List stages = stageMapper.selectList(new LambdaQueryWrapper() + .eq(Stage::getIs_delete, "0") + .eq(Stage::getIs_active, "1")); + return stages; + } + + @Override + public void addNewStage(Stage dto) { + Stage stage = stageMapper.selectOne(new LambdaQueryWrapper().eq(Stage::getStage_code, dto.getStage_code())); + if (ObjectUtil.isEmpty(stage)) { + throw new BadRequestException(LangProcess.msg("universal_stage_NoExist")); + } + // 设置内容 + stage.setStage_data(dto.getStage_data()); + // 获取当前用户与时间 + String currentUsername = SecurityUtils.getCurrentUsername(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String now = DateUtil.now(); + stage.setUpdate_time(now); + stage.setUpdate_name(currentUsername); + stage.setUpdate_id(currentUserId); + stageMapper.updateById(stage); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneExecuteLogService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneExecuteLogService.class new file mode 100644 index 0000000..6d69283 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneExecuteLogService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneExecuteLogService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneExecuteLogService.java new file mode 100644 index 0000000..cd2f571 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneExecuteLogService.java @@ -0,0 +1,40 @@ +package org.nl.system.service.lucene; + +import org.nl.system.service.lucene.dto.LuceneLogDto; + +import java.io.IOException; + +public interface LuceneExecuteLogService { + /** + * 设备光电变化实时光电信号 + * + * @param device_code 设备编号 + * @param key plc信号 + * @param value plc信号值 + */ + void deviceItemValue(String device_code, String key, String value); + + /** + * 设备执行日志,会保留历史记录 + * + * @param luceneLogDto 日志结果对象 + */ + void deviceExecuteLog(LuceneLogDto luceneLogDto); + + /** + * 接口日志,会保留历史记录 + * + * @param luceneLogDto 日志结果对象 + */ + void interfaceExecuteLog(LuceneLogDto luceneLogDto) throws IOException; + + /** + * 设备执行日志,会保留历史记录 + * + * @param name 日志名称 + * @param message 日志信息 + */ + void extLog(String name, String message); + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneService.class new file mode 100644 index 0000000..19e0718 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneService.java new file mode 100644 index 0000000..96560e8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/LuceneService.java @@ -0,0 +1,19 @@ +package org.nl.system.service.lucene; + +import com.alibaba.fastjson.JSONArray; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + + +public interface LuceneService { + + /** + * 获取数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map getAll(Map whereJson, Pageable page); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto$LuceneLogDtoBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto$LuceneLogDtoBuilder.class new file mode 100644 index 0000000..5cf480a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto$LuceneLogDtoBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto.class new file mode 100644 index 0000000..b35ad20 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto.java new file mode 100644 index 0000000..7cda043 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/dto/LuceneLogDto.java @@ -0,0 +1,86 @@ +package org.nl.system.service.lucene.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LuceneLogDto { + + /* 日志标识 */ + private String log_uuid; + /*日志类型*/ + private String logType; + /*设备编号*/ + private String device_code; + /*内容详情*/ + private String content; + + /* 任务编码 */ + private String task_code; + + /* 指令编码 */ + private String instruct_code; + + /* 任务标识 */ + private String task_id; + + /* 载具号 */ + private String vehicle_code; + + /* 备注 */ + private String remark; + + /* 日志类型 */ + private String log_type; + + /* 方法 */ + private String method; + + /* 请求参数 */ + private String requestparam; + + /* 响应参数 */ + private String responseparam; + + /* 请求地址 */ + private String requesturl; + + /* 状态码 */ + private String status_code; + + /* 是否删除 1:是;0:否 */ + private String is_delete; + + /* 创建者 */ + private String create_by; + + /* 创建时间 YYYY-MM-DD hh:mm:ss */ + private String create_time; + + /* 修改者 */ + private String update_by; + + /* 修改时间 */ + private String update_time; + + + + public LuceneLogDto (final String opc_server_code,final String opc_plc_code, + final String device_code,final String to_home,final int last_home, + final int home) { + super (); + this.device_code = device_code; + this.content = "信号" + + opc_server_code + "." + + opc_plc_code + "." + + device_code + "." + + to_home + "变更从" + + last_home + "->" + + home; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.class new file mode 100644 index 0000000..684ff5e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java new file mode 100644 index 0000000..0f5deac --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneExecuteLogServiceImpl.java @@ -0,0 +1,111 @@ +package org.nl.system.service.lucene.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.StringField; +import org.apache.lucene.index.IndexWriter; +import org.nl.common.enums.LogTypeEnum; +import org.nl.config.lucene.DynamicLogger; +import org.nl.config.lucene.LuceneIndexWriter; +import org.nl.system.service.lucene.LuceneExecuteLogService; +import org.nl.system.service.lucene.dto.LuceneLogDto; +import org.slf4j.Logger; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +/** + * @author jlm + * @description 服务实现 + * @date 2023-04-11 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class LuceneExecuteLogServiceImpl implements LuceneExecuteLogService { + + //日志目录 + @Value("${logging.file.path}") + private String logPath; + + @Override + public void deviceItemValue(String device_code, String key, String value) { + String now = DateUtil.now(); + } + + @SneakyThrows + @Override + public void deviceExecuteLog(LuceneLogDto luceneLogDto) { + luceneLogDto.setLogType(LogTypeEnum.DEVICE_LOG.getDesc()); + addIndex(luceneLogDto); + } + + @Override + public void interfaceExecuteLog(LuceneLogDto luceneLogDto) throws IOException { + luceneLogDto.setLogType(LogTypeEnum.INTERFACE_LOG.getDesc()); + addIndex(luceneLogDto); + } + + private void addIndex(LuceneLogDto luceneLogDto) throws IOException { + IndexWriter indexWriter = LuceneIndexWriter.getIndexWriter(); + //创建一个Document对象 + Document document = new Document(); + try { + //记录索引开始时间 + long startTime = System.currentTimeMillis(); + //向document对象中添加域。 + if (ObjectUtil.isNotEmpty(luceneLogDto.getDevice_code())) { + document.add(new StringField("device_code", luceneLogDto.getDevice_code(), Field.Store.YES)); +// document.add(new TextField("device_code", luceneLogDto.getDevice_code(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getContent())) { + document.add(new StringField("fieldContent", luceneLogDto.getContent(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getMethod())) { + document.add(new StringField("method", luceneLogDto.getMethod(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getStatus_code())) { + document.add(new StringField("status_code", luceneLogDto.getStatus_code(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getRequestparam())) { + document.add(new StringField("requestparam", luceneLogDto.getRequestparam(), Field.Store.YES)); + } + if (ObjectUtil.isNotEmpty(luceneLogDto.getResponseparam())) { + document.add(new StringField("responseparam", luceneLogDto.getResponseparam(), Field.Store.YES)); + } + document.add(new StringField("logType", luceneLogDto.getLogType(), Field.Store.YES)); + document.add(new StringField("logTime", DateUtil.format(new DateTime(), "yyyy-MM-dd HH:mm:ss.SSS"), Field.Store.YES)); + indexWriter.addDocument(document); + //记录索引结束时间 + long endTime = System.currentTimeMillis(); + indexWriter.commit(); + //实现日志文件按业务独立生成日志文件到指定路径 + DynamicLogger loggerBuilder =new DynamicLogger(logPath+"\\"+luceneLogDto.getLogType()+"\\"); + Logger logger = loggerBuilder.getLogger(luceneLogDto.getDevice_code()); +// logger.info("设备{}建立索引共耗时{}毫秒",luceneLogDto.getDevice_code(),endTime-startTime); + logger.info("{}",luceneLogDto.toString()); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + + @Override + public void extLog(String name, String message) { + try { + MDC.put(name, name); + log.info("{}", message); + } catch (Exception e) { + e.printStackTrace(); + } finally { + MDC.remove(name); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneServiceImpl.class new file mode 100644 index 0000000..5f8d97e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneServiceImpl.java new file mode 100644 index 0000000..f7cc829 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/lucene/impl/LuceneServiceImpl.java @@ -0,0 +1,44 @@ +package org.nl.system.service.lucene.impl; + +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.config.lucene.Searcher; +import org.nl.system.service.lucene.LuceneService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.Map; + + +@Service +@RequiredArgsConstructor +@Slf4j +public class LuceneServiceImpl implements LuceneService { + + //日志索引目录 + @Value("${lucene.index.path}") + private String luceneUrl; + + @Override + public Map getAll(Map whereJson, Pageable page) { + JSONObject jo = new JSONObject(); + try { + JSONObject jsonObject = (JSONObject) Searcher.search(luceneUrl, "", whereJson); + JSONArray array = jsonObject.getJSONArray("content"); + int totalElements = Integer.parseInt(jsonObject.get("totalElements").toString()); + jo.put("content", array); + jo.put("totalElements", totalElements); + } catch (Exception e) { + log.error("索引查询为空", e); + throw new NullPointerException("索引查询为空"); + } + + return jo; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/ISysMenuService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/ISysMenuService.class new file mode 100644 index 0000000..fb7ef7b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/ISysMenuService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/ISysMenuService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/ISysMenuService.java new file mode 100644 index 0000000..b672ea4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/ISysMenuService.java @@ -0,0 +1,139 @@ +package org.nl.system.service.menu; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.domain.vo.MenuVo; +import org.nl.system.service.menu.dao.SysMenu; +import org.nl.system.service.menu.dto.MenuDto; +import org.nl.system.service.menu.dto.MenuQuery; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 菜单表 服务类 + *

+ * + * @author ldjun + * @since 2022-12-15 + */ +public interface ISysMenuService extends IService { + /** + * 查询全部数据,菜单不使用分页 + * + * @param param 查询条件 + * @return + */ + List queryAll(Map param); + + /** + * 条件查询 + * @param query + * @param page + * @return + */ + List query(MenuQuery query, PageQuery page); + + /** + * 根据ID获取同级与上级数据 + * + * @param menuDto 菜单对象 + * @param menus + * @return / + */ + List getSuperior(MenuDto menuDto, List menus); + + /** + * 根据ID查询 菜单对象 + * + * @param id 菜单标识 + * @return 菜单对象 + */ + SysMenu findById(String id); + + /** + * 根据菜单父节点标识查询菜单列表 + * + * @param pid + * @return 菜单列表 + */ + List findByPid(String pid); + + /** + * 查询父节点为空的菜单列表 + * + * @return 菜单列表 + */ + List findByPidIsNull(); + + /** + * 获取所有子节点,包含自身ID + * + * @param menuList + * @param menuSet + * @return / + */ + Set getChildMenus(List menuList, Set menuSet); + + /** + * 创建 + * + * @param menu + */ + void create(SysMenu menu); + + /** + * 删除 + * + * @param menuSet + */ + void delete(Set menuSet); + + /** + * 编辑 + * + * @param menu + */ + void update(SysMenu menu); + + + List findByUser(String userId); + + /** + * 构建菜单树 + * + * @param menuDtos + * @return / + */ + List buildMenus(List menuDtos); + List buildMenus(List menuDtos,String pid); + + List buildMenus(String systemType); + + /** + * 构建菜单树 + * + * @param menuDtos 原始数据 + * @return / + */ + List buildTree(List menuDtos); + + /** + * 懒加载菜单数据 + * + * @param pid / + * @return / + */ + List getMenus(String pid); + + /** + * @param sysMenu + * @return + */ + MenuDto doToDto(SysMenu sysMenu); + + List getMenusByRole(String roleId, String systemType, String category); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/SysMenu.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/SysMenu.class new file mode 100644 index 0000000..794a11b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/SysMenu.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/SysMenu.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/SysMenu.java new file mode 100644 index 0000000..33d4d78 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/SysMenu.java @@ -0,0 +1,141 @@ +package org.nl.system.service.menu.dao; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 菜单表 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_menu") +public class SysMenu implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 菜单标识 + */ + @TableId(value = "menu_id", type = IdType.NONE) + private String menu_id; + + /** + * 上级菜单ID + */ + @TableField(updateStrategy = FieldStrategy.IGNORED) + private String pid; + + /** + * 子菜单数目 + */ + private Integer sub_count; + + /** + * 菜单类型 + */ + private String type; + + /** + * 所属系统 + */ + private String system_type; + + /** + * 菜单分类 + */ + private String category; + + /** + * 菜单标题 + */ + private String title; + + /** + * 组件名称 + */ + private String component_name; + + /** + * 组件 + */ + private String component; + + /** + * 排序 + */ + private Integer menu_sort; + + /** + * 图标 + */ + private String icon; + + /** + * 链接地址 + */ + private String path; + + /** + * 是否外链 + */ + private Boolean iframe; + + /** + * 是否缓存 + */ + private Boolean cache; + + /** + * 是否隐藏 + */ + private Boolean hidden; + + /** + * 权限 + */ + private String permission; + + /** + * 创建人标识 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date create_time; + + /** + * 修改人标识 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date update_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.class new file mode 100644 index 0000000..2dfe081 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java new file mode 100644 index 0000000..7964cb9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.java @@ -0,0 +1,62 @@ +package org.nl.system.service.menu.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.nl.system.service.menu.dao.SysMenu; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 菜单表 Mapper 接口 + *

+ * + * @author ldjun + * @since 2022-12-15 + */ +public interface SysMenuMapper extends BaseMapper { + @Select("select * from sys_menu where (pid is null or pid = '' or pid = 0 )") + List findByPidIsNull(); + + @Select("select * from sys_menu where pid = #{pid}") + List findByPid(@Param("pid") String pid); + + /** + * 根据用户获取菜单 + * + * @param userId 用户标识 + * @return 当前用户拥有的菜单列表 + */ + List findByUser(@Param("userId") String userId); + + /** + * 获取系统菜单 + * @param userId + * @param systemType + * @return + */ + List findSystemMenu(@Param("user") String userId,@Param("systemType") String systemType); + + /** + * 根据用户标识获取权限列表 + * + * @param userId 用户标识 + * @return 权限列表 + */ + List getPermissionByUserId(@Param("userId") String userId); + + /** + * 解绑角色菜单 + * + * @param menuId 菜单ID + */ + @Delete(value = "delete from sys_roles_menus where menu_id = #{menuId}") + void untiedMenu(String menuId); + + List getMenusByRole(@Param("systemType") String systemType, @Param("category")String category); + + String findAllChild(String pid); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml new file mode 100644 index 0000000..7787999 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dao/mapper/SysMenuMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuDto.class new file mode 100644 index 0000000..97b774d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuDto.java new file mode 100644 index 0000000..4484d60 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuDto.java @@ -0,0 +1,93 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.menu.dto; + +import lombok.Data; +import org.nl.common.base.BaseDTO; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + +@Data +public class MenuDto extends BaseDTO implements Serializable { + + private String menu_id; + + private List children; + + private String type; + + private String permission; + + private String title; + + private Integer menu_sort; + + private String path; + private String name; + + private String component; + + private String pid; + + private Integer sub_count; + + private Boolean iframe; + + private String system_type; + + private Boolean cache; + + private Boolean hidden; + + private String component_name; + + private String icon; + + private boolean has_children; + + private boolean leaf; + + public Boolean getHas_children() { + return sub_count > 0; + } + + public Boolean getLeaf() { + return sub_count <= 0; + } + + public String getLabel() { + return title; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MenuDto menuDto = (MenuDto) o; + return Objects.equals(menu_id, menuDto.menu_id); + } + + @Override + public int hashCode() { + return Objects.hash(menu_id); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuQuery.class new file mode 100644 index 0000000..b9f09de Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuQuery.java new file mode 100644 index 0000000..01fcf9c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/dto/MenuQuery.java @@ -0,0 +1,23 @@ +package org.nl.system.service.menu.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.menu.dao.SysMenu; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/15 + */ +@Data +public class MenuQuery extends BaseQuery { + private String pid = ""; + private String system_type; + @Override + public void paramMapping() { + this.doP.put("pid", QParam.builder().k(new String[]{"pid"}).type(QueryTEnum.OREQ).build()); + this.doP.put("blurry", QParam.builder().k(new String[]{"title"}).type(QueryTEnum.LK).build()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/impl/SysMenuServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/impl/SysMenuServiceImpl.class new file mode 100644 index 0000000..fb8881c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/impl/SysMenuServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/impl/SysMenuServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..38849d6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/menu/impl/SysMenuServiceImpl.java @@ -0,0 +1,461 @@ +package org.nl.system.service.menu.impl; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.constant.DictConstantPool; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.domain.vo.MenuMetaVo; +import org.nl.common.domain.vo.MenuVo; +import org.nl.common.utils.CopyUtil; +import org.nl.config.IdUtil; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.system.service.lucene.LuceneExecuteLogService; +import org.nl.system.service.menu.dto.MenuDto; +import org.nl.system.service.menu.ISysMenuService; +import org.nl.system.service.menu.dao.SysMenu; +import org.nl.system.service.menu.dao.mapper.SysMenuMapper; +import org.nl.system.service.menu.dto.MenuQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 菜单表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Service +@Slf4j +public class SysMenuServiceImpl extends ServiceImpl implements ISysMenuService { + + @Autowired + private SysMenuMapper baseMapper; + + @Autowired + private SysDictMapper sysDictMapper; + + @Autowired + private LuceneExecuteLogService luceneExecuteLogService; + + @Override + public List queryAll(Map param) { +// 父节点标识 + String pid = MapUtil.getStr(param, "pid"); + return getMenus(pid).stream().map(menu -> this.doToDto(menu)).collect(Collectors.toList()); + } + + + @Override + public List query(MenuQuery query, PageQuery page) { + if (StringUtils.isNotEmpty(query.getBlurry())){ + query.setPid(null); + } + Page menuPage = this.page(page.build(), query.build()); + List collect = menuPage.getRecords().stream().map(menu -> this.doToDto(menu)).collect(Collectors.toList()); + return collect; + } + + @Override + public List getSuperior(MenuDto menuDto, List menus) { + if (menuDto.getPid() == null) { + menus.addAll(this.findByPidIsNull()); + return menus.stream().map(menu -> this.doToDto(menu)).collect(Collectors.toList()); + } + menus.addAll(baseMapper.findByPid(menuDto.getPid())); + + return getSuperior(this.doToDto(findById(menuDto.getPid())), menus); + } + + @Override + public SysMenu findById(String id) { + return baseMapper.selectById(id); + } + + @Override + public List findByPid(String pid) { + return baseMapper.findByPid(pid); + } + + @Override + public List findByPidIsNull() { + return baseMapper.findByPidIsNull(); + } + + @Override + public Set getChildMenus(List menuList, Set menuSet) { + for (SysMenu menu : menuList) { + menuSet.add(menu); + List menus = this.findByPid(menu.getMenu_id()); + if (menus != null && menus.size() != 0) { + getChildMenus(menus, menuSet); + } + } + return menuSet; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void create(SysMenu resources) { + + if (resources.getIframe()) { + String http = "http://", https = "https://"; + if (!(resources.getPath().toLowerCase().startsWith(http) || resources.getPath().toLowerCase().startsWith(https))) { + throw new BadRequestException(LangProcess.msg("universal_Backlinks")); + } + } + resources.setMenu_id(IdUtil.getStringId()); + if (resources.getPid().equals("0")) { + resources.setPid(null); + addSystemTypeDict(resources); + } + + baseMapper.insert(resources); + // 计算子节点数目 + resources.setSub_count(0); + // 更新父节点菜单数目 + updateSubCnt(resources.getPid()); + updateRootSystemType(resources); + } + + private void addSystemTypeDict(SysMenu resources) { + Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).orderByDesc("value").last("limit 1")); + Integer currentType = dict!=null?Integer.valueOf(dict.getValue())+1:1; + Dict currentSysType = new Dict(); + currentSysType.setDict_id(IdUtil.getStringId()); + currentSysType.setCode(DictConstantPool.DICT_SYS_CODE); + currentSysType.setName(DictConstantPool.DICT_SYS_NAME); + currentSysType.setLabel(resources.getTitle()); + currentSysType.setValue(String.valueOf(currentType)); + currentSysType.setPara1(resources.getMenu_id()); + sysDictMapper.insert(currentSysType); + resources.setSystem_type(String.valueOf(currentType)); + } + private void updateRootSystemType(SysMenu sysMenu) { + String rootMenuId = this.findRootMenuId(sysMenu.getMenu_id()); + if (sysMenu.getMenu_id().equals(rootMenuId)){ + return; + } + SysMenu rootMenu = this.findById(rootMenuId); + sysMenu.setSystem_type(rootMenu.getSystem_type()); + this.updateById(sysMenu); + } + private String findRootMenuId(String menuId) { + SysMenu sysMenu = this.findById(menuId); + if (StrUtil.isEmpty(sysMenu.getPid())) { + return menuId; + } else { + return findRootMenuId(sysMenu.getPid()); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Set menuSet) { + List pids = Lists.newArrayList(); + for (SysMenu menu : menuSet) { + //解绑菜单 + baseMapper.untiedMenu(menu.getMenu_id()); + baseMapper.deleteById(menu.getMenu_id()); + String pid = menu.getPid(); + if (StringUtils.isEmpty(pid)){ + pids.add(pid); + } + updateSubCnt(pid); + } + if (!CollectionUtils.isEmpty(pids)){ + sysDictMapper.delete(new QueryWrapper().in("para1", pids).eq("code", DictConstantPool.DICT_SYS_CODE)); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void update(SysMenu resources) { + String menuId = resources.getMenu_id(); + SysMenu menu = baseMapper.selectById(menuId); + String allChild = baseMapper.findAllChild(menuId); // 获取当前菜单的所有子菜单 + List allChildIds = ObjectUtil.isNotEmpty(allChild)?Arrays.asList(allChild.split(",")):null; + if (ObjectUtil.isNotEmpty(allChildIds) && allChildIds.contains(resources.getPid())){ + throw new BadRequestException(LangProcess.msg("universal_superior_or_lower")); + } + if (resources.getIframe()) { + String http = "http://", https = "https://"; + if (!(resources.getPath().toLowerCase().startsWith(http) || resources.getPath().toLowerCase().startsWith(https))) { + throw new BadRequestException(LangProcess.msg("universal_Backlinks")); + } + } + + if (resources.getPid().equals("0")) { + resources.setPid(null); + if (StringUtils.isNotEmpty(menu.getPid())){ + addSystemTypeDict(resources); + } + }else { + resources.setSystem_type(this.findById(resources.getPid()).getSystem_type()); + } + String oldPid = menu.getPid(); + String newPid = resources.getPid(); + // 记录的父节点ID + if (oldPid == null && newPid != null){ + sysDictMapper.delete(new QueryWrapper().eq("para1",menu.getMenu_id())); + } + menu.setTitle(resources.getTitle()); + menu.setComponent(resources.getComponent()); + menu.setPath(resources.getPath()); + menu.setIcon(resources.getIcon()); + menu.setIframe(resources.getIframe()); + menu.setPid(resources.getPid()); + menu.setMenu_sort(resources.getMenu_sort()); + menu.setCache(resources.getCache()); + menu.setHidden(resources.getHidden()); + menu.setComponent_name(resources.getComponent_name()); + menu.setPermission(resources.getPermission()); + menu.setType(resources.getType()); + baseMapper.updateById(menu); + // 计算父级菜单节点数目 + updateSubCnt(oldPid); + updateSubCnt(newPid); + //更新SystemType + if (!resources.getSystem_type().equals(menu.getSystem_type())){ + this.update(new UpdateWrapper().set(DictConstantPool.DICT_SYS_CODE,resources.getSystem_type()).in("menu_id",allChildIds)); + } + + } + + /** + * 计算菜单子节点数目 + * + * @param menuId + */ + private void updateSubCnt(String menuId) { + if (menuId != null) { + int count = baseMapper.findByPid(menuId).size(); + SysMenu sysMenu = baseMapper.selectById(menuId); + if (ObjectUtil.isEmpty(sysMenu)) return; + sysMenu.setSub_count(count); + baseMapper.updateById(sysMenu); + } + } + + @Override + public List findByUser(String userId) { + return baseMapper.findByUser(userId).stream().map(menu -> this.doToDto(menu)).collect(Collectors.toList()); + } + + @Override + public List buildMenus(List menuDtos) { + List list = new LinkedList<>(); + menuDtos.forEach(menuDTO -> { + if (menuDTO != null) { + List menuDtoList = menuDTO.getChildren(); + MenuVo menuVo = new MenuVo(); + menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponent_name()) ? menuDTO.getComponent_name() : menuDTO.getTitle()); + // 一级目录需要加斜杠,不然会报警告 + menuVo.setPath(ObjectUtil.isEmpty(menuDTO.getPid()) ? "/" + menuDTO.getPath() : menuDTO.getPath()); + menuVo.setHidden(menuDTO.getHidden()); + // 如果不是外链 + if (!menuDTO.getIframe()) { + if (ObjectUtil.isEmpty(menuDTO.getPid())) { + menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent()); + } else if (!ObjectUtil.isEmpty(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { + menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent()); + + } else if (!StrUtil.isEmpty(menuDTO.getComponent())) { + menuVo.setComponent(menuDTO.getComponent()); + } + } + menuVo.setMeta(new MenuMetaVo(menuDTO.getTitle(), menuDTO.getIcon(), !menuDTO.getCache())); + if (menuDtoList != null && menuDtoList.size() != 0) { + menuVo.setAlwaysShow(true); + menuVo.setRedirect("noredirect"); + menuVo.setChildren(buildMenus(menuDtoList)); + // 处理是一级菜单并且没有子菜单的情况 + } else if (ObjectUtil.isEmpty(menuDTO.getPid())) { + MenuVo menuVo1 = new MenuVo(); + menuVo1.setMeta(menuVo.getMeta()); + // 非外链 + if (!menuDTO.getIframe()) { + menuVo1.setPath("index"); + menuVo1.setName(menuVo.getName()); + menuVo1.setComponent(menuVo.getComponent()); + } else { + menuVo1.setPath(menuDTO.getPath()); + } + menuVo.setName(null); + menuVo.setMeta(null); + menuVo.setComponent("Layout"); + List list1 = new ArrayList<>(); + list1.add(menuVo1); + menuVo.setChildren(list1); + } + list.add(menuVo); + } + } + ); + return list; + } + + @Override + public List buildTree(List menuDtos) { + List trees = new ArrayList<>(); + Set ids = new HashSet<>(); + for (MenuDto menuDTO : menuDtos) { + if (menuDTO.getPid() == null) { + trees.add(menuDTO); + } + for (MenuDto it : menuDtos) { + if (menuDTO.getMenu_id().equals(it.getPid())) { + if (menuDTO.getChildren() == null) { + menuDTO.setChildren(new ArrayList<>()); + } + menuDTO.getChildren().add(it); + ids.add(it.getMenu_id()); + } + } + } + if (trees.size() == 0) { + trees = menuDtos.stream().filter(s -> !ids.contains(s.getMenu_id())).collect(Collectors.toList()); + } + return trees; + } + + @Override + public List getMenus(String pid) { + QueryWrapper queryWrapper; + if (pid != null && !"0".equals(pid)) { + queryWrapper = new QueryWrapper().eq("pid", pid); + } else { + queryWrapper = new QueryWrapper().isNull("pid"); + } + return baseMapper.selectList(queryWrapper); + } + + @Override + public MenuDto doToDto(SysMenu entity) { + + MenuDto menuDto = new MenuDto(); + if (ObjectUtil.isEmpty(entity)){ + return menuDto; + } + menuDto.setMenu_id(entity.getMenu_id()); + menuDto.setType(entity.getType()); + menuDto.setPermission(entity.getPermission()); + menuDto.setTitle(entity.getTitle()); + menuDto.setMenu_sort(entity.getMenu_sort()); + menuDto.setPath(entity.getPath()); + menuDto.setComponent(entity.getComponent()); + menuDto.setSystem_type(entity.getSystem_type()); + menuDto.setPid(entity.getPid()); + menuDto.setSub_count(entity.getSub_count()); + menuDto.setIframe(entity.getIframe()); + menuDto.setCache(entity.getCache()); + menuDto.setHidden(entity.getHidden()); + menuDto.setComponent_name(entity.getComponent_name()); + menuDto.setIcon(entity.getIcon()); + menuDto.setCreate_time(entity.getCreate_time()); + + //构建前端需要的数据结构树 + Integer sub_count = entity.getSub_count(); + if (sub_count <= 0) { + menuDto.setLeaf(true); + menuDto.setHas_children(false); + } else { + menuDto.setLeaf(false); + menuDto.setHas_children(true); + } + return menuDto; + } + + @Override + public List buildMenus(String systemType) { + Dict dict = sysDictMapper.selectOne(new QueryWrapper().eq("code", DictConstantPool.DICT_SYS_CODE).eq("value", systemType)); + if (dict == null || StringUtils.isEmpty(dict.getPara1())){ + throw new BadRequestException(LangProcess.msg("universal_menu_NoExist")); + } + String pid = dict.getPara1(); + List menuDtoList = baseMapper.findSystemMenu(SecurityUtils.getCurrentUserId(),systemType); + //移除系统级菜单 + menuDtoList.removeIf(a->a.getMenu_id().equals(pid)); + List menuDtos = this.buildTree(CopyUtil.copyList(menuDtoList, MenuDto.class)); + return this.buildMenus(menuDtos,pid); + } + + @Override + public List buildMenus(List menuDtos, String pid) { + List list = new LinkedList<>(); + //剔除系统级菜单 + menuDtos.forEach(menuDTO -> { + if (menuDTO != null) { + List menuDtoList = menuDTO.getChildren(); + MenuVo menuVo = new MenuVo(); + menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponent_name()) ? menuDTO.getComponent_name() : menuDTO.getTitle()); + // 一级目录需要加斜杠,不然会报警告 + menuVo.setPath(pid.equals(menuDTO.getPid())? "/" + menuDTO.getPath() : menuDTO.getPath()); + menuVo.setHidden(menuDTO.getHidden()); + // 如果不是外链 + if (!menuDTO.getIframe()) { + if (pid.equals(menuDTO.getPid())) { + menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "Layout" : menuDTO.getComponent()); + } else if (!pid.equals(menuDTO.getPid()) && "0".equals(menuDTO.getType())) { + menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent()) ? "ParentView" : menuDTO.getComponent()); + + } else if (!StrUtil.isEmpty(menuDTO.getComponent())) { + menuVo.setComponent(menuDTO.getComponent()); + } + } + menuVo.setMeta(new MenuMetaVo(menuDTO.getTitle(), menuDTO.getIcon(), !menuDTO.getCache())); + if (menuDtoList != null && menuDtoList.size() != 0) { + menuVo.setAlwaysShow(true); + menuVo.setRedirect("noredirect"); + menuVo.setChildren(buildMenus(menuDtoList,pid)); + // 处理是一级菜单并且没有子菜单的情况 + } else if (StrUtil.isEmpty(menuDTO.getPid())) { + MenuVo menuVo1 = new MenuVo(); + menuVo1.setMeta(menuVo.getMeta()); + // 非外链 + if (!menuDTO.getIframe()) { + menuVo1.setPath("index"); + menuVo1.setName(menuVo.getName()); + menuVo1.setComponent(menuVo.getComponent()); + } else { + menuVo1.setPath(menuDTO.getPath()); + } + menuVo.setName(null); + menuVo.setMeta(null); + menuVo.setComponent("Layout"); + List list1 = new ArrayList<>(); + list1.add(menuVo1); + menuVo.setChildren(list1); + } + list.add(menuVo); + } + } + ); + return list; + } + + @Override + public List getMenusByRole(String roleId, String systemType, String category) { + baseMapper.getMenusByRole(systemType,category); + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/MonitorService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/MonitorService.class new file mode 100644 index 0000000..5c64ba1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/MonitorService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/MonitorService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/MonitorService.java new file mode 100644 index 0000000..d0573f9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/MonitorService.java @@ -0,0 +1,31 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.monitor; + +import java.util.Map; + +/** + * @author Zheng Jie + * @date 2020-05-02 + */ +public interface MonitorService { + + /** + * 查询数据分页 + * @return Map + */ + Map getServers(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/impl/MonitorServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/impl/MonitorServiceImpl.class new file mode 100644 index 0000000..ebfef27 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/impl/MonitorServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/impl/MonitorServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/impl/MonitorServiceImpl.java new file mode 100644 index 0000000..b721ec8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/monitor/impl/MonitorServiceImpl.java @@ -0,0 +1,189 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.monitor.impl; + +import cn.hutool.core.date.BetweenFormatter; +import cn.hutool.core.date.DateUtil; +import org.nl.common.utils.ElAdminConstant; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.StringUtils; +import org.nl.system.service.monitor.MonitorService; +import org.springframework.stereotype.Service; +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.GlobalMemory; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.hardware.VirtualMemory; +import oshi.software.os.FileSystem; +import oshi.software.os.OSFileStore; +import oshi.software.os.OperatingSystem; +import oshi.util.FormatUtil; +import oshi.util.Util; + +import java.lang.management.ManagementFactory; +import java.text.DecimalFormat; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Zheng Jie + * @date 2020-05-02 + */ +@Service +public class MonitorServiceImpl implements MonitorService { + + private final DecimalFormat df = new DecimalFormat("0.00"); + + @Override + public Map getServers(){ + Map resultMap = new LinkedHashMap<>(8); + try { + SystemInfo si = new SystemInfo(); + OperatingSystem os = si.getOperatingSystem(); + HardwareAbstractionLayer hal = si.getHardware(); + // 系统信息 + resultMap.put("sys", getSystemInfo(os)); + // cpu 信息 + resultMap.put("cpu", getCpuInfo(hal.getProcessor())); + // 内存信息 + resultMap.put("memory", getMemoryInfo(hal.getMemory())); + // 交换区信息 + resultMap.put("swap", getSwapInfo(hal.getMemory())); + // 磁盘 + resultMap.put("disk", getDiskInfo(os)); + resultMap.put("time", DateUtil.format(new Date(), "HH:mm:ss")); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + /** + * 获取磁盘信息 + * @return / + */ + private Map getDiskInfo(OperatingSystem os) { + Map diskInfo = new LinkedHashMap<>(); + FileSystem fileSystem = os.getFileSystem(); + List fsArray = fileSystem.getFileStores(); + String osName = System.getProperty("os.name"); + long available = 0, total = 0; + for (OSFileStore fs : fsArray){ + // windows 需要将所有磁盘分区累加,linux 和 mac 直接累加会出现磁盘重复的问题,待修复 + if(osName.toLowerCase().startsWith(ElAdminConstant.WIN)) { + available += fs.getUsableSpace(); + total += fs.getTotalSpace(); + } else { + available = fs.getUsableSpace(); + total = fs.getTotalSpace(); + break; + } + } + long used = total - available; + diskInfo.put("total", total > 0 ? FileUtil.getSize(total) : "?"); + diskInfo.put("available", FileUtil.getSize(available)); + diskInfo.put("used", FileUtil.getSize(used)); + diskInfo.put("usageRate", df.format(used/(double)total * 100)); + return diskInfo; + } + + /** + * 获取交换区信息 + * @param memory / + * @return / + */ + private Map getSwapInfo(GlobalMemory memory) { + Map swapInfo = new LinkedHashMap<>(); + VirtualMemory virtualMemory = memory.getVirtualMemory(); + long total = virtualMemory.getSwapTotal(); + long used = virtualMemory.getSwapUsed(); + swapInfo.put("total", FormatUtil.formatBytes(total)); + swapInfo.put("used", FormatUtil.formatBytes(used)); + swapInfo.put("available", FormatUtil.formatBytes(total - used)); + if(used == 0){ + swapInfo.put("usageRate", 0); + } else { + swapInfo.put("usageRate", df.format(used/(double)total * 100)); + } + return swapInfo; + } + + /** + * 获取内存信息 + * @param memory / + * @return / + */ + private Map getMemoryInfo(GlobalMemory memory) { + Map memoryInfo = new LinkedHashMap<>(); + memoryInfo.put("total", FormatUtil.formatBytes(memory.getTotal())); + memoryInfo.put("available", FormatUtil.formatBytes(memory.getAvailable())); + memoryInfo.put("used", FormatUtil.formatBytes(memory.getTotal() - memory.getAvailable())); + memoryInfo.put("usageRate", df.format((memory.getTotal() - memory.getAvailable())/(double)memory.getTotal() * 100)); + return memoryInfo; + } + + /** + * 获取Cpu相关信息 + * @param processor / + * @return / + */ + private Map getCpuInfo(CentralProcessor processor) { + Map cpuInfo = new LinkedHashMap<>(); + cpuInfo.put("name", processor.getProcessorIdentifier().getName()); + cpuInfo.put("package", processor.getPhysicalPackageCount() + "个物理CPU"); + cpuInfo.put("core", processor.getPhysicalProcessorCount() + "个物理核心"); + cpuInfo.put("coreNumber", processor.getPhysicalProcessorCount()); + cpuInfo.put("logic", processor.getLogicalProcessorCount() + "个逻辑CPU"); + // CPU信息 + long[] prevTicks = processor.getSystemCpuLoadTicks(); + // 等待1秒... + Util.sleep(1000); + long[] ticks = processor.getSystemCpuLoadTicks(); + long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()]; + long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()]; + long sys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()]; + long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()]; + long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()]; + long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()]; + long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()]; + long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()]; + long totalCpu = user + nice + sys + idle + iowait + irq + softirq + steal; + cpuInfo.put("used", df.format(100d * user / totalCpu + 100d * sys / totalCpu)); + cpuInfo.put("idle", df.format(100d * idle / totalCpu)); + return cpuInfo; + } + + /** + * 获取系统相关信息,系统、运行天数、系统IP + * @param os / + * @return / + */ + private Map getSystemInfo(OperatingSystem os){ + Map systemInfo = new LinkedHashMap<>(); + // jvm 运行时间 + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + Date date = new Date(time); + // 计算项目运行时间 5.4.3:BetweenFormater, 5.7.14改名为BetweenFormatter + String formatBetween = DateUtil.formatBetween(date, new Date(), BetweenFormatter.Level.HOUR); + // 系统信息 + systemInfo.put("os", os.toString()); + systemInfo.put("day", formatBetween); + systemInfo.put("ip", StringUtils.getLocalIp()); + return systemInfo; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/ISysNoticeService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/ISysNoticeService.class new file mode 100644 index 0000000..eb40073 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/ISysNoticeService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/ISysNoticeService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/ISysNoticeService.java new file mode 100644 index 0000000..2856250 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/ISysNoticeService.java @@ -0,0 +1,83 @@ +package org.nl.system.service.notice; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.notice.dao.SysNotice; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-09 +**/ +public interface ISysNoticeService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SysNotice entity); + + /** + * 编辑 + * @param entity / + */ + void update(SysNotice entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 获取未读的接收消息条数 + */ + Integer countByReceiveNotRead(); + + /** + * 获取不同类型的前三条信息 + * @return + */ + LinkedList> pageByReceive(); + + /** + * 标记已读 + * @param id + */ + void read(String id); + + /** + * 处理信息 + * @param id + */ + void deal(String id); + + /** + * 批量已读 + * @param jsonObject + */ + void changeRead(JSONObject jsonObject); + + /** + * 写入信息 + * @param msg + * @param title + * @param type + */ + void createNotice(String msg, String title, String type); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice$SysNoticeBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice$SysNoticeBuilder.class new file mode 100644 index 0000000..8a0f107 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice$SysNoticeBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice.class new file mode 100644 index 0000000..b93614e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice.java new file mode 100644 index 0000000..9b10d3a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/SysNotice.java @@ -0,0 +1,51 @@ +package org.nl.system.service.notice.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-09 +**/ +@Data +@Builder +@EqualsAndHashCode(callSuper = false) +@TableName("sys_notice") +public class SysNotice implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "notice_id", type = IdType.NONE) + @ApiModelProperty(value = "信息标识") + private String notice_id; + + @ApiModelProperty(value = "信息标题") + private String notice_title; + + @ApiModelProperty(value = "信息内容") + private String notice_content; + + @ApiModelProperty(value = "信息类型") + private String notice_type; + + @ApiModelProperty(value = "读取状态") + private String have_read; + + @ApiModelProperty(value = "读取时间") + private String read_time; + + @ApiModelProperty(value = "处理状态") + private String deal_status; + + @ApiModelProperty(value = "创建时间") + private String create_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.class new file mode 100644 index 0000000..b6957b7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.java new file mode 100644 index 0000000..384f7cf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.java @@ -0,0 +1,12 @@ +package org.nl.system.service.notice.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.system.service.notice.dao.SysNotice; + +/** +* @author lyd +* @date 2023-05-09 +**/ +public interface SysNoticeMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.xml new file mode 100644 index 0000000..15b4868 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dao/mapper/SysNoticeMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeDto.class new file mode 100644 index 0000000..bd78bf6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeDto.java new file mode 100644 index 0000000..cf427e1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeDto.java @@ -0,0 +1,37 @@ +package org.nl.system.service.notice.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-09 +**/ +@Data +public class SysNoticeDto implements Serializable { + + /** 信息标识 */ + private String notice_id; + + /** 信息标题 */ + private String notice_title; + + /** 信息内容 */ + private String notice_content; + + /** 信息类型 */ + private String notice_type; + + /** 读取状态 */ + private String have_read; + + /** 读取时间 */ + private String read_time; + + /** 处理状态 */ + private String deal_status; + + /** 创建时间 */ + private String create_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeQuery.class new file mode 100644 index 0000000..423b1d6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeQuery.java new file mode 100644 index 0000000..16a59bf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/dto/SysNoticeQuery.java @@ -0,0 +1,12 @@ +package org.nl.system.service.notice.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.system.service.notice.dao.SysNotice; + +/** +* @author lyd +* @date 2023-05-09 +**/ +public class SysNoticeQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/impl/SysNoticeServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/impl/SysNoticeServiceImpl.class new file mode 100644 index 0000000..0d31188 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/impl/SysNoticeServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java new file mode 100644 index 0000000..1fd23a7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/notice/impl/SysNoticeServiceImpl.java @@ -0,0 +1,184 @@ +package org.nl.system.service.notice.impl; + +import cn.hutool.core.date.DateUtil; +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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.enums.NoticeEnum; +import org.nl.common.exception.BadRequestException; +import org.nl.common.mnt.websocket.MsgType; +import org.nl.common.mnt.websocket.SocketMsg; +import org.nl.common.mnt.websocket.WebSocketServer; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.system.service.notice.dao.mapper.SysNoticeMapper; +import org.nl.system.service.notice.dao.SysNotice; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-09 +**/ +@Slf4j +@Service +public class SysNoticeServiceImpl extends ServiceImpl implements ISysNoticeService { + + @Autowired + private SysNoticeMapper sysNoticeMapper; + + @Autowired + private SysDictMapper dictMapper; + + @Resource + private WebSocketServer webSocketServer; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + String notice_title = ObjectUtil.isNotEmpty(whereJson.get("notice_title"))?whereJson.get("notice_title").toString():null; + String notice_type = ObjectUtil.isNotEmpty(whereJson.get("notice_type"))?whereJson.get("notice_type").toString():null; + String have_read = ObjectUtil.isNotEmpty(whereJson.get("have_read"))?whereJson.get("have_read").toString():null; + String deal_status = ObjectUtil.isNotEmpty(whereJson.get("deal_status"))?whereJson.get("deal_status").toString():null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(notice_title), SysNotice::getNotice_title, notice_title) + .eq(ObjectUtil.isNotEmpty(notice_type), SysNotice::getNotice_type, notice_type) + .eq(ObjectUtil.isNotEmpty(have_read), SysNotice::getHave_read, have_read) + .eq(ObjectUtil.isNotEmpty(deal_status), SysNotice::getDeal_status, deal_status) + .orderByAsc(SysNotice::getHave_read) + .orderByDesc(SysNotice::getCreate_time); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + sysNoticeMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(SysNotice entity) { + String now = DateUtil.now(); + + entity.setNotice_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_time(now); + sysNoticeMapper.insert(entity); + } + + @Override + public void update(SysNotice entity) { + SysNotice dto = sysNoticeMapper.selectById(entity.getNotice_id()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + sysNoticeMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + sysNoticeMapper.deleteBatchIds(ids); + } + + @Override + public Integer countByReceiveNotRead() { + List sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper().eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue())); + return ObjectUtil.isNotEmpty(sysNotices)?sysNotices.size():0; + } + + @Override + public LinkedList> pageByReceive() { + LinkedList> result = new LinkedList<>(); + List dictList = dictMapper.selectList(new LambdaQueryWrapper() + .eq(Dict::getCode, "notice_type") + .orderByAsc(Dict::getDict_sort)); + dictList.forEach(dict -> { + List sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper() + .eq(SysNotice::getNotice_type, dict.getValue()) + .eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue()) + .orderByDesc(SysNotice::getCreate_time) + .last("LIMIT 0,3")); + result.add(sysNotices); + }); + return result; + } + + @Override + public void read(String id) { + SysNotice notice = this.getById(id); + if (ObjectUtil.isEmpty(notice)) { + throw new BadRequestException(LangProcess.msg("universal_msg_NoExist")); + } + notice.setHave_read(NoticeEnum.HAVE_READ_ON.getValue()); + notice.setRead_time(DateUtil.now()); + sysNoticeMapper.updateById(notice); + } + + @Override + public void deal(String id) { + SysNotice notice = this.getById(id); + if (ObjectUtil.isEmpty(notice)) { + throw new BadRequestException(LangProcess.msg("universal_msg_NoExist")); + } + // 设置处理 + notice.setDeal_status(NoticeEnum.DEAL_STATUS_YES.getValue()); + // 判断是否读取 + if (notice.getHave_read().equals(NoticeEnum.HAVE_READ_OFF.getValue())) { + // 标记已读并设置读取时间 + notice.setHave_read(NoticeEnum.HAVE_READ_ON.getValue()); + notice.setRead_time(DateUtil.now()); + } + sysNoticeMapper.updateById(notice); + } + + @Override + public void changeRead(JSONObject jsonObject) { + JSONArray data = jsonObject.getJSONArray("data"); + String haveRead = jsonObject.getString("have_read"); + List sysNotices = JSON.parseArray(data.toJSONString(), SysNotice.class); + sysNotices.forEach(sysNotice -> sysNotice.setHave_read(haveRead)); + this.updateBatchById(sysNotices); + } + + @Override + public void createNotice(String msg, String title, String type) { + log.info("创建消息通知-信息:{}, 标题:{}, 类型:{}", msg, title, type); + // 获取标题相同的信息 + List sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper().eq(SysNotice::getNotice_title, title)); + if (ObjectUtil.isNotEmpty(sysNotices)) return; + SysNotice noticeDto = SysNotice.builder() + .notice_id(IdUtil.getSnowflake(1,1).nextIdStr()) + .notice_type(type) + .notice_title(title) + .notice_content(msg) + .deal_status(NoticeEnum.DEAL_STATUS_NO.getValue()) + .have_read(NoticeEnum.HAVE_READ_OFF.getValue()) + .create_time(DateUtil.now()) + .build(); + // 插入 + sysNoticeMapper.insert(noticeDto); + JSONObject res = new JSONObject(); + res.put("data", "notice_message_update"); + SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO); + try { + webSocketServer.sendInfo(messageInfo, "messageInfo"); + } catch (IOException e) { + throw new BadRequestException(LangProcess.msg("error_send_msg")); + } + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/ISysParamService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/ISysParamService.class new file mode 100644 index 0000000..c4a1865 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/ISysParamService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/ISysParamService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/ISysParamService.java new file mode 100644 index 0000000..8a2a61a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/ISysParamService.java @@ -0,0 +1,58 @@ +package org.nl.system.service.param; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.param.dao.Param; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 系统参数表 服务类 + *

+ * + * @author generator + * @since 2022-12-14 + */ +public interface ISysParamService extends IService { + + /** + * 分页查找 + * + * @param whereJson 参数列表 + * @param page 分页信息 + * @return + */ + Page queryPage(Map whereJson, PageQuery page); + + /** + * 创建参数 + * + * @param param + */ + void create(Param param); + + /** + * 更新 + * + * @param param + */ + void update(Param param); + + /** + * 删除 + * + * @param ids + */ + void deleteByIds(List ids); + + /** + * 根据编码查询 + * + * @param code code + * @return Param + */ + Param findByCode(String code); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/Param.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/Param.class new file mode 100644 index 0000000..5b4c9ed Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/Param.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/Param.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/Param.java new file mode 100644 index 0000000..6c8ee52 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/Param.java @@ -0,0 +1,104 @@ +package org.nl.system.service.param.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 系统参数表 + *

+ * + * @author generator + * @since 2022-12-14 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_param") +public class Param implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 中文名称 + */ + private String zh_name; + /** + * 英文名称 + */ + private String en_name; + /** + * 越南名称 + */ + private String vi_name; + + /** + * 值 + */ + private String value; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private Boolean is_active; + + /** + * 是否删除 + */ + private Boolean is_delete; + + /** + * 创建者ID + */ + private String create_id; + + /** + * 创建者 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改者ID + */ + private String update_id; + + /** + * 修改者 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.class new file mode 100644 index 0000000..132c8c3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.java new file mode 100644 index 0000000..d2f5c86 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.param.dao.mapper; + +import org.nl.system.service.param.dao.Param; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 系统参数表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-14 + */ +public interface SysParamMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.xml new file mode 100644 index 0000000..6145c62 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dao/mapper/SysParamMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dto/ParamQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dto/ParamQuery.class new file mode 100644 index 0000000..9384778 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dto/ParamQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dto/ParamQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dto/ParamQuery.java new file mode 100644 index 0000000..3ed2662 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/dto/ParamQuery.java @@ -0,0 +1,15 @@ +package org.nl.system.service.param.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.system.service.param.dao.Param; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/15 + */ +@Data +public class ParamQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/impl/SysParamServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/impl/SysParamServiceImpl.class new file mode 100644 index 0000000..54417a7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/impl/SysParamServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/impl/SysParamServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/impl/SysParamServiceImpl.java new file mode 100644 index 0000000..8f3c593 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/param/impl/SysParamServiceImpl.java @@ -0,0 +1,98 @@ +package org.nl.system.service.param.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.MapOf; +import org.nl.config.language.LangProcess; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.dao.mapper.SysParamMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 系统参数表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-14 + */ +@Slf4j +@Service +public class SysParamServiceImpl extends ServiceImpl implements ISysParamService { + + @Autowired + private SysParamMapper paramMapper; + + @Override + public Page queryPage(Map whereJson, PageQuery page) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderBy(true, true, "create_time"); + Page paramPage = paramMapper.selectPage(page.build(), queryWrapper); + return paramPage; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(Param param) { + List code = paramMapper.selectByMap(MapOf.of("code", param.getCode())); + if (ObjectUtil.isNotEmpty(code)) throw new BadRequestException(LangProcess.msg("universal_encode")); + param.setId(IdUtil.getSnowflake(1, 1).nextIdStr()); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + param.setCreate_id(currentUserId); + param.setCreate_name(nickName); + param.setCreate_time(now); + param.setUpdate_id(currentUserId); + param.setUpdate_name(nickName); + param.setUpdate_time(now); + paramMapper.insert(param); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(Param param) { + Param paramObj = paramMapper.selectById(param.getId()); + if (ObjectUtil.isEmpty(paramObj)) { + throw new BadRequestException(LangProcess.msg("universal_error")); + } + Param param1 = paramMapper.selectOne(new LambdaQueryWrapper().eq(Param::getCode, param.getCode()) + .and(lam -> lam.ne(Param::getId, param.getId()))); + if (ObjectUtil.isNotEmpty(param1)) { + throw new BadRequestException(LangProcess.msg("universal_encode_exist",param.getCode())); + } + param.setUpdate_id(SecurityUtils.getCurrentUserId()); + param.setUpdate_name(SecurityUtils.getCurrentNickName()); + param.setUpdate_time(DateUtil.now()); + paramMapper.updateById(param); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByIds(List ids) { + paramMapper.deleteBatchIds(ids); + } + + @Override + public Param findByCode(String code) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("code", code); + Param param = paramMapper.selectOne(queryWrapper); + return param; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/ISysDataPermissionService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/ISysDataPermissionService.class new file mode 100644 index 0000000..a4f00f1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/ISysDataPermissionService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/ISysDataPermissionService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/ISysDataPermissionService.java new file mode 100644 index 0000000..58bf417 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/ISysDataPermissionService.java @@ -0,0 +1,78 @@ +package org.nl.system.service.permission; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.permission.dao.SysDataPermission; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.permission.dao.SysDataScope; +import org.nl.system.service.permission.dto.SysDataPermissionQuery; +import org.nl.system.service.user.dto.UserDataPermissionDto; + +import java.util.List; +import java.util.Set; + +/** + *

+ * 数据数据权限表 服务类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +public interface ISysDataPermissionService extends IService { + + /** + * 分页查询 + * @param dataPermissionQuery + * @param page + * @return + */ + IPage queryAll(SysDataPermissionQuery dataPermissionQuery, PageQuery page); + + /** + * 新增数据权限 + * @param dto + */ + void create(SysDataPermission permission); + + /** + * 修改 + * @param permission + */ + void update(SysDataPermission permission); + + /** + * 批量删除 + * @param ids + */ + void deleteAll(Set ids); + + /** + * + * @return + */ + List getDataScopeType(); + + /** + * 获取数据权限下拉框 + * @return + */ + List getDataPermissionOption(); + + List getDataShow(String id); + + /** + * 保存数据权限 + * @param datas + */ + void savePermission(JSONObject datas); + + /** + * 数据展示 + * @param data + * @return + */ + List getDataDetail(JSONObject data); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataPermission.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataPermission.class new file mode 100644 index 0000000..8251dcc Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataPermission.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataPermission.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataPermission.java new file mode 100644 index 0000000..20ed6a1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataPermission.java @@ -0,0 +1,112 @@ +package org.nl.system.service.permission.dao; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +/** + *

+ * 数据数据权限表 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_data_permission") +public class SysDataPermission implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * permission_id + */ + @TableId(value = "permission_id") + private String permission_id; + + /** + * 编码 + */ + @NotNull + private String code; + + /** + * 名称 + */ + @NotNull + private String name; + /** + * 中文名称 + */ + @NotNull + private String zh_name; + /** + * 英文名称 + */ + @NotNull + private String en_name; + /** + * 越南名称 + */ + @NotNull + private String vi_name; + + /** + * 排序 + */ + private BigDecimal order_sort; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建人标识 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人标识 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataScope.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataScope.class new file mode 100644 index 0000000..ca7227b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataScope.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataScope.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataScope.java new file mode 100644 index 0000000..41dc8ff --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/SysDataScope.java @@ -0,0 +1,44 @@ +package org.nl.system.service.permission.dao; + +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 数据权限规则表 + *

+ * + * @author generator + * @since 2022-12-27 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_data_scope") +public class SysDataScope implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 当前用户 + */ + private String self_user_id; + + /** + * 数据权限类型 + */ + private String permission_scope_type; + + /** + * 部门权限列表 + */ + private String dept_id; + + /** + * 用户权限列表 + */ + private String user_id; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.class new file mode 100644 index 0000000..bd6d809 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.java new file mode 100644 index 0000000..0312e64 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.java @@ -0,0 +1,31 @@ +package org.nl.system.service.permission.dao.mapper; + +import org.apache.ibatis.annotations.Param; +import org.nl.system.service.permission.dao.SysDataPermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.system.service.permission.dao.SysDataScope; + +import java.util.List; + +/** + *

+ * 数据数据权限表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-20 + */ +public interface SysDataPermissionMapper extends BaseMapper { + + List findDataScopeUserIdBySelfUserIdAndScopeType(String userId, String permissionScopeType); + + List findDataScopeDeptIdBySelfUserIdAndScopeType(String userId, String permissionScopeType); + + void deleteScopeBySelfUserId(String userId); + + void insertDataScope(@Param("dataScope") SysDataScope dataScope); + + void insertDataScopes(@Param("dataScope") SysDataScope dataScope); + + List getDataDetail(String selfUserId, String permissionScopeType); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.xml new file mode 100644 index 0000000..7311d1f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dao/mapper/SysDataPermissionMapper.xml @@ -0,0 +1,61 @@ + + + + + INSERT INTO sys_data_scope(self_user_id, permission_scope_type, user_id) + VALUES (#{dataScope.self_user_id}, #{dataScope.permission_scope_type}, #{dataScope.user_id}) + + + INSERT INTO sys_data_scope(self_user_id, permission_scope_type, user_id, dept_id) + VALUES (#{dataScope.self_user_id}, #{dataScope.permission_scope_type}, #{dataScope.user_id}, #{dataScope.dept_id}) + + + DELETE FROM sys_data_scope WHERE self_user_id = #{userId} + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/DataScopeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/DataScopeEnum.class new file mode 100644 index 0000000..970ad75 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/DataScopeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/DataScopeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/DataScopeEnum.java new file mode 100644 index 0000000..9cd2300 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/DataScopeEnum.java @@ -0,0 +1,20 @@ +package org.nl.system.service.permission.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/27 + */ +@Getter +@AllArgsConstructor +public enum DataScopeEnum { + + USER("user", "用户数据权限"), + DEPT("dept", "部门数据权限"), + SELF("self", "自身数据权限"); + private final String code; + private final String name; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/SysDataPermissionQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/SysDataPermissionQuery.class new file mode 100644 index 0000000..0a3c210 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/SysDataPermissionQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/SysDataPermissionQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/SysDataPermissionQuery.java new file mode 100644 index 0000000..3eb9aed --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/dto/SysDataPermissionQuery.java @@ -0,0 +1,14 @@ +package org.nl.system.service.permission.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.system.service.permission.dao.SysDataPermission; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/20 + */ +@Data +public class SysDataPermissionQuery extends BaseQuery { +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.class new file mode 100644 index 0000000..53b5707 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java new file mode 100644 index 0000000..78f7398 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/permission/impl/SysDataPermissionServiceImpl.java @@ -0,0 +1,179 @@ +package org.nl.system.service.permission.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.dao.mapper.SysDictMapper; +import org.nl.system.service.permission.ISysDataPermissionService; +import org.nl.system.service.permission.dao.SysDataPermission; +import org.nl.system.service.permission.dao.SysDataScope; +import org.nl.system.service.permission.dao.mapper.SysDataPermissionMapper; +import org.nl.system.service.permission.dto.DataScopeEnum; +import org.nl.system.service.permission.dto.SysDataPermissionQuery; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dto.UserDataPermissionDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Set; + +/** + *

+ * 数据数据权限表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Service +public class SysDataPermissionServiceImpl extends ServiceImpl implements ISysDataPermissionService { + + @Autowired + private SysDataPermissionMapper dataPermissionMapper; + @Autowired + private ISysUserService userService; + @Autowired + private SysDictMapper dictMapper; + + @Override + public IPage queryAll(SysDataPermissionQuery dataPermissionQuery, PageQuery page) { + return this.page(page.build(SysDataPermission.class), dataPermissionQuery.build()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(SysDataPermission permission) { + SysDataPermission sysDataPermission = dataPermissionMapper.selectOne(new LambdaQueryWrapper().eq(SysDataPermission::getCode, permission.getCode())); + if (ObjectUtil.isNotEmpty(sysDataPermission)) throw new BadRequestException(LangProcess.msg("universal_encode_date_exist",permission.getCode())); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + permission.setPermission_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + permission.setCreate_id(currentUserId); + permission.setCreate_name(nickName); + permission.setUpdate_id(currentUserId); + permission.setUpdate_name(nickName); + permission.setUpdate_time(now); + permission.setCreate_time(now); + dataPermissionMapper.insert(permission); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysDataPermission permission) { + SysDataPermission dataPermission = dataPermissionMapper.selectById(permission.getPermission_id()); + if (ObjectUtil.isEmpty(dataPermission)) throw new BadRequestException(LangProcess.msg("universal_error")); + permission.setUpdate_time(DateUtil.now()); + permission.setUpdate_id(SecurityUtils.getCurrentUserId()); + permission.setUpdate_name(SecurityUtils.getCurrentNickName()); + dataPermissionMapper.updateById(permission); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Set ids) { + ids.forEach(id -> { + List permissions = userService.getUserDataPermissionByPermissionId(id); + if (ObjectUtil.isNotEmpty(permissions)) throw new BadRequestException(LangProcess.msg("universal_exist_linked_data")); + dataPermissionMapper.deleteById(id); + }); + } + + @Override + public List getDataScopeType() { + return dictMapper.selectList(new LambdaQueryWrapper().eq(Dict::getCode, "permission_scope_type")); + } + + @Override + public List getDataPermissionOption() { + return this.list(); + } + + @Override + public List getDataShow(String userId) { + List userDataPermissionDtoList = userService.getUserDataPermissionByUserId(userId); + userDataPermissionDtoList.forEach(userDataPermissionDto -> { + SysDataPermission sysDataPermission = dataPermissionMapper.selectOne(new LambdaQueryWrapper().eq(SysDataPermission::getPermission_id, userDataPermissionDto.getPermission_id())); + if (sysDataPermission.getCode().equals(DataScopeEnum.USER.getCode())) { // 用户权限 + List userIds = dataPermissionMapper.findDataScopeUserIdBySelfUserIdAndScopeType(userId, userDataPermissionDto.getPermission_scope_type()); + if (ObjectUtil.isNotEmpty(userIds)) userDataPermissionDto.setUsers(userIds); + } else if (sysDataPermission.getCode().equals(DataScopeEnum.DEPT.getCode())) { // 部门权限 + List deptIds = dataPermissionMapper.findDataScopeDeptIdBySelfUserIdAndScopeType(userId, userDataPermissionDto.getPermission_scope_type()); + if (ObjectUtil.isNotEmpty(deptIds)) userDataPermissionDto.setDepts(deptIds); + } else if (sysDataPermission.getCode().equals(DataScopeEnum.SELF.getCode())) { // 自身 + List userIds = dataPermissionMapper.findDataScopeUserIdBySelfUserIdAndScopeType(userId, userDataPermissionDto.getPermission_scope_type()); + if (ObjectUtil.isNotEmpty(userIds)) userDataPermissionDto.setUsers(userIds); + } + // 其他不做处理 + }); + return userDataPermissionDtoList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void savePermission(JSONObject datas) { + String user_id = datas.getString("user_id"); + JSONArray data = datas.getJSONArray("datas"); + if (ObjectUtil.isEmpty(user_id)) throw new BadRequestException(LangProcess.msg("universal_userid_empty")); + // 删除用户绑定的数据 + userService.deleteDataPermissionById(user_id); + dataPermissionMapper.deleteScopeBySelfUserId(user_id); + for (int i = 0; i < data.size(); i++) { + JSONObject scopeObj = data.getJSONObject(i); + String permission_scope_type = scopeObj.getString("value"); + String permission_id = scopeObj.getString("permission_id"); + UserDataPermissionDto userDataPermissionDto = new UserDataPermissionDto(); + userDataPermissionDto.setUser_id(user_id); + userDataPermissionDto.setPermission_id(permission_id); + userDataPermissionDto.setPermission_scope_type(permission_scope_type); + // 保存用户数据权限 + userService.insertDataPermission(userDataPermissionDto); + JSONArray users = scopeObj.getJSONArray("users"); + if (ObjectUtil.isNotEmpty(users)) { // 如果是用户直接将用户的id绑定进去 + for (int j = 0; j < users.size(); j++) { + JSONObject user = users.getJSONObject(j); + String userId = user.getString("user_id"); + SysDataScope dataScope = new SysDataScope(); + dataScope.setUser_id(userId); + dataScope.setSelf_user_id(user_id); + dataScope.setPermission_scope_type(permission_scope_type); + dataPermissionMapper.insertDataScope(dataScope); + } + } + JSONArray depts = scopeObj.getJSONArray("depts"); + if (ObjectUtil.isNotEmpty(depts)) { // 如果是部门,先根据部门id求出所有的用户id + for (int j = 0; j < depts.size(); j++) { + JSONObject dept = depts.getJSONObject(j); + String dept_id = dept.getString("dept_id"); + List user_ids = userService.getUserIdByDeptId(dept_id); + user_ids.forEach(id -> { + SysDataScope dataScope = new SysDataScope(); + dataScope.setUser_id(id); + dataScope.setDept_id(dept_id); + dataScope.setSelf_user_id(user_id); + dataScope.setPermission_scope_type(permission_scope_type); + dataPermissionMapper.insertDataScopes(dataScope); + }); + } + } + } + } + + @Override + public List getDataDetail(JSONObject data) { + return dataPermissionMapper.getDataDetail(data.getString("userId"), data.getString("permissionScopeType")); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/ISysQuartzJobService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/ISysQuartzJobService.class new file mode 100644 index 0000000..77ed2c4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/ISysQuartzJobService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/ISysQuartzJobService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/ISysQuartzJobService.java new file mode 100644 index 0000000..9914203 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/ISysQuartzJobService.java @@ -0,0 +1,77 @@ +package org.nl.system.service.quartz; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.quartz.dao.SysQuartzJob; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.quartz.dao.SysQuartzLog; +import org.nl.system.service.quartz.dto.JobQuery; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Set; + +/** + *

+ * 定时任务表 服务类 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface ISysQuartzJobService extends IService { + + /** + * 分页查询任务 + * @param criteria + * @param pageable + * @return + */ + IPage queryAll(JobQuery criteria, PageQuery pageable); + + /** + * 分页查询日志 + * @param criteria + * @param pageable + * @return + */ + IPage queryAllLog(JobQuery criteria, PageQuery pageable); + + /** + * 创建任务 + * @param resources + */ + void createJob(SysQuartzJob resources); + + /** + * 修改任务 + * @param resources + */ + void updateJob(SysQuartzJob resources); + + /** + * 更改定时任务状态 + * @param id + */ + void updateIsPause(SysQuartzJob id); + + /** + * 执行定时任务 + * @param id + */ + void execution(SysQuartzJob id); + + /** + * 批量删除定时任务 + * @param ids + */ + void deleteJob(Set ids); + + void executionSubJob(String[] tasks) throws InterruptedException; + + /** + * 查找已启动的任务 + * @return + */ + List findByIsPauseIsFalse(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/JobRunner.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/JobRunner.class new file mode 100644 index 0000000..0c72533 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/JobRunner.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/JobRunner.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/JobRunner.java new file mode 100644 index 0000000..a535ee9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/JobRunner.java @@ -0,0 +1,36 @@ +package org.nl.system.service.quartz.config; + +import lombok.RequiredArgsConstructor; +import org.nl.system.service.quartz.ISysQuartzJobService; +import org.nl.system.service.quartz.dao.SysQuartzJob; +import org.nl.system.service.quartz.utils.QuartzManage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +@Order(100) +public class JobRunner implements ApplicationRunner { + private static final Logger log = LoggerFactory.getLogger(JobRunner.class); + private final ISysQuartzJobService quartzJobService; + private final QuartzManage quartzManage; + + /** + * 项目启动时重新激活启用的定时任务 + * + * @param applicationArguments / + */ + @Override + public void run(ApplicationArguments applicationArguments) { + log.info("--------------------注入定时任务---------------------"); + List quartzJobs = quartzJobService.findByIsPauseIsFalse(); + quartzJobs.forEach(quartzManage::addJob); + log.info("--------------------定时任务注入完成---------------------"); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig$QuartzJobFactory.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig$QuartzJobFactory.class new file mode 100644 index 0000000..ad5a5d5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig$QuartzJobFactory.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig.class new file mode 100644 index 0000000..5368ea5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig.java new file mode 100644 index 0000000..c00c0f3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/config/QuartzConfig.java @@ -0,0 +1,57 @@ +package org.nl.system.service.quartz.config; + +import org.quartz.Scheduler; +import org.quartz.spi.TriggerFiredBundle; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.quartz.AdaptableJobFactory; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import org.springframework.stereotype.Component; + +/** + * 定时任务配置 + * @author / + * @date 2019-01-07 + */ +@Configuration +public class QuartzConfig { + + /** + * 解决Job中注入Spring Bean为null的问题 + */ + @Component("quartzJobFactory") + public static class QuartzJobFactory extends AdaptableJobFactory { + + private final AutowireCapableBeanFactory capableBeanFactory; + + public QuartzJobFactory(AutowireCapableBeanFactory capableBeanFactory) { + this.capableBeanFactory = capableBeanFactory; + } + + @Override + protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { + + //调用父类的方法 + Object jobInstance = super.createJobInstance(bundle); + capableBeanFactory.autowireBean(jobInstance); + return jobInstance; + } + } + + /** + * 注入scheduler到spring + * @param quartzJobFactory / + * @return Scheduler + * @throws Exception / + */ + @Bean(name = "scheduler") + public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception { + SchedulerFactoryBean factoryBean=new SchedulerFactoryBean(); + factoryBean.setJobFactory(quartzJobFactory); + factoryBean.afterPropertiesSet(); + Scheduler scheduler=factoryBean.getScheduler(); + scheduler.start(); + return scheduler; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzJob.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzJob.class new file mode 100644 index 0000000..d798bf9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzJob.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzJob.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzJob.java new file mode 100644 index 0000000..cd735b0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzJob.java @@ -0,0 +1,127 @@ +package org.nl.system.service.quartz.dao; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; + +/** + *

+ * 定时任务表 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_quartz_job") +public class SysQuartzJob implements Serializable { + + public static final String JOB_KEY = "JOB_KEY"; + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId(value = "job_id") + private String job_id; + + /** + * bean名 + */ + @NotBlank + private String bean_name; + + /** + * corn表达式 + */ + @NotBlank + private String cron_expression; + + /** + * 状态 + */ + private Boolean is_pause; + + /** + * 任务名称 + */ + @NotBlank + private String job_name; + + /** + * 方法名称 + */ + @NotBlank + private String method_name; + + /** + * 参数 + */ + private String params; + + /** + * 备注 + */ + @NotBlank + private String description; + + /** + * 负责人 + */ + private String person_in_charge; + + /** + * 邮箱 + */ + private String email; + + /** + * 子任务ID + */ + private String sub_task; + + /** + * 失败状态 + */ + private Boolean pause_after_failure; + + /** + * 创建人标识 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人标识 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + @TableField(exist = false) + private String uuid; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzLog.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzLog.class new file mode 100644 index 0000000..71bd156 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzLog.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzLog.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzLog.java new file mode 100644 index 0000000..7e685d4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/SysQuartzLog.java @@ -0,0 +1,76 @@ +package org.nl.system.service.quartz.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 定时任务日志 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_quartz_log") +public class SysQuartzLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId(value = "log_id") + private String log_id; + + /** + * bean名 + */ + private String bean_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * corn表达式 + */ + private String cron_expression; + + /** + * 异常信息 + */ + private String exception_detail; + + /** + * 是否成功 + */ + private Boolean is_success; + + /** + * 任务名称 + */ + private String job_name; + + /** + * 方法名称 + */ + private String method_name; + + /** + * 参数 + */ + private String params; + + /** + * 耗时 + */ + private Long time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.class new file mode 100644 index 0000000..155768d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.java new file mode 100644 index 0000000..eba919d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.quartz.dao.mapper; + +import org.nl.system.service.quartz.dao.SysQuartzJob; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 定时任务表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface SysQuartzJobMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.xml new file mode 100644 index 0000000..22b1c0e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzJobMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.class new file mode 100644 index 0000000..f94ca1d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.java new file mode 100644 index 0000000..db0274e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.quartz.dao.mapper; + +import org.nl.system.service.quartz.dao.SysQuartzLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 定时任务日志 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface SysQuartzLogMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.xml new file mode 100644 index 0000000..190cdac --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dao/mapper/SysQuartzLogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dto/JobQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dto/JobQuery.class new file mode 100644 index 0000000..69d809e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dto/JobQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dto/JobQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dto/JobQuery.java new file mode 100644 index 0000000..4a0dc5f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/dto/JobQuery.java @@ -0,0 +1,26 @@ +package org.nl.system.service.quartz.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.quartz.dao.SysQuartzJob; + +import java.sql.Timestamp; +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/19 + */ +@Data +public class JobQuery extends BaseQuery { + private String job_name; + private Boolean is_success; + private List create_time; + @Override + public void paramMapping() { + this.doP.put("job_name", QParam.builder().k(new String[]{"job_name"}).type(QueryTEnum.LK).build()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.class new file mode 100644 index 0000000..afc4e1d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java new file mode 100644 index 0000000..aaaad6f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/impl/SysQuartzJobServiceImpl.java @@ -0,0 +1,165 @@ +package org.nl.system.service.quartz.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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RedisUtils; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.quartz.ISysQuartzJobService; +import org.nl.system.service.quartz.dao.SysQuartzJob; +import org.nl.system.service.quartz.dao.SysQuartzLog; +import org.nl.system.service.quartz.dao.mapper.SysQuartzJobMapper; +import org.nl.system.service.quartz.dao.mapper.SysQuartzLogMapper; +import org.nl.system.service.quartz.dto.JobQuery; +import org.nl.system.service.quartz.utils.QuartzManage; +import org.quartz.CronExpression; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +/** + *

+ * 定时任务表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Service +public class SysQuartzJobServiceImpl extends ServiceImpl implements ISysQuartzJobService { + @Autowired + private SysQuartzJobMapper quartzJobMapper; + @Autowired + private SysQuartzLogMapper quartzLogMapper; + @Autowired + private QuartzManage quartzManage; + @Autowired + private RedisUtils redisUtils; + + @Override + public IPage queryAll(JobQuery criteria, PageQuery pageable) { + return this.page(pageable.build(SysQuartzJob.class), criteria.build()); + } + + @Override + public IPage queryAllLog(JobQuery criteria, PageQuery page) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(criteria.getJob_name()), SysQuartzLog::getJob_name, criteria.getJob_name()) + .eq(ObjectUtil.isNotEmpty(criteria.getIs_success()), SysQuartzLog::getIs_success, criteria.getIs_success()) + .nested(ObjectUtil.isNotEmpty(criteria.getCreate_time()), i -> { + i.ge(SysQuartzLog::getCreate_time, criteria.getCreate_time().get(0)) + .le(SysQuartzLog::getCreate_time, criteria.getCreate_time().get(1)); + }); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + quartzLogMapper.selectPage(pages, lam); + return pages; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createJob(SysQuartzJob resources) { + if (!CronExpression.isValidExpression(resources.getCron_expression())) { + throw new BadRequestException(LangProcess.msg("error_cron")); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + resources.setJob_id(IdUtil.getSnowflake(1,1).nextIdStr()); + resources.setCreate_id(currentUserId); + resources.setCreate_name(nickName); + resources.setCreate_time(now); + resources.setUpdate_id(currentUserId); + resources.setUpdate_name(nickName); + resources.setUpdate_time(now); + quartzJobMapper.insert(resources); + // 添加到任务管理 + quartzManage.addJob(resources); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateJob(SysQuartzJob resources) { + if (!CronExpression.isValidExpression(resources.getCron_expression())) { + throw new BadRequestException(LangProcess.msg("error_cron")); + } + if (StrUtil.isNotEmpty(resources.getSub_task())) { + List tasks = Arrays.asList(resources.getSub_task().split("[,,]")); + if (tasks.contains(resources.getJob_id())) { + throw new BadRequestException(LangProcess.msg("task_Subtasks")); + } + } + resources.setUpdate_id(SecurityUtils.getCurrentUserId()); + resources.setUpdate_name(SecurityUtils.getCurrentNickName()); + resources.setUpdate_time(DateUtil.now()); + quartzJobMapper.updateById(resources); + quartzManage.updateJobCron(resources); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateIsPause(SysQuartzJob quartzJob) { + if (quartzJob.getIs_pause()) { + quartzManage.resumeJob(quartzJob); + quartzJob.setIs_pause(false); + } else { + quartzManage.pauseJob(quartzJob); + quartzJob.setIs_pause(true); + } + quartzJobMapper.updateById(quartzJob); + } + + @Override + public void execution(SysQuartzJob quartzJob) { + quartzManage.runJobNow(quartzJob); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteJob(Set ids) { + ids.forEach(id -> quartzManage.deleteJob(quartzJobMapper.selectById(id))); + quartzJobMapper.deleteBatchIds(ids); + } + + @Async + @Override + @Transactional(rollbackFor = Exception.class) + public void executionSubJob(String[] tasks) throws InterruptedException { + for (String id : tasks) { + SysQuartzJob quartzJob = getById(id); + // 执行任务 + String uuid = IdUtil.simpleUUID(); + quartzJob.setUuid(uuid); + // 执行任务 + execution(quartzJob); + // 获取执行状态,如果执行失败则停止后面的子任务执行 + Boolean result = (Boolean) redisUtils.get(uuid); + while (result == null) { + // 休眠5秒,再次获取子任务执行情况 + Thread.sleep(5000); + result = (Boolean) redisUtils.get(uuid); + } + if (!result) { + redisUtils.del(uuid); + break; + } + } + } + + @Override + public List findByIsPauseIsFalse() { + return quartzJobMapper.selectList(new LambdaQueryWrapper().eq(SysQuartzJob::getIs_pause, false)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/task/TestTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/task/TestTask.class new file mode 100644 index 0000000..f190b01 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/task/TestTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/task/TestTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/task/TestTask.java new file mode 100644 index 0000000..9a402db --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/task/TestTask.java @@ -0,0 +1,26 @@ +package org.nl.system.service.quartz.task; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @Author: lyd + * @Description: 测试例子 + * @Date: 2022/12/19 + */ +@Slf4j +@Component +public class TestTask { + + public void run(){ + log.info("run 执行成功"); + } + + public void run1(String str){ + log.info("run1 执行成功,参数为: {}" + str); + } + + public void run2(){ + log.info("run2 执行成功"); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/ExecutionJob.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/ExecutionJob.class new file mode 100644 index 0000000..f6fb809 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/ExecutionJob.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/ExecutionJob.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/ExecutionJob.java new file mode 100644 index 0000000..25611bc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/ExecutionJob.java @@ -0,0 +1,104 @@ +package org.nl.system.service.quartz.utils; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.yomahub.tlog.task.quartz.TLogQuartzJobBean; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.RedisUtils; +import org.nl.common.utils.ThrowableUtil; +import org.nl.config.SpringContextHolder; +import org.nl.config.thread.ThreadPoolExecutorUtil; +import org.nl.system.service.quartz.ISysQuartzJobService; +import org.nl.system.service.quartz.dao.SysQuartzJob; +import org.nl.system.service.quartz.dao.SysQuartzLog; +import org.nl.system.service.quartz.dao.mapper.SysQuartzLogMapper; +import org.nl.system.service.quartz.impl.SysQuartzJobServiceImpl; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.scheduling.annotation.Async; + +import java.util.concurrent.Future; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @Author: / + * @Description: 参考人人开源,https://gitee.com/renrenio/renren-security + * @Date: 2022/12/19 + */ +@Async +@SuppressWarnings({"unchecked", "all"}) +@Slf4j +public class ExecutionJob extends TLogQuartzJobBean { + + /** + * 该处仅供参考 + */ + private final static ThreadPoolExecutor EXECUTOR = ThreadPoolExecutorUtil.getPoll(); + @Override + public void executeTask(JobExecutionContext context) throws JobExecutionException { + SysQuartzJob quartzJob = (SysQuartzJob) context.getMergedJobDataMap().get(SysQuartzJob.JOB_KEY); + // 获取spring bean + ISysQuartzJobService quartzJobService = SpringContextHolder.getBean(SysQuartzJobServiceImpl.class); + SysQuartzLogMapper quartzLogMapper = SpringContextHolder.getBean(SysQuartzLogMapper.class); + RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); + + String uuid = quartzJob.getUuid(); + + SysQuartzLog logDto = new SysQuartzLog(); + logDto.setLog_id(IdUtil.getSnowflake(1,1).nextIdStr()); + logDto.setJob_name(quartzJob.getJob_name()); + logDto.setBean_name(quartzJob.getBean_name()); + logDto.setMethod_name(quartzJob.getMethod_name()); + logDto.setParams(quartzJob.getParams()); + long startTime = System.currentTimeMillis(); + logDto.setCron_expression(quartzJob.getCron_expression()); + try { + // 执行任务 + System.out.println("--------------------------------------------------------------"); + System.out.println("任务开始执行,任务名称:" + quartzJob.getJob_name()); + QuartzRunnable task = new QuartzRunnable(quartzJob.getBean_name(), quartzJob.getMethod_name(), + quartzJob.getParams()); + Future future = EXECUTOR.submit(task); + future.get(); + long times = System.currentTimeMillis() - startTime; + logDto.setTime(times); + if (StrUtil.isNotEmpty(uuid)) { + redisUtils.set(uuid, true); + } + // 任务状态 + logDto.setIs_success(true); + System.out.println("任务执行完毕,任务名称:" + quartzJob.getJob_name() + ", 执行时间:" + times + "毫秒"); + System.out.println("--------------------------------------------------------------"); + // 判断是否存在子任务 + if (StrUtil.isNotEmpty(quartzJob.getSub_task())) { + String[] tasks = quartzJob.getSub_task().split("[,,]"); + // 执行子任务 + quartzJobService.executionSubJob(tasks); + } + } catch (Exception e) { + if (StrUtil.isNotEmpty(uuid)) { + redisUtils.set(uuid, false); + } + System.out.println("任务执行失败,任务名称:" + quartzJob.getJob_name()); + System.out.println("--------------------------------------------------------------"); + long times = System.currentTimeMillis() - startTime; + logDto.setTime(times); + // 任务状态 0:成功 1:失败 + logDto.setIs_success(false); + logDto.setException_detail(ThrowableUtil.getStackTrace(e)); + // 任务如果失败了则暂停 + if (quartzJob.getPause_after_failure() != null && quartzJob.getPause_after_failure()) { + quartzJob.setIs_pause(false); + //更新状态 + quartzJobService.updateIsPause(quartzJob); + } + //异常时候打印日志 + log.info(logDto.toString()); + quartzLogMapper.insert(logDto); + } finally { + + } + } + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzManage.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzManage.class new file mode 100644 index 0000000..49565be Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzManage.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzManage.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzManage.java new file mode 100644 index 0000000..38cf3bf --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzManage.java @@ -0,0 +1,160 @@ +package org.nl.system.service.quartz.utils; + +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.system.service.quartz.dao.SysQuartzJob; +import org.quartz.*; +import org.quartz.impl.triggers.CronTriggerImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; + +import static org.quartz.TriggerBuilder.newTrigger; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/19 + */ +@Slf4j +@Component +public class QuartzManage { + private static final String JOB_NAME = "TASK_"; + + @Resource(name = "scheduler") + private Scheduler scheduler; + + public void addJob(SysQuartzJob quartzJob) { + try { + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(ExecutionJob.class). + withIdentity(JOB_NAME + quartzJob.getJob_id()).build(); + + //通过触发器名和cron 表达式创建 Trigger + Trigger cronTrigger = newTrigger() + .withIdentity(JOB_NAME + quartzJob.getJob_id()) + .startNow() + .withSchedule(CronScheduleBuilder.cronSchedule(quartzJob.getCron_expression())) + .build(); + + cronTrigger.getJobDataMap().put(SysQuartzJob.JOB_KEY, quartzJob); + + //重置启动时间 + ((CronTriggerImpl)cronTrigger).setStartTime(new Date()); + + //执行定时任务 + scheduler.scheduleJob(jobDetail,cronTrigger); + + // 暂停任务 + if (quartzJob.getIs_pause()) { + pauseJob(quartzJob); + } + } catch (Exception e){ + log.error("创建定时任务失败", e); + throw new BadRequestException(LangProcess.msg("error_scheduled_create")); + } + } + + /** + * 更新job cron表达式 + * @param quartzJob / + */ + public void updateJobCron(SysQuartzJob quartzJob) { + try { + TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getJob_id()); + CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); + // 如果不存在则创建一个定时任务 + if(trigger == null){ + addJob(quartzJob); + trigger = (CronTrigger) scheduler.getTrigger(triggerKey); + } + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJob.getCron_expression()); + trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); + //重置启动时间 + ((CronTriggerImpl)trigger).setStartTime(new Date()); + trigger.getJobDataMap().put(SysQuartzJob.JOB_KEY,quartzJob); + + scheduler.rescheduleJob(triggerKey, trigger); + // 暂停任务 + if (quartzJob.getIs_pause()) { + pauseJob(quartzJob); + } + } catch (Exception e){ + log.error("更新定时任务失败", e); + throw new BadRequestException(LangProcess.msg("error_scheduled_update")); + } + } + + /** + * 恢复一个job + * @param quartzJob / + */ + public void resumeJob(SysQuartzJob quartzJob) { + try { + TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getJob_id()); + CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); + // 如果不存在则创建一个定时任务 + if(trigger == null) { + addJob(quartzJob); + } + JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getJob_id()); + scheduler.resumeJob(jobKey); + } catch (Exception e){ + log.error("恢复定时任务失败", e); + throw new BadRequestException(LangProcess.msg("error_scheduled_recover")); + } + } + + /** + * 暂停一个job + * @param quartzJob / + */ + public void pauseJob(SysQuartzJob quartzJob) { + try { + JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getJob_id()); + scheduler.pauseJob(jobKey); + } catch (Exception e){ + log.error("定时任务暂停失败", e); + throw new BadRequestException(LangProcess.msg("error_scheduled_paused")); + } + } + + /** + * 立即执行job + * @param quartzJob / + */ + public void runJobNow(SysQuartzJob quartzJob) { + try { + TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getJob_id()); + CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); + // 如果不存在则创建一个定时任务 + if(trigger == null) { + addJob(quartzJob); + } + JobDataMap dataMap = new JobDataMap(); + dataMap.put(SysQuartzJob.JOB_KEY, quartzJob); + JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getJob_id()); + scheduler.triggerJob(jobKey,dataMap); + } catch (Exception e){ + log.error("定时任务执行失败", e); + throw new BadRequestException(LangProcess.msg("error_scheduled_execute")); + } + } + + /** + * 删除job + * @param quartzJob + */ + public void deleteJob(SysQuartzJob quartzJob) { + try { + JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getJob_id()); + scheduler.pauseJob(jobKey); + scheduler.deleteJob(jobKey); + } catch (Exception e){ + log.error("删除定时任务失败", e); + throw new BadRequestException(LangProcess.msg("error_scheduled_delete")); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzRunnable.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzRunnable.class new file mode 100644 index 0000000..3a32e99 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzRunnable.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzRunnable.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzRunnable.java new file mode 100644 index 0000000..cb7c5c8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/quartz/utils/QuartzRunnable.java @@ -0,0 +1,47 @@ +package org.nl.system.service.quartz.utils; + +import cn.hutool.core.util.StrUtil; +import com.yomahub.tlog.core.thread.TLogInheritableTask; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.config.SpringContextHolder; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Method; + +/** + * 执行定时任务 + * + * @author / + */ +@Slf4j +public class QuartzRunnable extends TLogInheritableTask { + + private final Object target; + private final Method method; + private final String params; + + QuartzRunnable(String beanName, String methodName, String params) + throws NoSuchMethodException, SecurityException { + this.target = SpringContextHolder.getBean(beanName); + this.params = params; + + if (StrUtil.isNotEmpty(params)) { + this.method = target.getClass().getDeclaredMethod(methodName, String.class); + } else { + this.method = target.getClass().getDeclaredMethod(methodName); + } + } + + + @SneakyThrows + @Override + public void runTask() { + ReflectionUtils.makeAccessible(method); + if (StrUtil.isNotEmpty(params)) { + method.invoke(target, params); + } else { + method.invoke(target); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/RedisService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/RedisService.class new file mode 100644 index 0000000..9d830f7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/RedisService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/RedisService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/RedisService.java new file mode 100644 index 0000000..7370196 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/RedisService.java @@ -0,0 +1,35 @@ +package org.nl.system.service.redis; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: lyd + * @Description: Redis监控的服务 + * @Date: 2022-08-04 + */ +public interface RedisService { + /** + * 获取redis的信息 + * @return + */ + JSONObject getRedisMonitorInfo(); + + /** + * 获得 Redis Key 模板列表 + * @return + */ + JSONObject getKeyDefineList(); + + /** + * 获取所有的键值信息 + * @return + */ + JSONArray getKeyValueList(); + + /** + * 删除redis缓存数据 + * @param ids + */ + void deleteByKey(String[] ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine$KeyTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine$KeyTypeEnum.class new file mode 100644 index 0000000..0a42ba3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine$KeyTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine$TimeoutTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine$TimeoutTypeEnum.class new file mode 100644 index 0000000..76263be Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine$TimeoutTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine.class new file mode 100644 index 0000000..5365cf7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine.java new file mode 100644 index 0000000..55f7fbb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyDefine.java @@ -0,0 +1,112 @@ +package org.nl.system.service.redis.dao; + +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import java.time.Duration; + +/** + * @Author: lyd + * @Description: Redis Key 定义类 + * @Date: 2022-08-04 + */ +@Data +public class RedisKeyDefine { + + @Getter + @AllArgsConstructor + public enum KeyTypeEnum { + + STRING("String"), + LIST("List"), + HASH("Hash"), + SET("Set"), + ZSET("Sorted Set"), + STREAM("Stream"), + PUBSUB("Pub/Sub"); + + /** + * 类型 + */ + @JsonValue + private final String type; + + } + + @Getter + @AllArgsConstructor + public enum TimeoutTypeEnum { + + FOREVER(1), // 永不超时 + DYNAMIC(2), // 动态超时 + FIXED(3); // 固定超时 + + /** + * 类型 + */ + @JsonValue + private final Integer type; + + } + + /** + * Key 模板 + */ + private final String keyTemplate; + /** + * Key 类型的枚举 + */ + private final KeyTypeEnum keyType; + /** + * Value 类型 + * + * 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型 + */ + private final Class valueType; + /** + * 超时类型 + */ + private final TimeoutTypeEnum timeoutType; + /** + * 过期时间 + */ + private final Duration timeout; + /** + * 备注 + */ + private final String memo; + + private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, + TimeoutTypeEnum timeoutType, Duration timeout) { + this.memo = memo; + this.keyTemplate = keyTemplate; + this.keyType = keyType; + this.valueType = valueType; + this.timeout = timeout; + this.timeoutType = timeoutType; + // 添加注册表 + RedisKeyRegistry.add(this); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { + this(memo, keyTemplate, keyType, valueType, TimeoutTypeEnum.FIXED, timeout); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, TimeoutTypeEnum timeoutType) { + this(memo, keyTemplate, keyType, valueType, timeoutType, Duration.ZERO); + } + + /** + * 格式化 Key + * + * 注意,内部采用 {@link String#format(String, Object...)} 实现 + * + * @param args 格式化的参数 + * @return Key + */ + public String formatKey(Object... args) { + return String.format(keyTemplate, args); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyRegistry.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyRegistry.class new file mode 100644 index 0000000..ba782cc Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyRegistry.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyRegistry.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyRegistry.java new file mode 100644 index 0000000..3b45c1d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/dao/RedisKeyRegistry.java @@ -0,0 +1,28 @@ +package org.nl.system.service.redis.dao; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: {@link RedisKeyDefine} 注册表 + * @Date: 2022-08-04 + */ +public class RedisKeyRegistry { + /** + * Redis RedisKeyDefine 数组 + */ + private static final List defines = new ArrayList<>(); + + public static void add(RedisKeyDefine define) { + defines.add(define); + } + + public static List list() { + return defines; + } + + public static int size() { + return defines.size(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/impl/RedisServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/impl/RedisServiceImpl.class new file mode 100644 index 0000000..b4cd6ca Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/impl/RedisServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/impl/RedisServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/impl/RedisServiceImpl.java new file mode 100644 index 0000000..3f681ef --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/impl/RedisServiceImpl.java @@ -0,0 +1,79 @@ +package org.nl.system.service.redis.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.system.service.redis.RedisService; +import org.nl.config.redis.RedisConvert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.DataType; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * @Author: lyd + * @Description: Redis监控的实现类 + * @Date: 2022-08-04 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class RedisServiceImpl implements RedisService { + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Override + public JSONObject getRedisMonitorInfo() { + // 获得 Redis 统计信息 + Properties info = stringRedisTemplate.execute((RedisCallback) RedisServerCommands::info); + Long dbSize = stringRedisTemplate.execute(RedisServerCommands::dbSize); + Properties commandStats = stringRedisTemplate.execute(( + RedisCallback) connection -> connection.info("commandstats")); + assert commandStats != null; // 断言,避免警告 + // 拼接结果返回 + // 转成实体 + JSONObject json = new JSONObject(); + json.put("info", RedisConvert.INSTANCE.build(info, dbSize, commandStats)); + return json; + } + + @Override + public JSONObject getKeyDefineList() { +// List keyDefines = RedisKeyRegistry.list(); + JSONObject json = new JSONObject(); +// json.put("info", RedisConvert.INSTANCE.convertList(keyDefines)); + return json; + } + + @Override + public JSONArray getKeyValueList() { + JSONArray result = new JSONArray(); + Set keys = stringRedisTemplate.keys("*"); + // 迭代 + Iterator it = keys.iterator(); + while ( it.hasNext() ) { + String key = it.next(); + JSONObject redis = new JSONObject(); + DataType dataType = stringRedisTemplate.type(key); // 数据类型 + String s = stringRedisTemplate.opsForValue().get(key); // 获取值 + Long expire = stringRedisTemplate.getExpire(key); // 获取剩余时间 + redis.put("dataType", dataType); + redis.put("key", key); + redis.put("value", s); + redis.put("expire", expire); + result.add(redis); + } + return result; + } + + @Override + public void deleteByKey(String[] ids) { + stringRedisTemplate.delete(Arrays.asList(ids)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO$RedisKeyDefineRespVOBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO$RedisKeyDefineRespVOBuilder.class new file mode 100644 index 0000000..a1a1c0e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO$RedisKeyDefineRespVOBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.class new file mode 100644 index 0000000..4606a74 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java new file mode 100644 index 0000000..aee043f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisKeyDefineRespVO.java @@ -0,0 +1,39 @@ +package org.nl.system.service.redis.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import org.nl.system.service.redis.dao.RedisKeyDefine; + +import java.time.Duration; + +/** + * @Author: lyd + * @Description: 管理后台 - Redis Key 信息 Response VO + * @Date: 2022-08-04 + */ +@ApiModel("管理后台 - Redis Key 信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisKeyDefineRespVO { + @ApiModelProperty(value = "Key 模板", required = true, example = "login_user:%s") + private String keyTemplate; + + @ApiModelProperty(value = "Key 类型的枚举", required = true, example = "String") + private RedisKeyDefine.KeyTypeEnum keyType; + + @ApiModelProperty(value = "Value 类型", required = true, example = "java.lang.String") + private Class valueType; + + @ApiModelProperty(value = "超时类型", required = true, example = "1") + private RedisKeyDefine.TimeoutTypeEnum timeoutType; + + @ApiModelProperty(value = "过期时间,单位:毫秒", required = true, example = "1024") + private Duration timeout; + + @ApiModelProperty(value = "备注", required = true, example = "啦啦啦啦~") + private String memo; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$CommandStat$CommandStatBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$CommandStat$CommandStatBuilder.class new file mode 100644 index 0000000..cdc08f0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$CommandStat$CommandStatBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$CommandStat.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$CommandStat.class new file mode 100644 index 0000000..cc97188 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$CommandStat.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$RedisMonitorRespVOBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$RedisMonitorRespVOBuilder.class new file mode 100644 index 0000000..6682758 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO$RedisMonitorRespVOBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO.class new file mode 100644 index 0000000..ea0ae64 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO.java new file mode 100644 index 0000000..ce0794b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/redis/vo/RedisMonitorRespVO.java @@ -0,0 +1,47 @@ +package org.nl.system.service.redis.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Properties; + +/** + * @Author: lyd + * @Description: 管理后台 - Redis 监控信息 Response VO + * @Date: 2022-08-04 + */ +@ApiModel("管理后台 - Redis 监控信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisMonitorRespVO { + @ApiModelProperty(value = "Redis info 指令结果", required = true, notes = "具体字段,查看 Redis 文档") + private Properties info; + + @ApiModelProperty(value = "Redis key 数量", required = true, example = "1024") + private Long dbSize; + + @ApiModelProperty(value = "CommandStat 数组", required = true) + private List commandStats; + + @ApiModel("Redis 命令统计结果") + @Data + @Builder + @AllArgsConstructor + public static class CommandStat { + + @ApiModelProperty(value = "Redis 命令", required = true, example = "get") + private String command; + + @ApiModelProperty(value = "调用次数", required = true, example = "1024") + private Integer calls; + + @ApiModelProperty(value = "消耗 CPU 秒数", required = true, example = "666") + private Long usec; + + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/ISysRoleService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/ISysRoleService.class new file mode 100644 index 0000000..fb7502a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/ISysRoleService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/ISysRoleService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/ISysRoleService.java new file mode 100644 index 0000000..4570764 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/ISysRoleService.java @@ -0,0 +1,64 @@ +package org.nl.system.service.role; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.role.dao.SysRole; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 角色表 服务类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface ISysRoleService extends IService { + + IPage query(Map param, PageQuery page); + + /** + * 创建角色 + * @param param + */ + void create(JSONObject param); + + /** + * 更新角色 + * @param param + */ + void update(JSONObject param); + + /** + * 删除角色 + * @param ids + */ + void deleteBatchByIds(Set ids); + + /** + * 更新角色菜单 + * @param form + */ + void updateMenu(JSONObject form); + + /** + * 通过id获取用户的权限 + * @param userDto + * @return + */ + List getPermissionList(JSONObject userDto); + + + /** + * 保存用户角色关系 + * @param UserId + * @param deptIds + */ + void saveUserRoleRelation(String UserId, List deptIds); + void delUserRoleRelation(String UserId); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/SysRole.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/SysRole.class new file mode 100644 index 0000000..7f60b45 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/SysRole.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/SysRole.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/SysRole.java new file mode 100644 index 0000000..9bf2f5d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/SysRole.java @@ -0,0 +1,101 @@ +package org.nl.system.service.role.dao; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + *

+ * 角色表 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_role") +public class SysRole implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "role_id") + private String role_id; + + /** + * 名称 + */ + private String name; + + /** + * 角色级别 + */ + private BigDecimal level; + + /** + * 排序 + */ + private BigDecimal order_seq; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建人标识 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人标识 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 角色菜单id + */ + @TableField(exist = false) + private List menus; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.class new file mode 100644 index 0000000..3bbba23 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.java new file mode 100644 index 0000000..0832339 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.java @@ -0,0 +1,33 @@ +package org.nl.system.service.role.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.nl.system.service.role.dao.SysRole; + +import java.util.Collection; +import java.util.List; + +/** + *

+ * 角色表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface SysRoleMapper extends BaseMapper { + + void saveRoleRelation(@Param("user") String UserId, @Param("roles") Collection roles); + void delRoleRelation(@Param("user") String UserId); + + void deleteRoleMenuBatchRoleIds(Collection ids); + + List selectMenuIdsByRoles(String roleId); + + /** + * 插入角色/菜单表 + * @param roleId + * @param menuIds + */ + void insertRoleMenu(String roleId, Collection menuIds); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..3d54ea7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/dao/mapper/SysRoleMapper.xml @@ -0,0 +1,29 @@ + + + + + + replace into sys_users_roles values + + (#{user},#{role}) + + + + delete from sys_users_roles where user_id = #{user} + + + insert into sys_roles_menus values + + (#{menuId},#{roleId}) + + + + DELETE FROM sys_roles_menus WHERE role_id in + + #{id} + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/impl/SysRoleServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/impl/SysRoleServiceImpl.class new file mode 100644 index 0000000..aa950a3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/impl/SysRoleServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/impl/SysRoleServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..01e766a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/role/impl/SysRoleServiceImpl.java @@ -0,0 +1,154 @@ +package org.nl.system.service.role.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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.menu.dao.mapper.SysMenuMapper; +import org.nl.system.service.role.ISysRoleService; +import org.nl.system.service.role.dao.SysRole; +import org.nl.system.service.role.dao.mapper.SysRoleMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + *

+ * 角色表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Service +public class SysRoleServiceImpl extends ServiceImpl implements ISysRoleService { + + @Autowired + private SysRoleMapper roleMapper; + @Autowired + private SysMenuMapper sysMenuMapper; + + @Override + public IPage query(Map param, PageQuery page) { + String blurry = null; + if (ObjectUtil.isNotEmpty(param.get("blurry"))) blurry = param.get("blurry").toString(); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(blurry), SysRole::getName, blurry); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + roleMapper.selectPage(pages, lam); + // 需要吧menus返回去 + pages.getRecords().forEach(sysRole -> sysRole.setMenus(roleMapper.selectMenuIdsByRoles(sysRole.getRole_id()))); + return pages; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(JSONObject param) { + //判断角色名字是否存在 + String name = param.getString("name"); + if (StrUtil.isEmpty(name)) throw new BadRequestException(LangProcess.msg("universal_role_empty")); + SysRole sysRole = JSONObject.parseObject(JSONObject.toJSONString(param), SysRole.class); + + //判断角色名字是否存在 + SysRole role = roleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getName, sysRole.getName())); + if (ObjectUtil.isNotEmpty(role)) throw new BadRequestException(LangProcess.msg("universal_role_exist",name)); + + String userId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + // 插入 + sysRole.setRole_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + sysRole.setCreate_id(userId); + sysRole.setCreate_name(nickName); + sysRole.setCreate_time(now); + sysRole.setUpdate_id(userId); + sysRole.setUpdate_name(nickName); + sysRole.setUpdate_time(now); + roleMapper.insert(sysRole); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject param) { + SysRole sysRole = JSONObject.parseObject(JSONObject.toJSONString(param), SysRole.class); + //判断角色名字是否存在 + String name = sysRole.getName(); + if (StrUtil.isEmpty(name)) throw new BadRequestException(LangProcess.msg("universal_role_empty")); + + //判断角色名字是否存在 + SysRole role = roleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getName, sysRole.getName()) + .ne(SysRole::getRole_id, sysRole.getRole_id())); + if (ObjectUtil.isNotEmpty(role)) throw new BadRequestException(LangProcess.msg("universal_role_exist",name)); + String userId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + sysRole.setUpdate_id(userId); + sysRole.setUpdate_name(nickName); + sysRole.setUpdate_time(now); + roleMapper.updateById(sysRole); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteBatchByIds(Set ids) { + // 删除角色表 + roleMapper.deleteBatchIds(ids); + // 删除角色菜单绑定关系 + roleMapper.deleteRoleMenuBatchRoleIds(ids); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateMenu(JSONObject form) { + String roleId = form.getString("role_id"); + JSONArray menus = form.getJSONArray("menus"); + Set menuIds = new HashSet<>(); + for (int i = 0; i < menus.size(); i++) { + JSONObject object = menus.getJSONObject(i); + menuIds.add(object.getString("menuId")); + } + // 删除当前角色绑定的菜单 + roleMapper.deleteRoleMenuBatchRoleIds(Arrays.asList(roleId)); + // 插入数据 + roleMapper.insertRoleMenu(roleId, menuIds); + } + + @Override + public List getPermissionList(JSONObject userDto) { + List permission = new LinkedList<>(); + // 查看是否为管理员 + Boolean is_admin = userDto.getBoolean("is_admin"); + if(is_admin){ + permission.add("admin"); + } + permission.addAll(sysMenuMapper.getPermissionByUserId(userDto.getString("user_id"))); + return permission; + } + + @Override + public void saveUserRoleRelation(String user, List roles) { + if (StringUtils.isEmpty(user) || CollectionUtils.isEmpty(roles)){ + return; + } + roleMapper.saveRoleRelation(user,roles); + } + + @Override + public void delUserRoleRelation(String user) { + roleMapper.delRoleRelation(user); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/AuthUserDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/AuthUserDto.class new file mode 100644 index 0000000..679c786 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/AuthUserDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/AuthUserDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/AuthUserDto.java new file mode 100644 index 0000000..9d810f0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/AuthUserDto.java @@ -0,0 +1,40 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.secutiry.dto; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * @author Zheng Jie + * @date 2018-11-30 + */ +@Getter +@Setter +public class AuthUserDto { + + @NotBlank + private String username; + + @NotBlank + private String password; + + private String code; + + private String uuid = ""; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/UserDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/UserDto.class new file mode 100644 index 0000000..e9918a6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/UserDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/UserDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/UserDto.java new file mode 100644 index 0000000..1aba3ce --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/dto/UserDto.java @@ -0,0 +1,69 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.secutiry.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Getter; +import lombok.Setter; +import org.nl.common.base.BaseDTO; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author Zheng Jie + * @date 2018-11-23 + */ +@Getter +@Setter +public class UserDto extends BaseDTO implements Serializable { + @JsonSerialize(using = ToStringSerializer.class) + private String id; + +// private Set roles; + + + private String username; + + private String personName; + + private String email; + + private String phone; + + private String gender; + + private String avatarName; + + private String avatarPath; + + private String extId; + + private String extuserId; + + + @JsonIgnore + private String password; + + private Boolean enabled; + + @JsonIgnore + private Boolean isAdmin = false; + + private Date pwdResetTime; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService$1.class new file mode 100644 index 0000000..b7f417e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService.class new file mode 100644 index 0000000..daf27fa Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService.java new file mode 100644 index 0000000..d61038b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/secutiry/impl/OnlineUserService.java @@ -0,0 +1,290 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.secutiry.impl; + +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.dev33.satoken.stp.SaLoginModel; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.*; +import org.nl.config.RsaProperties; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.dto.CurrentUser; +import org.nl.config.language.LangProcess; +import org.nl.system.service.dept.ISysDeptService; +import org.nl.system.service.dept.dao.SysDept; +import org.nl.system.service.secutiry.dto.UserDto; +import org.nl.system.service.role.ISysRoleService; +import org.nl.system.service.secutiry.dto.AuthUserDto; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.nl.system.service.user.dto.OnlineUserDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; + +/** + * @author Zheng Jie + * @date 2019年10月26日21:56:27 + */ +@Service +@Slf4j +public class OnlineUserService { + + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysDeptService deptService; + @Autowired + private ISysRoleService roleService; + @Autowired + private RedisUtils redisUtils; + + public OnlineUserService(RedisUtils redisUtils) { + this.redisUtils = redisUtils; + } + + /** + * 保存在线用户信息 + * @param userDto / + * @param token / + * @param request / + */ + public void save(SysUser userDto, String token, HttpServletRequest request){ + // 获取用户部门 + List userDeptByUserId = deptService.getUserDeptByUserId(userDto.getUser_id()); + StringBuilder sb = new StringBuilder(); + for (SysDept dept : userDeptByUserId) { + sb.append(dept.getName()).append("、"); + } + if (sb.length() > 0) { + sb.setLength(sb.length() - 1); + } + String dept = sb.toString(); + String ip = StringUtils.getIp(request); + String browser = StringUtils.getBrowser(request); + String address = StringUtils.getCityInfo(ip); + OnlineUserDto onlineUserDto = null; + try { + onlineUserDto = new OnlineUserDto(userDto.getUsername(), userDto.getPerson_name(), dept, browser , ip, address, EncryptUtils.desEncrypt(token), new Date()); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + redisUtils.set("oline-" + userDto.getUsername(), onlineUserDto, StpUtil.getTokenTimeout()); + } + + /** + * 查询全部数据 + * @param filter / + * @param pageable / + * @return / + */ + public Map getAll(String filter, Pageable pageable){ + List onlineUserDtos = getAll(filter); + return PageUtil.toPage( + PageUtil.toPage(pageable.getPageNumber(),pageable.getPageSize(), onlineUserDtos), + onlineUserDtos.size() + ); + } + + /** + * 查询全部数据,不分页 + * @param filter / + * @return / + */ + public List getAll(String filter){ + List keys = redisUtils.scan("oline-*"); + Collections.reverse(keys); + List onlineUserDtos = new ArrayList<>(); + for (String key : keys) { + OnlineUserDto onlineUserDto = (OnlineUserDto) redisUtils.get(key); + onlineUserDtos.add(onlineUserDto); + } + onlineUserDtos.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); + return onlineUserDtos; + } + + /** + * 踢出用户 + * @param key: OnlineUserDto / + */ + public void kickOut(OnlineUserDto key) { + // 获取用户 + SysUser one = sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, key.getUserName())); + if (ObjectUtil.isNotEmpty(one)) { + redisUtils.del("oline-" + one.getUsername()); + } + // 下线 + StpUtil.logoutByTokenValue(key.getKey()); // 通过token强退 + } + + /** + * 踢出用户 + * @param key:token / + */ + public void kickOut(String key) { + redisUtils.del(key); + // 下线 + StpUtil.logoutByTokenValue(key); // 通过token强退 + } + + /** + * 退出登录 + * @param token / + */ + public void logout(String token) { + redisUtils.del(token); + } + + /** + * 导出 + * @param all / + * @param response / + * @throws IOException / + */ + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (OnlineUserDto user : all) { + Map map = new LinkedHashMap<>(); + map.put("用户名", user.getUserName()); + map.put("部门", user.getDept()); + map.put("登录IP", user.getIp()); + map.put("登录地点", user.getAddress()); + map.put("浏览器", user.getBrowser()); + map.put("登录日期", user.getLoginTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } + + /** + * 查询用户 + * @param key / + * @return / + */ + public OnlineUserDto getOne(String key) { + return (OnlineUserDto)redisUtils.get(key); + } + + /** + * 检测用户是否在之前已经登录,已经登录踢下线 + * @param userName 用户名 + */ + public void checkLoginOnUser(String userName, String igoreToken){ + List onlineUserDtos = getAll(userName); + if(onlineUserDtos ==null || onlineUserDtos.isEmpty()){ + return; + } + for(OnlineUserDto onlineUserDto : onlineUserDtos){ + if(onlineUserDto.getUserName().equals(userName)){ + try { + String token =EncryptUtils.desDecrypt(onlineUserDto.getKey()); + if(StrUtil.isNotEmpty(igoreToken)&&!igoreToken.equals(token)){ + this.kickOut(token); + }else if(StrUtil.isEmpty(igoreToken)){ + this.kickOut(token); + } + } catch (Exception e) { + log.error("checkUser is error",e); + } + } + } + } + + /** + * 根据用户名强退用户 + * @param username / + */ + @Async + public void kickOutForUsername(String username) throws Exception { + List onlineUsers = getAll(username); + for (OnlineUserDto onlineUser : onlineUsers) { + if (onlineUser.getUserName().equals(username)) { + String token = EncryptUtils.desDecrypt(onlineUser.getKey()); + kickOut(token); + } + } + } + @SneakyThrows + public Map login(Map paramMap, HttpServletRequest request){ + // 密码解密 - 前端的加密规则: encrypt + AuthUserDto authUser = JSON.toJavaObject((JSON) JSON.toJSON(paramMap), AuthUserDto.class); + String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword()); + // 查询验证码 + String code = (String) redisUtils.get(authUser.getUuid()); + // 清除验证码 + redisUtils.del(authUser.getUuid()); + if (StrUtil.isEmpty(code)) { + throw new BadRequestException(LangProcess.msg("login_codeNull")); + } + if (StrUtil.isEmpty(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) { + throw new BadRequestException(LangProcess.msg("login_codeError")); + } + // 校验数据库 + // 根据用户名查询,在比对密码 + SysUser userInfo = sysUserService.getOne(new QueryWrapper().eq("username",authUser.getUsername())); + if (userInfo == null||!userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, "salt"))) { // 这里需要密码加密 + throw new BadRequestException(LangProcess.msg("login_pwdWrong")); + } + + // 获取权限列表 - 登录查找权限 + List permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo)); + + + if (!userInfo.getIs_used()) { + throw new BadRequestException(LangProcess.msg("login_account")); + } + + // 登录输入,登出删除 + CurrentUser user = new CurrentUser(); + user.setId(userInfo.getUser_id()); + user.setUsername(userInfo.getUsername()); + user.setPresonName((userInfo.getPerson_name())); + user.setUser(userInfo); + user.setPermissions(permissionList); + + // SaLoginModel 配置登录相关参数 + StpUtil.login(userInfo.getUser_id(), new SaLoginModel() + .setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型 + .setExtra("loginInfo", user) // Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效) + ); + + // 返回 token 与 用户信息 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("roles", permissionList); + jsonObject.put("user", userInfo); + Map authInfo = new HashMap(2) {{ + put("token", "Bearer " + StpUtil.getTokenValue()); + put("user", user); + }}; + // 保存在线信息 + this.save(userInfo, StpUtil.getTokenValue(), request); + return authInfo; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/IToolLocalStorageService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/IToolLocalStorageService.class new file mode 100644 index 0000000..cca5cea Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/IToolLocalStorageService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/IToolLocalStorageService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/IToolLocalStorageService.java new file mode 100644 index 0000000..200b222 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/IToolLocalStorageService.java @@ -0,0 +1,44 @@ +package org.nl.system.service.tools; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.tools.dao.ToolLocalStorage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.tools.dto.ToolLocalStorageQuery; +import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Set; + +/** + *

+ * 本地存储表 服务类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +public interface IToolLocalStorageService extends IService { + + IPage queryAll(ToolLocalStorageQuery criteria, PageQuery pageable); + + /** + * 上传文件 + * @param name + * @param file + * @return + */ + Object create(String name, MultipartFile file); + + /** + * 修改文件 + * @param resources + */ + void update(ToolLocalStorage resources); + + /** + * 删除文件 + * @param ids + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/ToolLocalStorage.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/ToolLocalStorage.class new file mode 100644 index 0000000..9ece124 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/ToolLocalStorage.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/ToolLocalStorage.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/ToolLocalStorage.java new file mode 100644 index 0000000..88a1296 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/ToolLocalStorage.java @@ -0,0 +1,91 @@ +package org.nl.system.service.tools.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 本地存储表 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("tool_local_storage") +public class ToolLocalStorage implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId(value = "storage_id") + private String storage_id; + + /** + * 文件真实的名称 + */ + private String real_name; + + /** + * 文件名 + */ + private String name; + + /** + * 后缀 + */ + private String suffix; + + /** + * 路径 + */ + private String path; + + /** + * 类型 + */ + private String type; + + /** + * 大小 + */ + private String size; + + /** + * 创建人标识 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人标识 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.class new file mode 100644 index 0000000..8b5bcc3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.java new file mode 100644 index 0000000..488006c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.tools.dao.mapper; + +import org.nl.system.service.tools.dao.ToolLocalStorage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 本地存储表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-20 + */ +public interface ToolLocalStorageMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.xml new file mode 100644 index 0000000..816d130 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dao/mapper/ToolLocalStorageMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dto/ToolLocalStorageQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dto/ToolLocalStorageQuery.class new file mode 100644 index 0000000..bae74ad Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dto/ToolLocalStorageQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dto/ToolLocalStorageQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dto/ToolLocalStorageQuery.java new file mode 100644 index 0000000..9fc664a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/dto/ToolLocalStorageQuery.java @@ -0,0 +1,15 @@ +package org.nl.system.service.tools.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.system.service.tools.dao.ToolLocalStorage; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/20 + */ +@Data +public class ToolLocalStorageQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.class new file mode 100644 index 0000000..3eebdc4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java new file mode 100644 index 0000000..af22d87 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/tools/impl/ToolLocalStorageServiceImpl.java @@ -0,0 +1,107 @@ +package org.nl.system.service.tools.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.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import org.nl.config.FileProperties; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.tools.dao.ToolLocalStorage; +import org.nl.system.service.tools.dao.mapper.ToolLocalStorageMapper; +import org.nl.system.service.tools.IToolLocalStorageService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.system.service.tools.dto.ToolLocalStorageQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.Set; + +/** + *

+ * 本地存储表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Service +public class ToolLocalStorageServiceImpl extends ServiceImpl implements IToolLocalStorageService { + + @Autowired + private FileProperties properties; + @Autowired + private ToolLocalStorageMapper localStorageMapper; + + @Override + public IPage queryAll(ToolLocalStorageQuery criteria, PageQuery pageable) { + return this.page(pageable.build(ToolLocalStorage.class), criteria.build()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Object create(String name, MultipartFile multipartFile) { + FileUtil.checkSize(properties.getMaxSize(), multipartFile.getSize()); + String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename()); + String type = FileUtil.getFileType(suffix); + File file = FileUtil.upload(multipartFile, properties.getPath().getPath() + type + File.separator); + if(ObjectUtil.isNull(file)){ + throw new BadRequestException(LangProcess.msg("error_upload")); + } + try { + String userId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + name = StrUtil.isEmpty(name) ? FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()) : name; + ToolLocalStorage localStorage = new ToolLocalStorage(); + localStorage.setStorage_id(IdUtil.getSnowflake(1,1).nextIdStr()); + localStorage.setReal_name(file.getName()); + localStorage.setName(name); + localStorage.setSuffix(suffix); + localStorage.setPath(file.getPath()); + localStorage.setType(type); + localStorage.setSize(FileUtil.getSize(multipartFile.getSize())); + localStorage.setCreate_id(userId); + localStorage.setCreate_name(nickName); + localStorage.setCreate_time(now); + localStorage.setUpdate_id(userId); + localStorage.setUpdate_name(nickName); + localStorage.setUpdate_time(now); + localStorageMapper.insert(localStorage); + return localStorage; + }catch (Exception e){ + FileUtil.del(file); + throw e; + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(ToolLocalStorage resources) { + ToolLocalStorage storage = localStorageMapper.selectById(resources.getStorage_id()); + if (ObjectUtil.isEmpty(storage)) throw new BadRequestException(LangProcess.msg("universal_file_NoExist")); + resources.setUpdate_id(SecurityUtils.getCurrentUserId()); + resources.setUpdate_name(SecurityUtils.getCurrentNickName()); + resources.setUpdate_time(DateUtil.now()); + localStorageMapper.updateById(resources); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Set ids) { + ids.forEach(id -> { + ToolLocalStorage localStorage = localStorageMapper.selectById(id); + if (ObjectUtil.isNotEmpty(localStorage)) { + FileUtil.del(localStorage.getPath()); + localStorageMapper.deleteById(localStorage); + } + }); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/ISysUserService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/ISysUserService.class new file mode 100644 index 0000000..992ffc0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/ISysUserService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/ISysUserService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/ISysUserService.java new file mode 100644 index 0000000..d58d747 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/ISysUserService.java @@ -0,0 +1,41 @@ +package org.nl.system.service.user; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.user.dao.SysUser; +import org.nl.system.service.user.dto.SysUserDetail; +import org.nl.system.service.user.dto.UserDataPermissionDto; +import org.nl.system.service.user.dto.UserQuery; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 用户表 服务类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface ISysUserService extends IService { + + Map updateAvatar(MultipartFile avatar); + + List getUserDetail(UserQuery query, PageQuery pageQuery); + + void create(Map userDetail); + + void update(Map userDetail); + + List getUserDataPermissionByPermissionId(String permissionId); + List getUserDataPermissionByUserId(String userId); + + void deleteDataPermissionById(String userId); + + void insertDataPermission(UserDataPermissionDto userDataPermissionDto); + + List getUserIdByDeptId(String deptId); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/SysUser.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/SysUser.class new file mode 100644 index 0000000..5416b28 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/SysUser.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/SysUser.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/SysUser.java new file mode 100644 index 0000000..3a36268 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/SysUser.java @@ -0,0 +1,139 @@ +package org.nl.system.service.user.dao; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 用户表 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_user") +public class SysUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户标识 + */ + @TableId(value = "user_id", type = IdType.NONE) + private String user_id; + + /** + * 登录账号 + */ + private String username; + + /** + * 姓名 + */ + private String person_name; + + /** + * 性别 + */ + private String gender; + + /** + * 电话 + */ + private String phone; + + /** + * 电子邮箱 + */ + private String email; + + /** + * 头像地址 + */ + private String avatar_name; + + /** + * 头像真实路径 + */ + private String avatar_path; + + /** + * 密码 + */ + private String password; + + /** + * 是否为admin账号 + */ + private Boolean is_admin; + + /** + * 是否启用 + */ + private Boolean is_used; + + /** + * 密码重置者 + */ + private Long pwd_reset_user_id; + + /** + * 密码重置时间 + */ + private Date pwd_reset_time; + + /** + * 创建人标识 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private Date create_time; + + /** + * 修改人标识 + */ + private String update_id; + + /** + * 修改人 + */ + private String update_name; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date update_time; + + /** + * 外部人员标识 + */ + private String extperson_id; + + /** + * 外部用户标识 + */ + private String extuser_id; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.class new file mode 100644 index 0000000..7aeba09 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.java new file mode 100644 index 0000000..032de9e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.java @@ -0,0 +1,38 @@ +package org.nl.system.service.user.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.user.dao.SysUser; +import org.nl.system.service.user.dto.SysUserDetail; +import org.nl.system.service.user.dto.UserDataPermissionDto; +import org.nl.system.service.user.dto.UserQuery; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 用户表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-15 + */ +public interface SysUserMapper extends BaseMapper { + + List getUserDetail(@Param("query") UserQuery query, @Param("page")PageQuery page); + + List> getDetailForMap(@Param("query") UserQuery query, @Param("page")PageQuery page); + + List getUserDataPermissionByPermissionId(String permissionId); + + List getUserDataPermissionByUserId(String userId); + + void deleteDataPermissionById(String userId); + + void insertDataPermission(@Param("dataPermission") UserDataPermissionDto dataPermission); + + List getUserIdByDeptId(String deptId); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.xml new file mode 100644 index 0000000..dfef20c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dao/mapper/SysUserMapper.xml @@ -0,0 +1,146 @@ + + + + + sys_user.user_id as userId, + sys_user.username as username, + sys_user.person_name as personName, + sys_user.gender, + sys_user.phone, + sys_user.email, + sys_user.avatar_name as avatarName, + sys_user.avatar_path as avatarPath, + sys_user.password, + sys_user.is_admin as isAdmin, + sys_user.is_used as isUsed, + sys_user.pwd_reset_user_id as pwdResetUserId, + sys_user.pwd_reset_time as pwdResetTime, + sys_user.create_id as createId, + sys_user.create_name as createName, + sys_user.create_time as createTime, + sys_user.update_id as updateId, + sys_user.update_name as updateName, + sys_user.update_time as updateTime, + sys_user.extperson_id as extpersonId, + sys_user.extuser_id as extuserId + + + INSERT INTO sys_user_data_permission(user_id, permission_scope_type, permission_id) VALUES (#{dataPermission.user_id}, #{dataPermission.permission_scope_type}, #{dataPermission.permission_id}) + + + DELETE FROM sys_user_data_permission WHERE user_id = #{userId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/OnlineUserDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/OnlineUserDto.class new file mode 100644 index 0000000..6d740ac Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/OnlineUserDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/OnlineUserDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/OnlineUserDto.java new file mode 100644 index 0000000..18eccae --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/OnlineUserDto.java @@ -0,0 +1,74 @@ +/* + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.nl.system.service.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 在线用户 + * @author Zheng Jie + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class OnlineUserDto { + + /** + * 用户名 + */ + private String userName; + + /** + * 昵称 + */ + private String nickName; + + /** + * 岗位 + */ + private String dept; + + /** + * 浏览器 + */ + private String browser; + + /** + * IP + */ + private String ip; + + /** + * 地址 + */ + private String address; + + /** + * token + */ + private String key; + + /** + * 登录时间 + */ + private Date loginTime; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/SysUserDetail.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/SysUserDetail.class new file mode 100644 index 0000000..fbdeb2c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/SysUserDetail.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/SysUserDetail.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/SysUserDetail.java new file mode 100644 index 0000000..fe219e3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/SysUserDetail.java @@ -0,0 +1,20 @@ +package org.nl.system.service.user.dto; + +import cn.hutool.core.util.IdUtil; +import lombok.Data; +import org.nl.system.service.dept.dao.SysDept; +import org.nl.system.service.role.dao.SysRole; +import org.nl.system.service.user.dao.SysUser; + +import java.util.List; + +/* + * @author ZZQ + * @Date 2022/12/16 10:02 上午 + */ +@Data +public class SysUserDetail extends SysUser { + private List depts; + + private List roles; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserDataPermissionDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserDataPermissionDto.class new file mode 100644 index 0000000..082e0a0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserDataPermissionDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserDataPermissionDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserDataPermissionDto.java new file mode 100644 index 0000000..d9fb570 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserDataPermissionDto.java @@ -0,0 +1,31 @@ +package org.nl.system.service.user.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: lyd + * @Description: 用户-权限表 + * @Date: 2022/12/20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_user_data_permission") +public class UserDataPermissionDto implements Serializable { + private String user_id; + + private String permission_scope_type; + + private String permission_id; + + @TableField(exist = false) + private List users; + + @TableField(exist = false) + private List depts; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserQuery.class new file mode 100644 index 0000000..1bfdaec Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserQuery.java new file mode 100644 index 0000000..b344dfd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/dto/UserQuery.java @@ -0,0 +1,22 @@ +package org.nl.system.service.user.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.system.service.user.dao.SysUser; + +/* + * @author ZZQ + * @Date 2022/12/15 9:53 上午 + */ +@Data +public class UserQuery extends BaseQuery { + + private Long dept_id; + + @Override + public void paramMapping() { + this.doP.put("dept_id", QParam.builder().k(new String[]{"dept_id"}).type(QueryTEnum.LK).build()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl$1.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl$1.class new file mode 100644 index 0000000..51ee09b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl$1.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl.class new file mode 100644 index 0000000..77c0dca Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl.java new file mode 100644 index 0000000..35bf732 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/system/service/user/impl/ISysUserServiceImpl.java @@ -0,0 +1,159 @@ +package org.nl.system.service.user.impl; + +import cn.dev33.satoken.secure.SaSecureUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.SneakyThrows; +import org.apache.commons.beanutils.ConvertUtils; +import org.nl.common.domain.query.PageQuery; +import org.nl.config.FileProperties; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.system.service.dept.ISysDeptService; +import org.nl.system.service.role.ISysRoleService; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; +import org.nl.system.service.user.dao.mapper.SysUserMapper; +import org.nl.system.service.user.dto.SysUserDetail; +import org.nl.system.service.user.dto.UserDataPermissionDto; +import org.nl.system.service.user.dto.UserQuery; +import org.apache.commons.beanutils.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + *

+ * 用户表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-15 + */ +@Service +public class ISysUserServiceImpl extends ServiceImpl implements ISysUserService { + + @Autowired + private FileProperties properties; + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private ISysDeptService deptService; + @Autowired + private ISysRoleService roleService; + + @Override + public Map updateAvatar(MultipartFile multipartFile) { + SysUser user = this.getOne(new QueryWrapper().eq("username", SecurityUtils.getCurrentUsername())); + String oldPath = user.getAvatar_path(); + File file = FileUtil.upload(multipartFile, properties.getPath().getAvatar()); + user.setAvatar_path(Objects.requireNonNull(file).getPath()); + user.setAvatar_name(file.getName()); + this.saveOrUpdate(user); + if (StrUtil.isNotEmpty(oldPath)) { + FileUtil.del(oldPath); + } + return new HashMap(1) {{ + put("avatar", file.getName()); + }}; + } + + @Override + public List getUserDetail(UserQuery query, PageQuery pageQuery) { + List userDetail = sysUserMapper.getUserDetail(query, pageQuery); + return userDetail; + } + + @Override + @Transactional(rollbackFor = Exception.class) + @SneakyThrows + public void create(Map userDetail) { + SysUser sysUser = new SysUser(); + BeanUtils.populate(sysUser,userDetail); + // 默认密码 123456 + if (ObjectUtil.isEmpty(sysUser.getPassword())) { + sysUser.setPassword(SaSecureUtil.md5BySalt("123456", "salt")); + } else { + sysUser.setPassword(SaSecureUtil.md5BySalt(sysUser.getPassword(), "salt")); + } + String userId = IdUtil.getStringId(); + sysUser.setUser_id(userId); + this.save(sysUser); + if (userDetail.get("depts") !=null){ + deptService.saveUserDeptRelation(userId,(List)userDetail.get("depts")); + }; + if (userDetail.get("roles") !=null){ + roleService.saveUserRoleRelation(userId,(List)userDetail.get("roles")); + }; + } + + @Override + @Transactional + public void update(Map userDetail) { + if(CollectionUtils.isEmpty(userDetail) || ObjectUtil.isEmpty(userDetail.get("user_id"))){ + return; + } + + SysUser sysUser = new SysUser(); + org.springframework.beans.BeanUtils.copyProperties(userDetail,sysUser); + //转换器 + ConvertUtils.register((aClass, o) -> { + try { + if (o == null){ return null; } + return new SimpleDateFormat("yyyy-MM-dd").parse(o.toString()); + }catch (Exception ex){ + return null; + } + }, Date.class); + try { + BeanUtils.populate(sysUser,userDetail); + }catch (Exception ex){ + throw new RuntimeException(); + } + sysUser.setUpdate_time(new Date()); + sysUser.setUpdate_id(SecurityUtils.getCurrentUserId()); + this.updateById(sysUser); + if (userDetail.get("deptIds")!=null){ + deptService.delUserDeptRelation(sysUser.getUser_id()); + deptService.saveUserDeptRelation(sysUser.getUser_id(), (List) userDetail.get("deptIds")); + }; + if (userDetail.get("rolesIds") !=null){ + roleService.delUserRoleRelation(sysUser.getUser_id()); + roleService.saveUserRoleRelation(sysUser.getUser_id(),(List) userDetail.get("rolesIds")); + } + } + + @Override + public List getUserDataPermissionByPermissionId(String permissionId) { + return sysUserMapper.getUserDataPermissionByPermissionId(permissionId); + } + + @Override + public List getUserDataPermissionByUserId(String userId) { + return sysUserMapper.getUserDataPermissionByUserId(userId); + } + + @Override + public void deleteDataPermissionById(String userId) { + sysUserMapper.deleteDataPermissionById(userId); + } + + @Override + public void insertDataPermission(UserDataPermissionDto userDataPermissionDto) { + sysUserMapper.insertDataPermission(userDataPermissionDto); + } + + @Override + public List getUserIdByDeptId(String deptId) { + return sysUserMapper.getUserIdByDeptId(deptId); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/controller/BoardController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/controller/BoardController.class new file mode 100644 index 0000000..60c4d03 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/controller/BoardController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/controller/BoardController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/controller/BoardController.java new file mode 100644 index 0000000..c2ff751 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/controller/BoardController.java @@ -0,0 +1,64 @@ +package org.nl.wms.board.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.board.service.BoardService; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.region.service.ISchBaseRegionService; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; +import org.springframework.context.annotation.Lazy; +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 javax.annotation.Resource; +import java.util.Map; + + +@Slf4j +@RestController +@Api(tags = "看板接口") +@RequestMapping("/api/board" + + "") +@SaIgnore +@Lazy +public class BoardController { + + @Resource + private BoardService boardService; + + + @PostMapping("/cz") + @Log("称重看板") + @ApiOperation("称重看板") + @SaIgnore + public ResponseEntity cz(@RequestBody JSONObject param){ + return new ResponseEntity<>(boardService.cz(), HttpStatus.OK); + } + + @PostMapping("/rk") + @Log("入库看板") + @ApiOperation("入库看板") + @SaIgnore + public ResponseEntity rk(@RequestBody JSONObject param){ + return new ResponseEntity<>(boardService.rk(), HttpStatus.OK); + } + + + @PostMapping("/sc") + @Log("生产看板") + @ApiOperation("生产看板") + @SaIgnore + public ResponseEntity sc(){ + return new ResponseEntity<>(boardService.sc(), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/BoardService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/BoardService.class new file mode 100644 index 0000000..6224d37 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/BoardService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/BoardService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/BoardService.java new file mode 100644 index 0000000..befe07f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/BoardService.java @@ -0,0 +1,18 @@ +package org.nl.wms.board.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.board.service.dao.dto.HwDto; +import org.nl.wms.board.service.dao.dto.ScDto; +import org.nl.wms.board.service.dao.dto.WlDto; +import org.nl.wms.pda.service.dao.vo.PdaResponseVo; + +import java.util.List; + +public interface BoardService { + JSONObject cz(); + + JSONObject rk(); + + + JSONObject sc(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/CzDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/CzDto.class new file mode 100644 index 0000000..07b5c9e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/CzDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/CzDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/CzDto.java new file mode 100644 index 0000000..701d18a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/CzDto.java @@ -0,0 +1,24 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +@Data +public class CzDto { + private String sub_tray; + private String mother_tray; + private String material_code; + private String material_name; + private Integer number; + private Float qty; + private String simtType; + private String locationCode; + private String supplierName; + private String point_qty; + private String device_type; + private String frame_type; + private String mother_type; + private String sub_type; + private String error; + private String fbc; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/HwDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/HwDto.class new file mode 100644 index 0000000..422926d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/HwDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/HwDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/HwDto.java new file mode 100644 index 0000000..d559d59 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/HwDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +@Data +public class HwDto { + private int pointNumber; + private int pointUsed; + private int pointRemain; + private int emptyNumber; + private int emptyUsed; + private int emptyRemain; + private int emptyQty; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/KcDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/KcDto.class new file mode 100644 index 0000000..37fe3b3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/KcDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/KcDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/KcDto.java new file mode 100644 index 0000000..9616f59 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/KcDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class KcDto { + private String sum; + private String weight; + private String pendSum; + private String pendWeight; + private List list; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/RkDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/RkDto.class new file mode 100644 index 0000000..470a2c2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/RkDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/RkDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/RkDto.java new file mode 100644 index 0000000..b011fa0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/RkDto.java @@ -0,0 +1,13 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class RkDto { + private KcDto kc; + private HwDto hw; + private List kn; + private List wrk; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/ScDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/ScDto.class new file mode 100644 index 0000000..eabd2ec Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/ScDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/ScDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/ScDto.java new file mode 100644 index 0000000..a22aa60 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/ScDto.java @@ -0,0 +1,15 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +@Data +public class ScDto { + private String productName; + private String supplierName; + private String productDescription; + private String batch; + private String number; + private String standingTime; + private String usedTime; + private String state; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/SckbDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/SckbDto.class new file mode 100644 index 0000000..c1dfcef Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/SckbDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/SckbDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/SckbDto.java new file mode 100644 index 0000000..5b0d6f6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/SckbDto.java @@ -0,0 +1,13 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class SckbDto { + private Integer ptNumber; + private List pt; + private Integer ksNumber; + private List ks; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WlDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WlDto.class new file mode 100644 index 0000000..daae7da Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WlDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WlDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WlDto.java new file mode 100644 index 0000000..6c9eede --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WlDto.java @@ -0,0 +1,13 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +@Data +public class WlDto { + private String palletSN; + private String productName; + private String productDescription; + private String qty; + private String incomingWeight; + private String supplierName; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WuliaoDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WuliaoDto.class new file mode 100644 index 0000000..88039a1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WuliaoDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WuliaoDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WuliaoDto.java new file mode 100644 index 0000000..2321e49 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/dto/WuliaoDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.board.service.dao.dto; + +import lombok.Data; + +@Data +public class WuliaoDto { + String productDescription; + String supplierName; + String ingotBatch; + Double count1; + Double count2; + Double count3; + Double count4; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.class new file mode 100644 index 0000000..8394a6f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.java new file mode 100644 index 0000000..d104b09 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.java @@ -0,0 +1,28 @@ +package org.nl.wms.board.service.dao.mapper; + +import org.apache.ibatis.annotations.Select; +import org.nl.wms.board.service.dao.dto.*; +import java.util.List; + +public interface BoardMapper { + + CzDto cz(String sub_tray); + + List sc(String region_code); + + List kn(); + + List wrk(); + + HwDto hw(); + + KcDto kc(); + + List wuliao(); + + @Select("select count(*) from sch_base_point where region_code ='HW' and (vehicle_code2='' OR vehicle_code2 is null)") + Integer ptNumber(); + + @Select("select count(*) from sch_base_point where region_code ='HWK' and (vehicle_code2='' OR vehicle_code2 is null)") + Integer ksNumber(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.xml new file mode 100644 index 0000000..078fe6f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/dao/mapper/BoardMapper.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/impl/BoardServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/impl/BoardServiceImpl.class new file mode 100644 index 0000000..fe3ae87 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/impl/BoardServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/impl/BoardServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/impl/BoardServiceImpl.java new file mode 100644 index 0000000..82e3964 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/board/service/impl/BoardServiceImpl.java @@ -0,0 +1,76 @@ +package org.nl.wms.board.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.RedisUtils; +import org.nl.wms.board.service.BoardService; +import org.nl.wms.board.service.dao.dto.*; +import org.nl.wms.board.service.dao.mapper.BoardMapper; +import org.nl.wms.pda.service.dao.vo.PdaResponseVo; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class BoardServiceImpl implements BoardService { + @Autowired + private BoardMapper boardMapper; + @Autowired + private RedisUtils redisUtils; + @Autowired + private ISchBasePointService pointService; + + public JSONObject cz() { + CzDto czDto = boardMapper.cz(String.valueOf(redisUtils.get("sub_tray"))); + if (czDto == null) { + czDto = new CzDto(); + } + czDto.setMother_tray(String.valueOf(redisUtils.get("mother_tray"))); + czDto.setPoint_qty(String.valueOf(redisUtils.get("point_qty"))); + czDto.setDevice_type(String.valueOf(redisUtils.get("device_type"))); + czDto.setFrame_type(String.valueOf(redisUtils.get("frame_type"))); + czDto.setMother_type(String.valueOf(redisUtils.get("mother_type"))); + czDto.setSub_type(String.valueOf(redisUtils.get("sub_type"))); + czDto.setError(String.valueOf(redisUtils.get("error"))); + SchBasePoint schBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, "FBC01")); + czDto.setFbc(schBasePoint!=null&&schBasePoint.getVehicle_qty()==0?"无货":"有货"); + return JSONObject.parseObject(JSON.toJSONString(czDto, SerializerFeature.WriteNullStringAsEmpty)); + } + + public JSONObject rk() { + //库存情况 + /*KcDto kcDto = boardMapper.kc(); + kcDto.setList(boardMapper.wuliao());*/ + KcDto kcDto = new KcDto(); + kcDto.setList(boardMapper.wuliao()); + //货位占用 + HwDto hwDto = boardMapper.hw(); + //库内物料 + List knList = boardMapper.kn(); + //未入库物料 + //List wrkList = boardMapper.wrk(); + RkDto rkDto = new RkDto(); + rkDto.setKc(kcDto); + rkDto.setHw(hwDto); + rkDto.setKn(knList); + //rkDto.setWrk(wrkList); + return JSONObject.parseObject(JSON.toJSONString(rkDto, SerializerFeature.WriteNullStringAsEmpty)); + } + + public JSONObject sc() { + SckbDto sckbDto = new SckbDto(); + sckbDto.setPt(boardMapper.sc("HW")); + sckbDto.setKs(boardMapper.sc("HWK")); + sckbDto.setPtNumber(boardMapper.ptNumber()); + sckbDto.setKsNumber(boardMapper.ksNumber()); + return JSONObject.parseObject(JSON.toJSONString(sckbDto, SerializerFeature.WriteNullStringAsEmpty)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/controller/MdBaseClassstandardController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/controller/MdBaseClassstandardController.class new file mode 100644 index 0000000..0856654 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/controller/MdBaseClassstandardController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java new file mode 100644 index 0000000..9b8acf9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/controller/MdBaseClassstandardController.java @@ -0,0 +1,93 @@ +package org.nl.wms.database.classification.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.classification.service.IMdBaseClassstandardService; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** +* @author lyd +* @date 2023-05-11 +**/ +@Slf4j +@RestController +@Api(tags = "基础分类管理") +@RequestMapping("/api/Classstandard") +public class MdBaseClassstandardController { + + @Autowired + private IMdBaseClassstandardService mdBaseClassstandardService; + + @GetMapping + @Log("查询基础分类") + @ApiOperation("查询基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseClassstandardService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增基础分类") + @ApiOperation("新增基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseClassstandard entity){ + mdBaseClassstandardService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改基础分类") + @ApiOperation("修改基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseClassstandard entity){ + mdBaseClassstandardService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除基础分类") + @ApiOperation("删除基础分类") + //@SaCheckPermission("@el.check('mdBaseClassstandard:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody List ids) { + mdBaseClassstandardService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getClassName") + @Log("获取分类名称下拉框") + @ApiOperation("获取分类名称下拉框") + public ResponseEntity getClassName() { + return new ResponseEntity<>(mdBaseClassstandardService.getClassName(), HttpStatus.OK); + } + + @GetMapping("/loadClass") + @Log("查询基础类型") + @ApiOperation("查询基础类型") + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity query(@RequestParam Map whereJson) { + return new ResponseEntity<>(mdBaseClassstandardService.loadClass(whereJson), HttpStatus.OK); + } + + @ApiOperation("查询类别:根据ID获取同级与上级数据") + @PostMapping("/superior") + //@PreAuthorize("@el.check('user:list','dept:list')") + public ResponseEntity getSuperior(@RequestBody String id) { + MdBaseClassstandard classstandard = mdBaseClassstandardService.getById(id); + ArrayList list = mdBaseClassstandardService.getSuperior(classstandard, new ArrayList<>()); + return new ResponseEntity<>(mdBaseClassstandardService.buildTree(list), HttpStatus.OK); + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/IMdBaseClassstandardService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/IMdBaseClassstandardService.class new file mode 100644 index 0000000..0cc132f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/IMdBaseClassstandardService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java new file mode 100644 index 0000000..7081151 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/IMdBaseClassstandardService.java @@ -0,0 +1,72 @@ +package org.nl.wms.database.classification.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-11 +**/ +public interface IMdBaseClassstandardService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseClassstandard entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseClassstandard entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(List ids); + + /** + * 获取下拉框 + * @return + */ + List getClassName(); + + /** + * loadClass + * @param whereJson + * @return + */ + List loadClass(Map whereJson); + + /** + * + * @param classstandard + * @param objects + * @return + */ + ArrayList getSuperior(MdBaseClassstandard classstandard, ArrayList objects); + + /** + * 构建树形 + * @param list + * @return + */ + List buildTree(ArrayList list); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.class new file mode 100644 index 0000000..428eae2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java new file mode 100644 index 0000000..e244b8f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/MdBaseClassstandard.java @@ -0,0 +1,98 @@ +package org.nl.wms.database.classification.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_classstandard") +public class MdBaseClassstandard implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "class_id", type = IdType.NONE) + @ApiModelProperty(value = "分类标识") + private String class_id; + + @ApiModelProperty(value = "分类编码") + private String class_code; + + @ApiModelProperty(value = "分类名称") + private String class_name; + + @ApiModelProperty(value = "分类简要描述") + private String class_desc; + + @ApiModelProperty(value = "上级分类标识") + private String parent_class_id; + + @ApiModelProperty(value = "子级数目") + private Integer sub_count; + + @ApiModelProperty(value = "是否叶子") + private Boolean is_leaf; + + @ApiModelProperty(value = "是否可修改") + private Boolean is_modify; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "级别") + private String class_level; + + @ApiModelProperty(value = "外部标识") + private String ext_id; + + @ApiModelProperty(value = "外部上级标识") + private String ext_parent_id; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @TableField(exist = false) + private Boolean hasChildren; + + @TableField(exist = false) + private String id; + + @TableField(exist = false) + private String label; + @TableField(exist = false) + private Boolean leaf; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.class new file mode 100644 index 0000000..a0a4f88 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java new file mode 100644 index 0000000..656069b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.classification.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public interface MdBaseClassstandardMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml new file mode 100644 index 0000000..fc841cc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dao/mapper/MdBaseClassstandardMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.class new file mode 100644 index 0000000..0b5a6bd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java new file mode 100644 index 0000000..09830e6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardDto.java @@ -0,0 +1,73 @@ +package org.nl.wms.database.classification.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +public class MdBaseClassstandardDto implements Serializable { + + /** 分类标识 */ + private String class_id; + + /** 分类编码 */ + private String class_code; + + /** 分类名称 */ + private String class_name; + + /** 分类简要描述 */ + private String class_desc; + + /** 上级分类标识 */ + private String parent_class_id; + + /** 子级数目 */ + private String sub_count; + + /** 是否叶子 */ + private Boolean is_leaf; + + /** 是否可修改 */ + private Boolean is_modify; + + /** 是否删除 */ + private Boolean is_delete; + + /** 级别 */ + private String class_level; + + /** 外部标识 */ + private String ext_id; + + /** 外部上级标识 */ + private String ext_parent_id; + + /** 车间编码 */ + private String workshop_code; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.class new file mode 100644 index 0000000..eef9ce7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java new file mode 100644 index 0000000..bbf449a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.classification.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public class MdBaseClassstandardQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees$MdBaseClassstandardTreesBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees$MdBaseClassstandardTreesBuilder.class new file mode 100644 index 0000000..3d9a449 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees$MdBaseClassstandardTreesBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.class new file mode 100644 index 0000000..2090bbb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java new file mode 100644 index 0000000..c5f76cc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/dto/MdBaseClassstandardTrees.java @@ -0,0 +1,26 @@ +package org.nl.wms.database.classification.service.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; + +import java.io.Serializable; +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/12 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MdBaseClassstandardTrees extends MdBaseClassstandard implements Serializable { + + @TableField(exist = false) + private List children; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.class new file mode 100644 index 0000000..b2a15ef Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java new file mode 100644 index 0000000..ef38fe9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/classification/service/impl/MdBaseClassstandardServiceImpl.java @@ -0,0 +1,249 @@ +package org.nl.wms.database.classification.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.database.classification.service.IMdBaseClassstandardService; +import org.nl.wms.database.classification.service.dao.MdBaseClassstandard; +import org.nl.wms.database.classification.service.dao.mapper.MdBaseClassstandardMapper; +import org.nl.wms.database.classification.service.dto.MdBaseClassstandardTrees; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author lyd + * @description 服务实现 + * @date 2023-05-11 + **/ +@Slf4j +@Service +public class MdBaseClassstandardServiceImpl extends ServiceImpl implements IMdBaseClassstandardService { + + @Autowired + private MdBaseClassstandardMapper mdBaseClassstandardMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String class_code = ObjectUtil.isNotEmpty(whereJson.get("class_code")) + ? whereJson.get("class_code").toString() + : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(class_code), MdBaseClassstandard::getClass_code, class_code) + .eq(MdBaseClassstandard::getIs_delete, false) + .eq(MdBaseClassstandard::getParent_class_id, "0") + .or(la -> la.isNull(MdBaseClassstandard::getParent_class_id)); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseClassstandardMapper.selectPage(pages, lam); + pages.getRecords().forEach(classstandard -> { + classstandard.setIs_leaf(!(classstandard.getSub_count() > 0)); + classstandard.setHasChildren(classstandard.getSub_count() > 0); + }); + return pages; + } + + @Override + @Transactional + public void create(MdBaseClassstandard entity) { + // 判断是否存在 + MdBaseClassstandard mdBaseClassstandard = mdBaseClassstandardMapper + .selectOne(new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getClass_code, entity.getClass_code()) + .eq(MdBaseClassstandard::getIs_delete, false)); + if (ObjectUtil.isNotEmpty(mdBaseClassstandard) && !mdBaseClassstandard.getClass_id().equals(entity.getClass_id())) { + throw new BadRequestException(LangProcess.msg("universal_exist_class")); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setClass_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + entity.setIs_leaf(true); + entity.setClass_level(Math.ceil(entity.getClass_code().length() / 2.0) + ""); + entity.setSub_count(0); + mdBaseClassstandardMapper.insert(entity); + // 更新节点 + if (ObjectUtil.isNotEmpty(entity.getParent_class_id()) && !entity.getParent_class_id().equals("0")) { + updateSubCnt(entity.getParent_class_id()); + } + } + + private void updateSubCnt(String parentClassId) { + MdBaseClassstandard classObject = mdBaseClassstandardMapper.selectById(parentClassId); + if (ObjectUtil.isEmpty(classObject)) return; + List classList = mdBaseClassstandardMapper + .selectList(new LambdaQueryWrapper().eq(MdBaseClassstandard::getParent_class_id, parentClassId)); + int size = classList.size(); + classObject.setSub_count(size); + classObject.setIs_leaf(size > 0); + mdBaseClassstandardMapper.updateById(classObject); + } + + @Override + public void update(MdBaseClassstandard entity) { + MdBaseClassstandard dto = mdBaseClassstandardMapper.selectById(entity.getClass_id()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + // 判断是否存在 + MdBaseClassstandard mdBaseClassstandard = mdBaseClassstandardMapper + .selectOne(new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getClass_code, entity.getClass_code()) + .eq(MdBaseClassstandard::getIs_delete, false)); + if (ObjectUtil.isNotEmpty(mdBaseClassstandard) && !mdBaseClassstandard.getClass_id().equals(entity.getClass_id())) { + throw new BadRequestException(LangProcess.msg("universal_exist_class")); + } + // 查询原来的父id + String oldPid = dto.getParent_class_id(); + String newPid = entity.getParent_class_id(); + if (entity.getParent_class_id() != null && entity.getClass_id().equals(entity.getParent_class_id())) { + throw new BadRequestException(LangProcess.msg("universal_superior")); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + // 更新 + mdBaseClassstandardMapper.updateById(entity); + //更新父节点中子节点数目 + updateSubCnt(oldPid); + updateSubCnt(newPid); + } + + @Override + public void deleteAll(List ids) { + // 递归删除子类 + for (String id : ids) { + // 获取元素体 + MdBaseClassstandard classstandard = mdBaseClassstandardMapper.selectById(id); + mdBaseClassstandardMapper.deleteById(classstandard.getClass_id()); + // 找出所有当前节点的子节点 + List baseClassstandardList = mdBaseClassstandardMapper.selectList( + new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getParent_class_id, classstandard.getClass_id())); + if (baseClassstandardList.size() > 0) { + List collect = baseClassstandardList.stream() + .map(md -> md.getClass_id()) + .collect(Collectors.toList()); + deleteAll(collect); + } + updateSubCnt(classstandard.getParent_class_id()); + } + } + + @Override + public List getClassName() { + return mdBaseClassstandardMapper.selectList(new LambdaQueryWrapper() + .isNull(MdBaseClassstandard::getParent_class_id) + .or() + .eq(MdBaseClassstandard::getParent_class_id, "0") + .eq(MdBaseClassstandard::getIs_delete, false)); + } + + @Override + public List loadClass(Map whereJson) { + String pid = ObjectUtil.isNotEmpty(whereJson.get("pid")) ? whereJson.get("pid").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(pid), MdBaseClassstandard::getParent_class_id, pid) + .or(ObjectUtil.isEmpty(pid), la -> la.isNull(MdBaseClassstandard::getParent_class_id) + .or() + .eq(MdBaseClassstandard::getParent_class_id, "0")) + .eq(MdBaseClassstandard::getIs_delete, false); + List classstandardList = mdBaseClassstandardMapper.selectList(lam); + classstandardList.forEach(classstandard -> { + classstandard.setHasChildren(classstandard.getSub_count() > 0); + classstandard.setLeaf(!(classstandard.getSub_count() > 0)); + classstandard.setId(classstandard.getClass_id()); + classstandard.setLabel(classstandard.getClass_name()); + }); + return classstandardList; + } + + /** + * 递归获取树形数据,从子级到父级以及最高级 + * + * @param classstandard + * @param res + * @return + */ + @Override + public ArrayList getSuperior(MdBaseClassstandard classstandard, ArrayList res) { + if (ObjectUtil.isEmpty(classstandard.getParent_class_id()) || classstandard.getParent_class_id().equals("0")) { + // 父类id为空或者是0就是顶级类别 + List classstandardList = mdBaseClassstandardMapper + .selectList(new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getIs_delete, false) + .eq(MdBaseClassstandard::getParent_class_id, "0") + .or(la -> la.isNull(MdBaseClassstandard::getParent_class_id))); + res.addAll(classstandardList); + return res; + } + // 递归寻找同级 + List mdBaseClassstandards = mdBaseClassstandardMapper.selectList( + new LambdaQueryWrapper() + .eq(MdBaseClassstandard::getIs_delete, false) + .eq(MdBaseClassstandard::getParent_class_id, classstandard.getParent_class_id())); + res.addAll(mdBaseClassstandards); + return getSuperior(mdBaseClassstandardMapper.selectById(classstandard.getParent_class_id()), res); + } + + @Override + public List buildTree(ArrayList list) { + // 将获取的数据初始化状态 + list.forEach(classstandard -> { + classstandard.setId(classstandard.getClass_id()); + classstandard.setLabel(classstandard.getClass_name()); + classstandard.setLeaf(!(classstandard.getSub_count() > 0)); + classstandard.setHasChildren(classstandard.getSub_count() > 0); + }); + List trees = new ArrayList<>(); // 待返回数据 + for (MdBaseClassstandard mdBaseClassstandard : list) { + // 筛选父类的值 + if (ObjectUtil.isEmpty(mdBaseClassstandard.getParent_class_id()) + || mdBaseClassstandard.getParent_class_id().equals("0")) { + // collect:获取当前对象的所有子级 + List collect = list.stream().filter(t -> t.getParent_class_id() + .equals(mdBaseClassstandard.getClass_id())).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(collect)) { + // 设置参数 + collect.forEach(classstandard -> { + classstandard.setId(classstandard.getClass_id()); + classstandard.setLabel(classstandard.getClass_name()); + classstandard.setHasChildren(classstandard.getSub_count() > 0); + }); + MdBaseClassstandardTrees tObj = new MdBaseClassstandardTrees(); + // 赋值一份实体,可以避免vue-tree拿到children属性显示展开图标 + BeanUtils.copyProperties(mdBaseClassstandard, tObj); + tObj.setChildren(collect); + trees.add(tObj); + } else { + trees.add(mdBaseClassstandard); + } + } + } + return trees; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/controller/MdBaseMaterialController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/controller/MdBaseMaterialController.class new file mode 100644 index 0000000..ffc4b51 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/controller/MdBaseMaterialController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/controller/MdBaseMaterialController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/controller/MdBaseMaterialController.java new file mode 100644 index 0000000..a98a589 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/controller/MdBaseMaterialController.java @@ -0,0 +1,66 @@ +package org.nl.wms.database.material.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-05 +**/ +@Slf4j +@RestController +@Api(tags = "物料基础信息管理") +@RequestMapping("/api/mdBaseMaterial") +public class MdBaseMaterialController { + + @Autowired + private IMdBaseMaterialService mdBaseMaterialService; + + @GetMapping + @Log("查询物料基础信息") + @ApiOperation("查询物料基础信息") + //@SaCheckPermission("@el.check('mdBaseMaterial:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseMaterialService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增物料基础信息") + @ApiOperation("新增物料基础信息") + //@SaCheckPermission("@el.check('mdBaseMaterial:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseMaterial entity){ + mdBaseMaterialService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改物料基础信息") + @ApiOperation("修改物料基础信息") + //@SaCheckPermission("@el.check('mdBaseMaterial:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseMaterial entity){ + mdBaseMaterialService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除物料基础信息") + @ApiOperation("删除物料基础信息") + //@SaCheckPermission("@el.check('mdBaseMaterial:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdBaseMaterialService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/IMdBaseMaterialService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/IMdBaseMaterialService.class new file mode 100644 index 0000000..f1c0537 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/IMdBaseMaterialService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/IMdBaseMaterialService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/IMdBaseMaterialService.java new file mode 100644 index 0000000..05a4f3c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/IMdBaseMaterialService.java @@ -0,0 +1,44 @@ +package org.nl.wms.database.material.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-05 +**/ +public interface IMdBaseMaterialService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseMaterial entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseMaterial entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/MdBaseMaterial.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/MdBaseMaterial.class new file mode 100644 index 0000000..d3410f3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/MdBaseMaterial.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/MdBaseMaterial.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/MdBaseMaterial.java new file mode 100644 index 0000000..7ec52ab --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/MdBaseMaterial.java @@ -0,0 +1,77 @@ +package org.nl.wms.database.material.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author lyd +* @date 2023-05-05 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_material") +public class MdBaseMaterial implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "material_id", type = IdType.NONE) + @ApiModelProperty(value = "物料标识") + private String material_id; + + @ApiModelProperty(value = "物料编码") + private String material_code; + + @ApiModelProperty(value = "物料名称 ") + private String material_name; + + @ApiModelProperty(value = "物料规格") + private String material_spec; + + @ApiModelProperty(value = "物料分类标识") + private String class_id; + + @ApiModelProperty(value = "静置时间(分钟)") + private BigDecimal standing_time; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "是否启用") + private Boolean is_used; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @ApiModelProperty(value = "外部标识") + private String ext_id; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.class new file mode 100644 index 0000000..d6e1996 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.java new file mode 100644 index 0000000..f7eaf33 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.material.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; + +/** +* @author lyd +* @date 2023-05-05 +**/ +public interface MdBaseMaterialMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.xml new file mode 100644 index 0000000..07c96b6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dao/mapper/MdBaseMaterialMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.class new file mode 100644 index 0000000..2f44fd1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java new file mode 100644 index 0000000..56354af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialDto.java @@ -0,0 +1,65 @@ +package org.nl.wms.database.material.service.dto; + +import lombok.Data; +import java.io.Serializable; +import java.math.BigDecimal; + +/** +* @description / +* @author lyd +* @date 2023-05-05 +**/ +@Data +public class MdBaseMaterialDto implements Serializable { + + /** 物料标识 */ + private String material_id; + + /** 物料编码 */ + private String material_code; + + /** 物料名称 */ + private String material_name; + + /** 物料规格 */ + private String material_spec; + + /** 物料分类标识 */ + private String class_id; + + /** 静置时间(分钟) */ + private BigDecimal standing_time; + + /** 车间编码 */ + private String workshop_code; + + /** 备注 */ + private String remark; + + /** 是否启用 */ + private Integer is_used; + + /** 是否删除 */ + private Integer is_delete; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; + + /** 外部标识 */ + private String ext_id; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialQuery.class new file mode 100644 index 0000000..f14ee42 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialQuery.java new file mode 100644 index 0000000..2ce57b2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/dto/MdBaseMaterialQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.material.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; + +/** +* @author lyd +* @date 2023-05-05 +**/ +public class MdBaseMaterialQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.class new file mode 100644 index 0000000..2078035 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java new file mode 100644 index 0000000..1fd7afa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/material/service/impl/MdBaseMaterialServiceImpl.java @@ -0,0 +1,90 @@ +package org.nl.wms.database.material.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.database.material.service.dao.mapper.MdBaseMaterialMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; + + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-05 +**/ +@Slf4j +@Service +public class MdBaseMaterialServiceImpl extends ServiceImpl implements IMdBaseMaterialService { + + @Autowired + private MdBaseMaterialMapper mdBaseMaterialMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) ? whereJson.get("blurry").toString() : null; + Boolean is_used = ObjectUtil.isNotEmpty(whereJson.get("is_used")) ? Boolean.valueOf(whereJson.get("is_used").toString()) : null; + String workshop_code = ObjectUtil.isNotEmpty(whereJson.get("workshop_code")) ? whereJson.get("workshop_code").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(blurry), MdBaseMaterial::getMaterial_code, blurry) + .or(ObjectUtil.isNotEmpty(blurry), l -> l.like(ObjectUtil.isNotEmpty(blurry), MdBaseMaterial::getMaterial_name, blurry)) + .eq(ObjectUtil.isNotEmpty(is_used), MdBaseMaterial::getIs_used, is_used) + .eq(ObjectUtil.isNotEmpty(workshop_code), MdBaseMaterial::getWorkshop_code, workshop_code); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseMaterialMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(MdBaseMaterial entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setMaterial_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + mdBaseMaterialMapper.insert(entity); + } + + @Override + public void update(MdBaseMaterial entity) { + MdBaseMaterial dto = mdBaseMaterialMapper.selectById(entity.getMaterial_id()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + mdBaseMaterialMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + mdBaseMaterialMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.class new file mode 100644 index 0000000..67b40de Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java new file mode 100644 index 0000000..64271da --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/controller/MdBaseVehicleController.java @@ -0,0 +1,66 @@ +package org.nl.wms.database.vehicle.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-11 +**/ +@Slf4j +@RestController +@Api(tags = "载具维护管理") +@RequestMapping("/api/mdBaseVehicle") +public class MdBaseVehicleController { + + @Autowired + private IMdBaseVehicleService mdBaseVehicleService; + + @GetMapping + @Log("查询载具维护") + @ApiOperation("查询载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseVehicleService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增载具维护") + @ApiOperation("新增载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseVehicle entity){ + mdBaseVehicleService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改载具维护") + @ApiOperation("修改载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseVehicle entity){ + mdBaseVehicleService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除载具维护") + @ApiOperation("删除载具维护") + //@SaCheckPermission("@el.check('mdBaseVehicle:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdBaseVehicleService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.class new file mode 100644 index 0000000..0e30b3b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java new file mode 100644 index 0000000..1444e28 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/IMdBaseVehicleService.java @@ -0,0 +1,43 @@ +package org.nl.wms.database.vehicle.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-11 +**/ +public interface IMdBaseVehicleService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseVehicle entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseVehicle entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.class new file mode 100644 index 0000000..d29c17c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java new file mode 100644 index 0000000..65ef1b8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/MdBaseVehicle.java @@ -0,0 +1,80 @@ +package org.nl.wms.database.vehicle.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_vehicle") +public class MdBaseVehicle implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "vehicle_code", type = IdType.NONE) + @ApiModelProperty(value = "载具编码") + private String vehicle_code; + + @ApiModelProperty(value = "载具名称") + private String vehicle_name; + + @ApiModelProperty(value = "载具类型") + private String vehicle_type; + + @ApiModelProperty(value = "一维码") + private String one_code; + + @ApiModelProperty(value = "二维码") + private String two_code; + + @ApiModelProperty(value = "RFID编码") + private String rfid_code; + + @ApiModelProperty(value = "载具宽度") + private BigDecimal vehicle_width; + + @ApiModelProperty(value = "载具长度") + private BigDecimal vehicle_long; + + @ApiModelProperty(value = "载具高度") + private BigDecimal vehicle_height; + + @ApiModelProperty(value = "载具超仓位类型") + private String overstruct_type; + + @ApiModelProperty(value = "占仓位数") + private BigDecimal occupystruct_qty; + + @ApiModelProperty(value = "外部标识") + private String ext_id; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.class new file mode 100644 index 0000000..75a8b75 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java new file mode 100644 index 0000000..9dc21e3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.vehicle.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public interface MdBaseVehicleMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml new file mode 100644 index 0000000..e51e86f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dao/mapper/MdBaseVehicleMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.class new file mode 100644 index 0000000..1f93b3a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java new file mode 100644 index 0000000..737739f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleDto.java @@ -0,0 +1,68 @@ +package org.nl.wms.database.vehicle.service.dto; + +import java.math.BigDecimal; +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-11 +**/ +@Data +public class MdBaseVehicleDto implements Serializable { + + /** 载具编码 */ + private String vehicle_code; + + /** 载具名称 */ + private String vehicle_name; + + /** 载具类型 */ + private String vehicle_type; + + /** 一维码 */ + private String one_code; + + /** 二维码 */ + private String two_code; + + /** RFID编码 */ + private String rfid_code; + + /** 载具宽度 */ + private BigDecimal vehicle_width; + + /** 载具长度 */ + private BigDecimal vehicle_long; + + /** 载具高度 */ + private BigDecimal vehicle_height; + + /** 载具超仓位类型 */ + private String overstruct_type; + + /** 占仓位数 */ + private BigDecimal occupystruct_qty; + + /** 外部标识 */ + private String ext_id; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.class new file mode 100644 index 0000000..9e6a239 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java new file mode 100644 index 0000000..7048638 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/dto/MdBaseVehicleQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.vehicle.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; + +/** +* @author lyd +* @date 2023-05-11 +**/ +public class MdBaseVehicleQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.class new file mode 100644 index 0000000..7f0fa4c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java new file mode 100644 index 0000000..3cad788 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/vehicle/service/impl/MdBaseVehicleServiceImpl.java @@ -0,0 +1,86 @@ +package org.nl.wms.database.vehicle.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; +import org.nl.wms.database.vehicle.service.dao.mapper.MdBaseVehicleMapper; +import org.nl.wms.database.vehicle.service.dao.MdBaseVehicle; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-11 +**/ +@Slf4j +@Service +public class MdBaseVehicleServiceImpl extends ServiceImpl implements IMdBaseVehicleService { + + @Autowired + private MdBaseVehicleMapper mdBaseVehicleMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + String vehicle_type = ObjectUtil.isNotEmpty(whereJson.get("vehicle_type")) ? whereJson.get("vehicle_type").toString() : null; + String vehicle_code = ObjectUtil.isNotEmpty(whereJson.get("vehicle_code")) ? whereJson.get("vehicle_code").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(vehicle_type), MdBaseVehicle::getVehicle_type, vehicle_type) + .like(ObjectUtil.isNotEmpty(vehicle_code), MdBaseVehicle::getVehicle_code, vehicle_code); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseVehicleMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(MdBaseVehicle entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setVehicle_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + mdBaseVehicleMapper.insert(entity); + } + + @Override + public void update(MdBaseVehicle entity) { + MdBaseVehicle dto = mdBaseVehicleMapper.selectById(entity.getVehicle_code()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + mdBaseVehicleMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + mdBaseVehicleMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.class new file mode 100644 index 0000000..f61830a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java new file mode 100644 index 0000000..1c63c37 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/controller/MdBaseWorkshopController.java @@ -0,0 +1,74 @@ +package org.nl.wms.database.workshop.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.workshop.service.IMdBaseWorkshopService; +import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-05 +**/ +@Slf4j +@RestController +@Api(tags = "车间基础信息管理") +@RequestMapping("/api/mdBaseWorkshop") +public class MdBaseWorkshopController { + + @Autowired + private IMdBaseWorkshopService mdBaseWorkshopService; + + @GetMapping + @Log("查询车间基础信息") + @ApiOperation("查询车间基础信息") + //@SaCheckPermission("@el.check('mdBaseWorkshop:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseWorkshopService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增车间基础信息") + @ApiOperation("新增车间基础信息") + //@SaCheckPermission("@el.check('mdBaseWorkshop:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseWorkshop entity){ + mdBaseWorkshopService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改车间基础信息") + @ApiOperation("修改车间基础信息") + //@SaCheckPermission("@el.check('mdBaseWorkshop:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseWorkshop entity){ + mdBaseWorkshopService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除车间基础信息") + @ApiOperation("删除车间基础信息") + //@SaCheckPermission("@el.check('mdBaseWorkshop:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdBaseWorkshopService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getWorkShopList") + @Log("获取车间下拉框") + @ApiOperation("获取车间下拉框") + //@SaCheckPermission("@el.check('mdBaseWorkshop:list')") + public ResponseEntity getWorkShopList(){ + return new ResponseEntity<>(mdBaseWorkshopService.getWorkShopList(),HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.class new file mode 100644 index 0000000..8790712 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java new file mode 100644 index 0000000..be158c6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/IMdBaseWorkshopService.java @@ -0,0 +1,50 @@ +package org.nl.wms.database.workshop.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-05 +**/ +public interface IMdBaseWorkshopService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseWorkshop entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseWorkshop entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 获取车间下拉框 + * @return + */ + List getWorkShopList(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.class new file mode 100644 index 0000000..c297fc4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java new file mode 100644 index 0000000..37a487a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/MdBaseWorkshop.java @@ -0,0 +1,57 @@ +package org.nl.wms.database.workshop.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Table; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-05 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_workshop") +public class MdBaseWorkshop implements Serializable { + private static final long serialVersionUID = 1L; + @TableId(value = "workshop_code", type = IdType.NONE) + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "车间名称 ") + private String workshop_name; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "是否启用") + private Boolean is_used; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.class new file mode 100644 index 0000000..2a013bb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.java new file mode 100644 index 0000000..8b4819d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.workshop.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; + +/** +* @author lyd +* @date 2023-05-05 +**/ +public interface MdBaseWorkshopMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.xml new file mode 100644 index 0000000..e8e0f0d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dao/mapper/MdBaseWorkshopMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopDto.class new file mode 100644 index 0000000..ee0a8ce Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopDto.java new file mode 100644 index 0000000..c9a3178 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopDto.java @@ -0,0 +1,46 @@ +package org.nl.wms.database.workshop.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-05 +**/ +@Data +public class MdBaseWorkshopDto implements Serializable { + + /** 车间编码 */ + private String workshop_code; + + /** 车间名称 */ + private String workshop_name; + + /** 备注 */ + 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_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopQuery.class new file mode 100644 index 0000000..2696310 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopQuery.java new file mode 100644 index 0000000..a05b258 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/dto/MdBaseWorkshopQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.workshop.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; + +/** +* @author lyd +* @date 2023-05-05 +**/ +public class MdBaseWorkshopQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.class new file mode 100644 index 0000000..627038c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java new file mode 100644 index 0000000..aae4573 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/database/workshop/service/impl/MdBaseWorkshopServiceImpl.java @@ -0,0 +1,82 @@ +package org.nl.wms.database.workshop.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.database.workshop.service.IMdBaseWorkshopService; +import org.nl.wms.database.workshop.service.dao.mapper.MdBaseWorkshopMapper; +import org.nl.wms.database.workshop.service.dao.MdBaseWorkshop; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Set; + + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-05 +**/ +@Slf4j +@Service +public class MdBaseWorkshopServiceImpl extends ServiceImpl implements IMdBaseWorkshopService { + + @Autowired + private MdBaseWorkshopMapper mdBaseWorkshopMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseWorkshopMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(MdBaseWorkshop entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + mdBaseWorkshopMapper.insert(entity); + } + + @Override + public void update(MdBaseWorkshop entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + mdBaseWorkshopMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + mdBaseWorkshopMapper.deleteBatchIds(ids); + } + + @Override + public List getWorkShopList() { + return mdBaseWorkshopMapper.selectList(new LambdaQueryWrapper() + .eq(MdBaseWorkshop::getIs_used, true) + .eq(MdBaseWorkshop::getIs_delete, false)); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/controller/AcsToWmsController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/controller/AcsToWmsController.class new file mode 100644 index 0000000..eeff448 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/controller/AcsToWmsController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/controller/AcsToWmsController.java new file mode 100644 index 0000000..b546037 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/controller/AcsToWmsController.java @@ -0,0 +1,73 @@ +package org.nl.wms.ext.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.springframework.beans.factory.annotation.Autowired; +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: lyd + * @Description: acs请求lms接口 + * @Date: 2023/6/16 + */ +@RestController +@Api(tags = "acs请求lms") +@RequestMapping("/api/wms/task") +@Slf4j +@SaIgnore +public class AcsToWmsController { + + @Autowired + private AcsToWmsService acsToWmsService; + + @PostMapping("/apply") + @Log("ACS向LMS申请任务") + @ApiOperation("ACS向LMS申请任务") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity apply(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.acsApply(param), HttpStatus.OK); + } + + @PostMapping("/status") + @Log("任务状态同步") + @ApiOperation("任务状态同步") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity status(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.status(param), HttpStatus.OK); + } + + @PostMapping("/feedbackState") + @Log("ACS系统反馈AGV取放货状态") + @ApiOperation("ACS系统反馈AGV取放货状态") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity feedbackState(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.feedbackState(param), HttpStatus.OK); + } + + @PostMapping("/notify") + @Log("acs通知wms") + @ApiOperation("acs通知wms") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity notify(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.notify(param), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/AcsToWmsService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/AcsToWmsService.class new file mode 100644 index 0000000..602c56e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/AcsToWmsService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/AcsToWmsService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/AcsToWmsService.java new file mode 100644 index 0000000..26caca7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/AcsToWmsService.java @@ -0,0 +1,27 @@ +package org.nl.wms.ext.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.ext.service.dto.to.BaseResponse; + +/** + * @Author: lyd + * @Description: acs请求wms + * @Date: 2023/6/26 + */ +public interface AcsToWmsService { + /** ACS请求接口 */ + BaseResponse acsApply(JSONObject param); + + /** 手持请求接口 */ + BaseResponse pdaApply(JSONObject param); + + /** 任务反馈 */ + BaseResponse status(JSONObject param); + + /** 任务阶段反馈最新点位 */ + BaseResponse feedbackState(JSONObject param); + + /** acs通知wms */ + BaseResponse notify(JSONObject param); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/WmsToAcsService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/WmsToAcsService.class new file mode 100644 index 0000000..919907d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/WmsToAcsService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/WmsToAcsService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/WmsToAcsService.java new file mode 100644 index 0000000..73d3c8d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/WmsToAcsService.java @@ -0,0 +1,26 @@ +package org.nl.wms.ext.service; + +import com.alibaba.fastjson.JSONObject; +import org.apache.poi.ss.formula.functions.T; +import org.nl.wms.ext.service.dto.ResultForAcs; +import org.nl.wms.ext.service.dto.to.wms.AcsResponse; +import org.nl.wms.sch.task_manage.AcsTaskDto; + +import java.util.List; + +/** + * @Author: lyd + * @Description: Wms请求Acs,统一管理与ACS对接的接口 + * @Date: 2023/6/30 + */ +public interface WmsToAcsService { + + /** + * 下发指令通知 + * 统一在这里维护 + * @param map: 任务链表 + * @return + */ + AcsResponse notifyAcs(JSONObject map); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/PalletizeDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/PalletizeDto.class new file mode 100644 index 0000000..804834e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/PalletizeDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/PalletizeDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/PalletizeDto.java new file mode 100644 index 0000000..6600787 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/PalletizeDto.java @@ -0,0 +1,120 @@ +package org.nl.wms.ext.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 垛型参数 + * @Date: 2023/7/18 + */ +@Data +public class PalletizeDto { + /** 产品编号 */ + private String product_code; + /** A长边 */ + private String AlongSide; + /** B短边 */ + private String BshortSide; + /** H梯形高 */ + private String Htrapezoidal; + /** W厚度 */ + private String Wthickness; + /** 当前垛盘数 */ + private String tray_qty; + /** 垛盘高度 */ + private String tray_high; + /** 垛型类别 */ + private String crib_category; + /** 码垛X1行 */ + private String palletX1_line; + /** 码垛Y1列 */ + private String palletY1_row; + /** 码垛A1角度 */ + private String palletA1_angle; + /** 码垛X2行 */ + private String palletX2_line; + /** 码垛Y2列 */ + private String palletY2_row; + /** 码垛A2角度 */ + private String palletA2_angle; + /** 码垛X3行 */ + private String palletX3_line; + /** 码垛Y3列 */ + private String palletY3_row; + /** 码垛A3角度 */ + private String palletA3_angle; + /** 压垛X1行 */ + private String pressCribX1_line; + /** 压垛Y1列 */ + private String pressCribY1_row; + /** 压垛A1角度 */ + private String pressCribA1_angle; + /** 压垛X2行 */ + private String pressCribX2_line; + /** 压垛Y2列 */ + private String pressCribY2_row; + /** 压垛A2角度 */ + private String pressCribA2_angle; + /** 压垛X3行 */ + private String pressCribX3_line; + /** 压垛Y3列 */ + private String pressCribY3_row; + /** 压垛A3角度 */ + private String pressCribA3_angle; + /** Z轴偏移 */ + private String Zoffset; + /** 码垛层数 */ + private String pallet_layerQty; + /** 压垛层数 */ + private String pressCrib_layerQty; + /** 码层X1间隔 */ + private String codeLayerX1_interval; + /** 码层Y1间隔 */ + private String codeLayerY1_interval; + /** 码层X2间隔 */ + private String codeLayerX2_interval; + /** 码层Y2间隔 */ + private String codeLayerY2_interval; + /** 码层X3间隔 */ + private String codeLayerX3_interval; + /** 码层Y3间隔 */ + private String codeLayerY3_interval; + /** 码层X1偏移 */ + private String codeLayerX1_offset; + /** 码层Y1偏移 */ + private String codeLayerY1_offset; + /** 码层X2偏移 */ + private String codeLayerX2_offset; + /** 码层Y2偏移 */ + private String codeLayerY2_offset; + /** 码层X3偏移 */ + private String codeLayerX3_offset; + /** 码层Y3偏移 */ + private String codeLayerY3_offset; + /** 压层X1间隔 */ + private String pressLayerX1_interval; + /** 压层Y1间隔 */ + private String pressLayerY1_interval; + /** 压层X2间隔 */ + private String pressLayerX2_interval; + /** 压层Y2间隔 */ + private String pressLayerY2_interval; + /** 压层X3间隔 */ + private String pressLayerX3_interval; + /** 压层Y3间隔 */ + private String pressLayerY3_interval; + /** 压层X1偏移 */ + private String pressLayerX1_offset; + /** 压层Y1偏移 */ + private String pressLayerY1_offset; + /** 压层X2偏移 */ + private String pressLayerX2_offset; + /** 压层Y2偏移 */ + private String pressLayerY2_offset; + /** 压层X3偏移 */ + private String pressLayerX3_offset; + /** 压层Y3偏移 */ + private String pressLayerY3_offset; + /** 工具坐标 */ + private String tool_coordinate; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/Resp.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/Resp.class new file mode 100644 index 0000000..3458173 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/Resp.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/Resp.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/Resp.java new file mode 100644 index 0000000..03e3deb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/Resp.java @@ -0,0 +1,32 @@ +package org.nl.wms.ext.service.dto; + +import lombok.Data; + +/** + * 调用立库接口统一返回参数类 + * + * @author: geng by + * @createDate: 2022/11/24 + */ +@Data +public class Resp { + /** + * 成功返回true,失败返回false + */ + public String result; + + /** + * 错误码(0表示成功)1代表入库目的位置有货,其他更多情况待定 + */ + public String code; + + /** + * 错误信息,如果成功则为null + */ + public String comment; + + /** + * 报文携带的数据 + */ + public T data; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/ResultForAcs.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/ResultForAcs.class new file mode 100644 index 0000000..7b80c57 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/ResultForAcs.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/ResultForAcs.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/ResultForAcs.java new file mode 100644 index 0000000..ad0a925 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/ResultForAcs.java @@ -0,0 +1,46 @@ +package org.nl.wms.ext.service.dto; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; + +/** + * @Author: lyd + * @Description: 统一接口返回 - 请求ACS返回的数据类型 - 以前不做处理的类型 + * @Date: 2023/7/28 + */ +@Data +public class ResultForAcs { + private int status; + private String message; + private String timestamp; + private JSONObject data; + private JSONArray errArr; + + public static ResultForAcs requestRefuse(String message) { + ResultForAcs result = new ResultForAcs(); + result.setStatus(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setTimestamp(DateUtil.now()); + return result; + } + + public static ResultForAcs requestOk() { + ResultForAcs result = new ResultForAcs(); + result.setStatus(HttpStatus.HTTP_OK); + result.setMessage("请求成功"); + result.setTimestamp(DateUtil.now()); + return result; + } + + public static ResultForAcs requestOk(String message, JSONObject data) { + ResultForAcs result = new ResultForAcs(); + result.setStatus(HttpStatus.HTTP_OK); + result.setMessage(message); + result.setTimestamp(DateUtil.now()); + result.setData(data); + return result; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/SignalData.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/SignalData.class new file mode 100644 index 0000000..7712364 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/SignalData.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/SignalData.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/SignalData.java new file mode 100644 index 0000000..2e5f72a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/SignalData.java @@ -0,0 +1,24 @@ +package org.nl.wms.ext.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 信号:mode:'1', move:'0'之类 + * @Date: 2023/7/26 + */ +@Data +public class SignalData { + + private String code; // to_command + + private String value; // 1 + + public static SignalData buildSignalData(String code, String value) { + SignalData signalData = new SignalData(); + signalData.setCode(code); + signalData.setValue(value); + return signalData; + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseRequest.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseRequest.class new file mode 100644 index 0000000..071c4c8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseRequest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseRequest.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseRequest.java new file mode 100644 index 0000000..9a2e3fe --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseRequest.java @@ -0,0 +1,59 @@ +package org.nl.wms.ext.service.dto.to; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * ACS请求基础实体 + */ +@Data +public class BaseRequest { + + /** + * 请求号:uuid 唯一,LMS需要返回对应值 + */ + private String requestNo; + + /** + * 请求时间 + */ + private String requestDate; + + /** + * 请求方法编号 + */ + private String request_medthod_code; + + /** + * 请求方法名称 + */ + private String request_medthod_name; + + /** + * 设备号 + */ + private String device_code; + + + /** + * 系统编号 + */ + private String systemCode; + + /** + * 扩展参数:砖型等 + */ + private Map parameters = new HashMap(); + + public static BaseRequest createRequest() { + BaseRequest baseRequest = new BaseRequest(); + baseRequest.setRequestNo(IdUtil.simpleUUID()); + baseRequest.setRequestDate(DateUtil.now()); + return baseRequest; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse$BaseResponseBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse$BaseResponseBuilder.class new file mode 100644 index 0000000..577475c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse$BaseResponseBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse.class new file mode 100644 index 0000000..d0be2d9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse.java new file mode 100644 index 0000000..b39b2e1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/BaseResponse.java @@ -0,0 +1,97 @@ +package org.nl.wms.ext.service.dto.to; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BaseResponse implements Serializable { + + /** + * 请求号 + */ + private String requestNo; + + /** + * 响应时间 + */ + private String responseDate; + + /** + * 结果 200成功 + */ + private int code; + + /** + * 信息 + */ + private String message; + + /** + * 扩展信息 + */ + private Map parameters = new HashMap(); + + public static BaseResponse build(String requestNo) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage("请求成功"); + response.setResponseDate(DateUtil.now()); + return response; + } + + public static BaseResponse responseOk(String requestNo) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage("请求成功"); + response.setResponseDate(DateUtil.now()); + return response; + } + public static BaseResponse responseOk(String requestNo, String message) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } + public static BaseResponse responseOk(String requestNo, HashMap parameters) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage("请求成功"); + response.setResponseDate(DateUtil.now()); + response.setParameters(parameters); + return response; + } + + public static BaseResponse responseError(String requestNo, String message) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_BAD_REQUEST); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } + public static BaseResponse responseError(String requestNo, int code, String message) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(code); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.class new file mode 100644 index 0000000..65bcd0b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.java new file mode 100644 index 0000000..12d7790 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/ApplyTaskResponse.java @@ -0,0 +1,50 @@ +package org.nl.wms.ext.service.dto.to.acs; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpStatus; +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseResponse; + +@Data +public class ApplyTaskResponse extends BaseResponse { + /** + * 是否静置完成 1完成 + */ + private String is_standing_finish; + + /** + * 是否优先包装 + */ + private String is_package; + private String mix_number; + private String weight; + private String label_message; + + public static ApplyTaskResponse responseOk(String requestNo) { + ApplyTaskResponse response = new ApplyTaskResponse(); + response.setRequestNo(requestNo); + response.setMessage("任务申请成功"); + response.setResponseDate(DateUtil.now()); + response.setCode(HttpStatus.HTTP_OK); + return response; + } + + public static ApplyTaskResponse responseOk(String requestNo, String message) { + ApplyTaskResponse response = new ApplyTaskResponse(); + response.setRequestNo(requestNo); + response.setMessage("任务申请成功"); + response.setResponseDate(DateUtil.now()); + response.setCode(HttpStatus.HTTP_OK); + response.setLabel_message(message); + return response; + } + public static ApplyTaskResponse responseError(String requestNo, String message) { + ApplyTaskResponse response = new ApplyTaskResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_BAD_REQUEST); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.class new file mode 100644 index 0000000..fc77df1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.java new file mode 100644 index 0000000..fc00964 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/CancelTaskRequest.java @@ -0,0 +1,37 @@ +package org.nl.wms.ext.service.dto.to.acs; + +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseRequest; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 取消任务请求 + * @Date: 2023/7/26 + */ +@Data +public class CancelTaskRequest extends BaseRequest { + + /** + * 任务标识 + */ + private String ext_task_id; + + /** + * 任务编号 + */ + private String task_code; + + /** + * 载具号 + */ + String vehicle_code; + + /** + * 扩展属性 + */ + Map params; + +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.class new file mode 100644 index 0000000..4bc1433 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.java new file mode 100644 index 0000000..bd7c7bc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/acs/DeviceInfoDto.java @@ -0,0 +1,13 @@ +package org.nl.wms.ext.service.dto.to.acs; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/8/4 + */ +@Data +public class DeviceInfoDto { + private String device_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/AcsResponse.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/AcsResponse.class new file mode 100644 index 0000000..535fc33 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/AcsResponse.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/AcsResponse.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/AcsResponse.java new file mode 100644 index 0000000..fc2df3c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/AcsResponse.java @@ -0,0 +1,34 @@ +package org.nl.wms.ext.service.dto.to.wms; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONArray; +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseResponse; + +/** + * @Author: lyd + * @Description: 下发acs的反馈数据*new + * @Date: 2023/7/26 + */ +@Data +public class AcsResponse extends BaseResponse { + private JSONArray errArr = new JSONArray(); + + public static AcsResponse requestRefuse(String message) { + AcsResponse result = new AcsResponse(); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setResponseDate(DateUtil.now()); + return result; + } + + public static AcsResponse requestOk() { + AcsResponse result = new AcsResponse(); + result.setCode(HttpStatus.HTTP_OK); + result.setMessage("请求成功"); + result.setResponseDate(DateUtil.now()); + return result; + } +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.class new file mode 100644 index 0000000..c6e9880 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.java new file mode 100644 index 0000000..4d2bf42 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyDeviceDto.java @@ -0,0 +1,32 @@ +package org.nl.wms.ext.service.dto.to.wms; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/8/14 + */ +@Data +public class ApplyDeviceDto { + + /** + * 设备编码 + */ + private String device_code; + + /** + * 数量 + */ + private String qty; + + /** + * 载具号 + */ + private String vehicle_code; + + /** + * 载具类型 + */ + private String vehicle_type; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.class new file mode 100644 index 0000000..0337bd6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.java new file mode 100644 index 0000000..60598cd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplySignalStatusRequest.java @@ -0,0 +1,27 @@ +package org.nl.wms.ext.service.dto.to.wms; + +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseRequest; + +/** + * @Author: lyd + * @Description: 光电信号实时反馈 + * @Date: 2023/8/10 + */ +@Data +public class ApplySignalStatusRequest extends BaseRequest { + /** + * 光电信号 0无货 1有货 + */ + private String move; + + /** + * 载具类型 + */ + private String vehicle_type; + + /** + * 是否允许 0不允许 1允许 + */ + private String action; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.class new file mode 100644 index 0000000..73dfa50 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.java new file mode 100644 index 0000000..22fda56 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/ApplyTaskRequest.java @@ -0,0 +1,47 @@ +package org.nl.wms.ext.service.dto.to.wms; + +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseRequest; + +import java.util.List; + +/** + * ACS 任务申请请求实体 + */ +@Data +public class ApplyTaskRequest extends BaseRequest { + + /** + * 载具号 + */ + private String vehicle_code; + + /** + * 载具类型 + */ + private String vehicle_type; + + /** + * 重量 + */ + private String weight; + + /** + * 工单号 + */ + private String order_code; + + /** + * 物料 + */ + private String material_code; + + /** + * 数量 + */ + private String qty; + /** + * 关联设备属性 + */ + private List list; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.class new file mode 100644 index 0000000..a4cdb75 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.java new file mode 100644 index 0000000..d424a98 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/CancelTaskResponse.java @@ -0,0 +1,14 @@ +package org.nl.wms.ext.service.dto.to.wms; + +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseResponse; + +/** + * @Author: lyd + * @Description: 取消任务 + * @Date: 2023/7/26 + */ +@Data +public class CancelTaskResponse extends BaseResponse { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.class new file mode 100644 index 0000000..46c0a0a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.java new file mode 100644 index 0000000..c3b9015 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/dto/to/wms/FeedBackTaskStatusRequest.java @@ -0,0 +1,48 @@ +package org.nl.wms.ext.service.dto.to.wms; + +import lombok.Data; +import org.nl.wms.ext.service.dto.to.BaseRequest; + +/** + * ACS任务反馈请求实体 + */ +@Data +public class FeedBackTaskStatusRequest extends BaseRequest { + + /** + * 任务id + */ + private String task_id; + + /** + * 任务code + */ + private String task_code; + + /** + * 任务状态 + */ + private String task_status; + + /** + * 任务类型 + */ + private String task_type; + + /** + * 车号 + */ + private String car_no; + + /** + * 载具号 + */ + private String vehicle_code; + + /** + * 动作 1请求取货 2取货完成 3请求放货 4放货完成 + */ + private String action; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.class new file mode 100644 index 0000000..7a901eb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java new file mode 100644 index 0000000..4bd37fb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/AcsToWmsServiceImpl.java @@ -0,0 +1,265 @@ +package org.nl.wms.ext.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RedisUtils; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskFactory; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Author: lyd + * @Description: acs请求wms的实现类 + * @Date: 2023/6/26 + */ +@Slf4j +@Service +@Lazy +public class AcsToWmsServiceImpl implements AcsToWmsService { + + // 反射类方法的缓存 + private Map methodCache = new ConcurrentHashMap<>(); + + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private TaskFactory taskFactory; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private RedisUtils redisUtils; + + // 初始化反射方法 + @PostConstruct + public void initCacheMethod() { + for (Method method : this.getClass().getMethods()) { + if (method.getParameterCount() == 1 && method.getParameterTypes()[0] == JSONObject.class) { + methodCache.put(method.getName(), method); + } + } + } + + @Override + @SneakyThrows + public BaseResponse acsApply(JSONObject param) { + String requestNo = param.getString("requestNo"); + BaseResponse result = BaseResponse.build(requestNo); + param.put("user_id", GeneralDefinition.ACS_ID); + param.put("person_name",GeneralDefinition.ACS_NAME); + param.put("create_mode","2"); + try { + result = this.apply(param); + } catch (Exception e) { + String message = e.getMessage(); + log.error("ACS请求LMS出现错误: {}{}", e,e.getMessage()); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setRequestNo(requestNo); + // 消息通知 + noticeService.createNotice("异常信息:" + message, "请求信息: " + param.getString("request_medthod_code"), + NoticeTypeEnum.EXCEPTION.getCode()); + } + return result; + } + + @Override + @SneakyThrows + public BaseResponse pdaApply(JSONObject param){ + String requestNo = param.getString("requestNo"); + BaseResponse result = BaseResponse.build(requestNo); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + if(ObjectUtil.isEmpty(param.getString("user_id"))){ + param.put("user_id",currentUserId); + param.put("person_name",nickName); + } + if(ObjectUtil.isEmpty(param.getString("create_mode"))){ + param.put("create_mode","3"); + } + try { + result = this.apply(param); + } catch (Exception e) { + String message = e.getMessage(); + log.error("请求LMS出现错误: {}{}", e,e.getMessage()); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setRequestNo(requestNo); + // 消息通知 + noticeService.createNotice("异常信息:" + message, "请求信息: " + param.getString("request_medthod_code"), + NoticeTypeEnum.EXCEPTION.getCode()); + } + return result; + } + + @SneakyThrows + public BaseResponse apply(JSONObject param){ + String requestNo = param.getString("requestNo"); + BaseResponse result = BaseResponse.build(requestNo); + String requestMethodCode = param.getString("request_medthod_code"); + String requestMethodName = param.getString("request_medthod_name"); + String device_code = param.getString("device_code"); + //设置任务类型 + param.put("config_code",requestMethodCode); + //统一托盘码字段 + if(ObjectUtil.isNotEmpty(param.getString("sub_tray"))){ + param.put("vehicle_code2",param.getString("sub_tray")); + } + if(ObjectUtil.isNotEmpty(param.getString("mother_tray"))){ + param.put("vehicle_code",param.getString("mother_tray")); + } + AbstractTask task = taskFactory.getTask(requestMethodCode); + if(ObjectUtil.isEmpty(requestMethodCode)){ + throw new BadRequestException(LangProcess.msg("task_type_empty",requestMethodName,device_code)); + } + if(ObjectUtil.isNull(task)){ + throw new BadRequestException(LangProcess.msg("task_type_Incorrect","requestMethodCode",requestMethodName,"device_code",device_code)); + } + // 执行创建任务 + String task_code = task.apply(param); + Map parameters = new HashMap(); + parameters.put("task_code",task_code); + result.setParameters(parameters); + return result; + } + + /** + * 任务反馈 + */ + @Override + public BaseResponse status(JSONObject param) { + log.info("ACS请求反馈任务状态,信息:{}!", param.toString()); + String requestNo = param.getString("requestNo"); + String taskId = param.getString("task_code"); + if (ObjectUtil.isEmpty(taskId)) { + throw new BadRequestException(LangProcess.msg("task_code_empty")); + } + SchBaseTask taskObj = taskService.getOne(new LambdaQueryWrapper().eq(SchBaseTask::getTask_code, taskId)); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException(LangProcess.msg("task_Id_isNull",taskId)); + } + // 任务处理类 + String processingClass = taskObj.getConfig_code(); + //1:执行中,2:完成 ,3:acs取消 + String acsTaskStatus = param.getString("task_status"); + String message = ""; + TaskStatus status = TaskStatus.APPLY; + switch (acsTaskStatus) { + case "1": + status = TaskStatus.EXECUTING; + break; + case "2": + status = TaskStatus.FINISHED; + break; + case "3": + status = TaskStatus.CANCELED; + break; + default: + break; + } + // 根据配置去工厂类获得类对象 + AbstractTask abstractTask = taskFactory.getTask(processingClass); + // 更新任务 + try { + abstractTask.updateTaskStatus(taskObj.getTask_id(), status); + } catch (Exception e) { + log.error("任务状态更新失败: {}{}", e,e.getMessage()); + return BaseResponse.responseError(requestNo, "任务:[" + taskId + "]状态更新失败," + message); + } + return BaseResponse.responseOk(requestNo, "任务状态反馈成功!"); + } + + /** + * acs反馈wms单独场景 + */ + @Override + public BaseResponse notify(JSONObject param) { + String requestNo = param.getString("requestNo"); + log.info(DateUtil.now()+"notifyAcs - 请求参数前 {}", param); + if(param.getInteger("type")==1){ + //叠盘机高度同步 + SchBasePoint schBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, param.getString("device_code"))); + log.info(DateUtil.now()+"notifyAcs - 请求参数中:"+schBasePoint.getVehicle_qty()+"------>"+param.getInteger("number")); + schBasePoint.setVehicle_qty(param.getInteger("number")); + pointService.update(schBasePoint); + log.info(DateUtil.now()+"notifyAcs - 请求参数后 {}", schBasePoint.toString()); + }else if(param.getInteger("type")==2) { + // 输送线看板展示字段同步 + for (String key : param.keySet()) { + redisUtils.set(key, param.getString(key)); + } + } + return BaseResponse.responseOk(requestNo, "反馈成功!"); + } + + /** + * 任务阶段反馈最新点位 + * todo + * */ + + @Override + public BaseResponse feedbackState(JSONObject param) { + log.info("ACS任务阶段反馈最新点位,信息:{}!", param.toString()); + String requestNo = param.getString("requestNo"); + String taskId = param.getString("taskId"); + BaseResponse result = BaseResponse.build(requestNo); + try { + SchBaseTask schBaseTask = taskService.getById(taskId); + if(ObjectUtil.isEmpty(schBaseTask)){ + throw new BadRequestException(LangProcess.msg("task_Id_isNull",taskId)); + } + if (Integer.parseInt(schBaseTask.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish_or_cancel")); + } + AbstractTask task = taskFactory.getTask(schBaseTask.getConfig_code()); + // 执行创建任务 + task.feedbackState(param,schBaseTask,result); + taskService.update(schBaseTask); + Map map=new HashMap<>(); + map.put("start_point",schBaseTask.getPoint_code1()); + map.put("next_point",schBaseTask.getPoint_code2()); + map.put("start_height",schBaseTask.getPoint_code1_height()); + map.put("next_height",schBaseTask.getPoint_code2_height()); + result.setParameters(map); + } catch (Exception e) { + String message = e.getMessage(); + log.error("ACS请求LMS出现错误: {}{}", e.getMessage(),e); + result.setCode(HttpStatus.HTTP_BAD_REQUEST); + result.setMessage(message); + result.setRequestNo(requestNo); + // 消息通知 + noticeService.createNotice("异常信息:" + message, "acsApply: " + param.getString("request_medthod_code"), + NoticeTypeEnum.EXCEPTION.getCode()); + } + return result; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.class new file mode 100644 index 0000000..b87b871 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java new file mode 100644 index 0000000..4eb2436 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/ext/service/impl/WmsToAcsServiceImpl.java @@ -0,0 +1,36 @@ +package org.nl.wms.ext.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.nl.wms.ext.service.WmsToAcsService; +import org.nl.wms.ext.service.dto.to.wms.AcsResponse; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.task.AcsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author: lyd + * @Description: WMS请求ACS - 业务开发 + * @Date: 2023/6/30 + */ +@Slf4j +@Service +public class WmsToAcsServiceImpl implements WmsToAcsService { + + + @Override + public AcsResponse notifyAcs(JSONObject map) { + String api = "api/wms/notify"; + AcsResponse resultForAcs = AcsUtil.notifyAcs2(api, map); + // 记录日志 +// interactRecordService.saveRecord("下发任务", list, resultForAcs, GeneralDefinition.LMS_ACS); + return resultForAcs; + } + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/controller/MesController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/controller/MesController.class new file mode 100644 index 0000000..f72b36f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/controller/MesController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/controller/MesController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/controller/MesController.java new file mode 100644 index 0000000..65e515e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/controller/MesController.java @@ -0,0 +1,248 @@ +package org.nl.wms.mes.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.mes.domain.*; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dao.MesMoveMaterial; +import org.nl.wms.sch.material.service.dao.MesOutMaterial; +import org.nl.wms.sch.material.service.dao.mapper.MesMoveMaterialMapper; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.material.service.dao.mapper.MesOutMaterialMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +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.ArrayList; +import java.util.List; + +@Slf4j +@RestController +@Api(tags = "MES交互接口") +@RequestMapping("/api/mes") +@SaIgnore +@Lazy +public class MesController { + + @Autowired + private MesMoveMaterialMapper mesMoveMaterialMapper; + + @Autowired + private MesOutMaterialMapper mesOutMaterialMapper; + + @Autowired + private MesInMaterialMapper mesInMaterialMapper; + + /** + * MES调用LMS:推送托盘物料组盘信息 + * 调用时机:WMS 中对已组盘的托盘物料入立库,信息推送给 LMS + * @param notice + * @return + */ + @PostMapping("/qpmes060") + @Log(value = "qpmes060") + @ApiOperation("qpmes060") + @SaIgnore + public QPMESResponse qpmes060(@RequestBody JSONObject notice) { + log.info("QPMES060服务被调用,输入参数:" + notice.toString()); + QPMESResponse qpmes060Response = new QPMESResponse(); + QPMESResponseBody qpmes060ResponseBody = new QPMESResponseBody(); + List qpmes060ResponseBodyArrayList=new ArrayList<>(); + Head head=new Head(); + head.setDest_system("wms"); + head.setIntf_id("qpmes060"); + head.setSrc_msgid(IdUtil.simpleUUID()); + head.setSrc_system("lms"); + qpmes060Response.setHead(head); + try { + for(QPMES060RequestBody QPMES060RequestBody:notice.toJavaObject(QPMES060Request.class).getBody()) { + MesInMaterial material = new MesInMaterial(); + //实体类 + material.copyFrom(QPMES060RequestBody); + String pallet_sn = material.getPallet_sn(); + String product_name = material.getProduct_name(); + String batch = material.getBatch(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ObjectUtil.isNotEmpty(pallet_sn),MesInMaterial::getPallet_sn, pallet_sn); + queryWrapper.eq(ObjectUtil.isNotEmpty(product_name),MesInMaterial::getProduct_name, product_name); + queryWrapper.eq(ObjectUtil.isNotEmpty(batch),MesInMaterial::getBatch, batch); + MesInMaterial entity = mesInMaterialMapper.selectOne(queryWrapper); + if (ObjectUtil.isEmpty(entity)){ + //新增 + material.setReturn_status("0"); + material.setCreate_time(DateUtil.now()); + mesInMaterialMapper.insert(material); + }else{ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(ObjectUtil.isNotEmpty(pallet_sn),MesInMaterial::getPallet_sn, pallet_sn); + updateWrapper.eq(ObjectUtil.isNotEmpty(product_name),MesInMaterial::getProduct_name, product_name); + updateWrapper.eq(ObjectUtil.isNotEmpty(batch),MesInMaterial::getBatch, batch); + //更新 + material.setReturn_status(entity.getReturn_status()); + material.setCreate_time(entity.getCreate_time()); + material.setUpdate_time(DateUtil.now()); + mesInMaterialMapper.update(material,updateWrapper); + } + } + qpmes060ResponseBody.setMessage("接受托盘物料组盘信息成功"); + qpmes060ResponseBody.setStatus("S"); + qpmes060ResponseBodyArrayList.add(qpmes060ResponseBody); + qpmes060Response.setBody(qpmes060ResponseBodyArrayList); + log.info("QPMES060服务被调用,返回参数:" + JSON.toJSONString(qpmes060Response)); + return qpmes060Response; + }catch (Exception e){ + qpmes060ResponseBody.setMessage("接受托盘物料组盘信息失败:"+e.getMessage()); + qpmes060ResponseBody.setStatus("E"); + qpmes060ResponseBodyArrayList.add(qpmes060ResponseBody); + qpmes060Response.setBody(qpmes060ResponseBodyArrayList); + log.error("QPMES060服务异常:"+ JSON.toJSONString(qpmes060Response)); + return qpmes060Response; + } + } + + /** + * MES调用LMS:下发出库任务信息 + * 调用时机:WMS 维护出库物料信息,并指定出库对接区域下发 LMS 出库 + * @param notice + * @return + */ + @PostMapping("/qpmes064") + @Log(value = "qpmes064") + @ApiOperation("qpmes064") + @SaIgnore + public QPMESResponse qpmes064(@RequestBody JSONObject notice) { + log.info("QPMES098服务被调用,输入参数:" + notice.toString()); + QPMESResponse qpmes064Response = new QPMESResponse(); + QPMESResponseBody qpmes064ResponseBody = new QPMESResponseBody(); + List qpmes064ResponseBodyArrayList=new ArrayList<>(); + Head head=new Head(); + head.setDest_system("wms"); + head.setIntf_id("qpmes064"); + head.setSrc_msgid(IdUtil.simpleUUID()); + head.setSrc_system("lms"); + qpmes064Response.setHead(head); + try { + for(QPMES064RequestBody QPMES064RequestBody:notice.toJavaObject(QPMES064Request.class).getBody()) { + MesOutMaterial material = new MesOutMaterial(); + //实体类 + material.copyFrom(QPMES064RequestBody); + String product_name = material.getProduct_name(); + String batch = material.getBatch(); + String sect_code = material.getSect_code(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ObjectUtil.isNotEmpty(product_name),MesOutMaterial::getProduct_name, product_name); + queryWrapper.eq(ObjectUtil.isNotEmpty(batch),MesOutMaterial::getBatch, batch); + queryWrapper.eq(ObjectUtil.isNotEmpty(sect_code),MesOutMaterial::getSect_code, sect_code); + MesOutMaterial entity = mesOutMaterialMapper.selectOne(queryWrapper); + if (ObjectUtil.isEmpty(entity)){ + //新增 + material.setReturn_status("0"); + material.setCreate_time(DateUtil.now()); + mesOutMaterialMapper.insert(material); + }else{ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(ObjectUtil.isNotEmpty(sect_code),MesOutMaterial::getSect_code, sect_code); + updateWrapper.eq(ObjectUtil.isNotEmpty(product_name),MesOutMaterial::getProduct_name, product_name); + updateWrapper.eq(ObjectUtil.isNotEmpty(batch),MesOutMaterial::getBatch, batch); + //更新 + material.setReturn_status(entity.getReturn_status()); + material.setCreate_time(entity.getCreate_time()); + material.setUpdate_time(DateUtil.now()); + mesOutMaterialMapper.update(material,updateWrapper); + } + } + qpmes064ResponseBody.setMessage("接受出库任务信息成功"); + qpmes064ResponseBody.setStatus("S"); + qpmes064ResponseBodyArrayList.add(qpmes064ResponseBody); + qpmes064Response.setBody(qpmes064ResponseBodyArrayList); + log.info("QPMES064服务被调用,返回参数:" + JSON.toJSONString(qpmes064Response)); + return qpmes064Response; + }catch (Exception e){ + qpmes064ResponseBody.setMessage("接受出库任务信息失败:"+e.getMessage()); + qpmes064ResponseBody.setStatus("E"); + qpmes064ResponseBodyArrayList.add(qpmes064ResponseBody); + qpmes064Response.setBody(qpmes064ResponseBodyArrayList); + log.error("QPMES064服务异常:"+ JSON.toJSONString(qpmes064Response)); + return qpmes064Response; + } + } + + /** + * MES调用LMS:下发移库任务信息 + * 调用时机:WMS 上维护第二天需要用到的物料,指定东、西阁楼或主存区下层为移入备货区域 + * @param notice + * @return + */ + @PostMapping("/qpmes068") + @Log(value = "qpmes068") + @ApiOperation("qpmes068") + @SaIgnore + public QPMESResponse qpmes068(@RequestBody JSONObject notice) { + log.info("qpmes068服务被调用,输入参数:" + notice.toString()); + QPMESResponse qpmes068Response = new QPMESResponse(); + QPMESResponseBody qpmes068ResponseBody = new QPMESResponseBody(); + List qpmes068ResponseBodyArrayList=new ArrayList<>(); + Head head=new Head(); + head.setDest_system("wms"); + head.setIntf_id("qpmes068"); + head.setSrc_msgid(IdUtil.simpleUUID()); + head.setSrc_system("lms"); + qpmes068Response.setHead(head); + try { + for(QPMES068RequestBody QPMES068RequestBody:notice.toJavaObject(QPMES068Request.class).getBody()) { + MesMoveMaterial material = new MesMoveMaterial(); + //实体类 + material.copyFrom(QPMES068RequestBody); + String product_name = material.getProduct_name(); + String batch = material.getBatch(); + String sect_code = material.getSect_code(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ObjectUtil.isNotEmpty(product_name),MesMoveMaterial::getProduct_name, product_name); + queryWrapper.eq(ObjectUtil.isNotEmpty(batch),MesMoveMaterial::getBatch, batch); + queryWrapper.eq(ObjectUtil.isNotEmpty(sect_code),MesMoveMaterial::getSect_code, sect_code); + MesMoveMaterial entity = mesMoveMaterialMapper.selectOne(queryWrapper); + if (ObjectUtil.isEmpty(entity)){ + //新增 + material.setReturn_status("0"); + material.setCreate_time(DateUtil.now()); + mesMoveMaterialMapper.insert(material); + }else{ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(ObjectUtil.isNotEmpty(sect_code),MesMoveMaterial::getSect_code, sect_code); + updateWrapper.eq(ObjectUtil.isNotEmpty(product_name),MesMoveMaterial::getProduct_name, product_name); + updateWrapper.eq(ObjectUtil.isNotEmpty(batch),MesMoveMaterial::getBatch, batch); + //更新 + material.setReturn_status(entity.getReturn_status()); + material.setCreate_time(entity.getCreate_time()); + material.setUpdate_time(DateUtil.now()); + mesMoveMaterialMapper.update(material,updateWrapper); + } + } + qpmes068ResponseBody.setMessage("接受移库任务信息成功"); + qpmes068ResponseBody.setStatus("S"); + qpmes068ResponseBodyArrayList.add(qpmes068ResponseBody); + qpmes068Response.setBody(qpmes068ResponseBodyArrayList); + log.info("QPMES068服务被调用,返回参数:" + JSON.toJSONString(qpmes068Response)); + return qpmes068Response; + }catch (Exception e){ + qpmes068ResponseBody.setMessage("接受移库任务信息失败:"+e.getMessage()); + qpmes068ResponseBody.setStatus("E"); + qpmes068ResponseBodyArrayList.add(qpmes068ResponseBody); + qpmes068Response.setBody(qpmes068ResponseBodyArrayList); + log.error("QPMES068服务异常:"+ JSON.toJSONString(qpmes068Response)); + return qpmes068Response; + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/Head.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/Head.class new file mode 100644 index 0000000..5033c45 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/Head.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/Head.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/Head.java new file mode 100644 index 0000000..0c4f36c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/Head.java @@ -0,0 +1,27 @@ +package org.nl.wms.mes.domain; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +@Data +public class Head { + // 接口名称 + @JSONField(name = "intf_id") + private String intf_id; + // 源系统 + @JSONField(name = "src_system") + private String src_system; + // 目标系统 + @JSONField(name = "dest_system") + private String dest_system; + // 消息ID + @JSONField(name = "src_msgid") + private String src_msgid; + // 控制预留1 + @JSONField(name = "backup1") + private String backup1; + // 控制预留2 + @JSONField(name = "backup2") + private String backup2; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request$QPMES060RequestBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request$QPMES060RequestBuilder.class new file mode 100644 index 0000000..75a3136 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request$QPMES060RequestBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request.class new file mode 100644 index 0000000..2310c26 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request.java new file mode 100644 index 0000000..be9e36d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060Request.java @@ -0,0 +1,23 @@ +package org.nl.wms.mes.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; +@Data +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@Accessors(chain = true) +public class QPMES060Request { + private Head head; + private List body; +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060RequestBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060RequestBody.class new file mode 100644 index 0000000..01c9eae Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060RequestBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060RequestBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060RequestBody.java new file mode 100644 index 0000000..8d59496 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES060RequestBody.java @@ -0,0 +1,27 @@ +package org.nl.wms.mes.domain; + +import lombok.Data; + +@Data +public class QPMES060RequestBody { + //入库单号 + private String order_code; + //入库单类型 + private String order_type; + //托盘号 + private String pallet_sn; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //供应商编码 + private String supplier_code; + //供应商名称 + private String supplier_name; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request$QPMES062RequestBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request$QPMES062RequestBuilder.class new file mode 100644 index 0000000..7f8051b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request$QPMES062RequestBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request.class new file mode 100644 index 0000000..b92ba7c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request.java new file mode 100644 index 0000000..aa32e7e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062Request.java @@ -0,0 +1,25 @@ +package org.nl.wms.mes.domain; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@Data +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@Accessors(chain = true) +public class QPMES062Request{ + private Head head; + private List body; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062RequestBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062RequestBody.class new file mode 100644 index 0000000..0c33bae Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062RequestBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062RequestBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062RequestBody.java new file mode 100644 index 0000000..1ed13df --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES062RequestBody.java @@ -0,0 +1,28 @@ +package org.nl.wms.mes.domain; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.*; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; + +@Data +public class QPMES062RequestBody { + //入库单号 + private String order_code; + //托盘号 + private String pallet_sn; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //入库库位 + private String strcut_code; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request$QPMES064RequestBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request$QPMES064RequestBuilder.class new file mode 100644 index 0000000..2c25608 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request$QPMES064RequestBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request.class new file mode 100644 index 0000000..a6f5982 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request.java new file mode 100644 index 0000000..ee4065e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064Request.java @@ -0,0 +1,24 @@ +package org.nl.wms.mes.domain; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@Data +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@Accessors(chain = true) +public class QPMES064Request { + private Head head; + private List body; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064RequestBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064RequestBody.class new file mode 100644 index 0000000..6d60762 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064RequestBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064RequestBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064RequestBody.java new file mode 100644 index 0000000..9bc4a97 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES064RequestBody.java @@ -0,0 +1,33 @@ +package org.nl.wms.mes.domain; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.*; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; + +@Data +public class QPMES064RequestBody { + + //出库订单号 + private String order_code; + //订单类型 + private String order_type; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //供应商编码 + private String supplier_code; + //供应商名称 + private String supplier_name; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //出库对接区 + private String sect_code; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request$QPMES066RequestBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request$QPMES066RequestBuilder.class new file mode 100644 index 0000000..3c19986 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request$QPMES066RequestBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request.class new file mode 100644 index 0000000..f6f2a40 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request.java new file mode 100644 index 0000000..b8d8df7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066Request.java @@ -0,0 +1,20 @@ +package org.nl.wms.mes.domain; + +import lombok.*; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@Data +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@Accessors(chain = true) +public class QPMES066Request { + private Head head; + private List body; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066RequestBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066RequestBody.class new file mode 100644 index 0000000..76b3a18 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066RequestBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066RequestBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066RequestBody.java new file mode 100644 index 0000000..2d45432 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES066RequestBody.java @@ -0,0 +1,22 @@ +package org.nl.wms.mes.domain; + +import lombok.Data; + +@Data +public class QPMES066RequestBody { + //出库订单号 + private String order_code; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //入库库位 + private String strcut_code; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request$QPMES068RequestBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request$QPMES068RequestBuilder.class new file mode 100644 index 0000000..83cbe03 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request$QPMES068RequestBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request.class new file mode 100644 index 0000000..63b1de2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request.java new file mode 100644 index 0000000..e374a80 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068Request.java @@ -0,0 +1,19 @@ +package org.nl.wms.mes.domain; + +import lombok.*; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@Data +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@Accessors(chain = true) +public class QPMES068Request { + private Head head; + private List body; +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068RequestBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068RequestBody.class new file mode 100644 index 0000000..b8e6a77 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068RequestBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068RequestBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068RequestBody.java new file mode 100644 index 0000000..c7de3e3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES068RequestBody.java @@ -0,0 +1,29 @@ +package org.nl.wms.mes.domain; + +import lombok.Data; + +import java.util.List; + +@Data +public class QPMES068RequestBody { + //移库订单号 + private String order_code; + //订单类型 + private String order_type; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //供应商编码 + private String supplier_code; + //供应商名称 + private String supplier_name; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //移库对接区 + private String sect_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request$QPMES070RequestBuilder.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request$QPMES070RequestBuilder.class new file mode 100644 index 0000000..95a62ec Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request$QPMES070RequestBuilder.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request.class new file mode 100644 index 0000000..ad80423 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request.java new file mode 100644 index 0000000..a74259d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070Request.java @@ -0,0 +1,20 @@ +package org.nl.wms.mes.domain; + +import lombok.*; +import lombok.experimental.Accessors; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@Data +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@Accessors(chain = true) +public class QPMES070Request { + private Head head; + private List body; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070RequestBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070RequestBody.class new file mode 100644 index 0000000..7a24d38 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070RequestBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070RequestBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070RequestBody.java new file mode 100644 index 0000000..2de1dd3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMES070RequestBody.java @@ -0,0 +1,24 @@ +package org.nl.wms.mes.domain; + +import lombok.Data; + +@Data +public class QPMES070RequestBody { + //移库订单号 + private String order_code; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //移入库位 + private String in_strcut_code; + //移出库位 + private String out_strcut_code; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponse.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponse.class new file mode 100644 index 0000000..1f83f92 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponse.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponse.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponse.java new file mode 100644 index 0000000..3d58ad8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponse.java @@ -0,0 +1,13 @@ +package org.nl.wms.mes.domain; + +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Data +@ToString +public class QPMESResponse{ + private Head head; + private List body; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponseBody.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponseBody.class new file mode 100644 index 0000000..e0413e4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponseBody.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponseBody.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponseBody.java new file mode 100644 index 0000000..0b8adf5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/mes/domain/QPMESResponseBody.java @@ -0,0 +1,15 @@ +package org.nl.wms.mes.domain; + +import lombok.Data; + +@Data +public class QPMESResponseBody { + // 消息状态 + private String status; + // 消息文本 + private String message; + // 预留主键1 + private String key_value01; + // 预留主键2 + private String key_value02; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/controller/PdaController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/controller/PdaController.class new file mode 100644 index 0000000..52285ec Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/controller/PdaController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/controller/PdaController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/controller/PdaController.java new file mode 100644 index 0000000..4339e89 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/controller/PdaController.java @@ -0,0 +1,126 @@ +package org.nl.wms.pda.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.pda.service.dao.vo.PdaResponseVo; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.region.service.ISchBaseRegionService; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +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 javax.annotation.Resource; +import java.util.Map; + +/** + * @Author: lyd + * @Description: 手持接口 + * @Date: 2023/8/1 + */ +@Slf4j +@RestController +@Api(tags = "手持接口") +@RequestMapping("/api/pda") +@SaIgnore +@Lazy +public class PdaController { + + @Resource + private PdaService pdaService; + @Resource + private ISchBasePointService pointService; + @Resource + private ISchBaseRegionService regionService; + + @PostMapping("/point") + @Log("查询设备编号及状态") + @ApiOperation("查询设备编号及状态") + @SaIgnore + public ResponseEntity queryPoint(@RequestBody Map whereJson) { + SchBasePoint region = new SchBasePoint(); + region.setRegion_code(whereJson.get("region_code")); + region.setPoint_code(whereJson.get("point_code")); + if(whereJson.containsKey("need_emtpy")){ + if("1".equals(whereJson.get("need_emtpy"))){ + region.setVehicle_qty(1); + }else{ + region.setVehicle_qty(0); + } + } + if("KJ".equals(whereJson.get("region_code")) || "SSX".equals(whereJson.get("region_code"))){ + region.setVehicle_qty(null); + } + return new ResponseEntity<>(pointService.getPointListByPda(region), HttpStatus.OK); + } + + @PostMapping("/region") + @Log("区域列表") + @ApiOperation("区域列表") + public ResponseEntity region(@RequestBody JSONObject param){ + SchBaseRegion region = new SchBaseRegion(); + return new ResponseEntity<>(regionService.getRegionList(region), HttpStatus.OK); + } + + @PostMapping("/yclrk") + @Log("原材料入库") + @ApiOperation("原材料入库") + public ResponseEntity yclrk(@RequestBody JSONObject param){ + return new ResponseEntity<>(pdaService.yclrk(param), HttpStatus.OK); + } + + @PostMapping("/dwzt") + @Log("点位状态") + @ApiOperation("点位状态") + public ResponseEntity dwzt(@RequestBody JSONObject param){ + return new ResponseEntity<>(pdaService.dwzt(param), HttpStatus.OK); + } + + + @PostMapping("/yclck") + @Log("原材料出库") + @ApiOperation("原材料出库") + public ResponseEntity yclck(@RequestBody JSONObject param){ + return new ResponseEntity<>(pdaService.yclck(param), HttpStatus.OK); + } + + @PostMapping("/task") + @Log("点对点任务") + @ApiOperation("点对点任务") + public ResponseEntity task(@RequestBody JSONObject param){ + return new ResponseEntity<>(pdaService.task(param), HttpStatus.OK); + } + + @PostMapping("/zpjb") + @Log("组盘解绑") + @ApiOperation("组盘解绑") + public ResponseEntity zpjb(@RequestBody JSONObject param){ + return new ResponseEntity<>(pdaService.zpjb(param), HttpStatus.OK); + } + + @PostMapping("/zpchange") + @Log("缓存码变更") + @ApiOperation("缓存码变更") + public ResponseEntity zpchange(@RequestBody JSONObject param){ + return new ResponseEntity<>(pdaService.zpchange(param), HttpStatus.OK); + } + + @PostMapping("/ycck") + @Log("废包材异常出库") + @ApiOperation("废包材异常出库") + public ResponseEntity ycck(){ + return new ResponseEntity<>(pdaService.ycck(), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/PdaService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/PdaService.class new file mode 100644 index 0000000..0bf46d5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/PdaService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/PdaService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/PdaService.java new file mode 100644 index 0000000..a260646 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/PdaService.java @@ -0,0 +1,26 @@ +package org.nl.wms.pda.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pda.service.dao.vo.PdaResponseVo; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/8/1 + */ +public interface PdaService { + + PdaResponseVo dwzt(JSONObject param); + + PdaResponseVo yclrk(JSONObject param); + PdaResponseVo yclck(JSONObject param); + + PdaResponseVo task(JSONObject param); + + PdaResponseVo zpjb(JSONObject param); + + PdaResponseVo zpchange(JSONObject param); + + PdaResponseVo ycck(); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.class new file mode 100644 index 0000000..5bb201a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.java new file mode 100644 index 0000000..cbc53ce --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/BlendingMoveDto.java @@ -0,0 +1,21 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 混碾搬运参数 + * @Date: 2023/9/21 + */ +@Data +public class BlendingMoveDto { + private String vehicle_code; + /** + * 混碾对接位 + */ + private String start_point_code; + /** + * 压机号,需要自行寻找点位 + */ +// private String end_point_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/CommonQueryDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/CommonQueryDto.class new file mode 100644 index 0000000..3d26808 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/CommonQueryDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/CommonQueryDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/CommonQueryDto.java new file mode 100644 index 0000000..1c6c2d5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/CommonQueryDto.java @@ -0,0 +1,13 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 通用实体 + * @Date: 2023/10/16 + */ +@Data +public class CommonQueryDto { + private String material_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.class new file mode 100644 index 0000000..4e9fa8a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.java new file mode 100644 index 0000000..22ec3b2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ForcedRestingDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 强制静置实体 + * @Date: 2023/9/25 + */ +@Data +public class ForcedRestingDto { + private Integer stand_time; // 回温时间(小时) + private String group_id; // 组盘标识 +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualGroupDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualGroupDto.class new file mode 100644 index 0000000..eafc08e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualGroupDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java new file mode 100644 index 0000000..22d7f0d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualGroupDto.java @@ -0,0 +1,19 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author: lyd + * @Description: 人工组盘 + * @Date: 2023/9/18 + */ +@Data +public class ManualGroupDto { + private String vehicle_code; + private String vehicle_type; + private String point_code; + private String order_code; // 不需要 + private BigDecimal material_weight; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualResidueInDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualResidueInDto.class new file mode 100644 index 0000000..55af9fd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualResidueInDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualResidueInDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualResidueInDto.java new file mode 100644 index 0000000..440c929 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualResidueInDto.java @@ -0,0 +1,18 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 剩料回库参数 + * @Date: 2023/9/28 + */ +@Data +public class ManualResidueInDto { + private String vehicle_code; + private String qty; + /** + * 剩余数量 + */ + private String surplus_quantity; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualSortingDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualSortingDto.class new file mode 100644 index 0000000..e45fe1f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualSortingDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java new file mode 100644 index 0000000..50d07ae --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ManualSortingDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 人工排产Dto + * @Date: 2023/9/28 + */ +@Data +public class ManualSortingDto { + private String workorder_code; + private String username; // 用户 +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/PressMoveDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/PressMoveDto.class new file mode 100644 index 0000000..0b94f41 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/PressMoveDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/PressMoveDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/PressMoveDto.java new file mode 100644 index 0000000..50670af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/PressMoveDto.java @@ -0,0 +1,25 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 压机搬运dto + * @Date: 2023/10/16 + */ +@Data +public class PressMoveDto { + /** + * 设备编码:对接位 + */ + private String device_code; + /** + * 载具编码 + */ + private String vehicle_code; + /** + * 数量 + */ + private String qty; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ShelfSaveDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ShelfSaveDto.class new file mode 100644 index 0000000..9734c0f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ShelfSaveDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ShelfSaveDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ShelfSaveDto.java new file mode 100644 index 0000000..6c479ee --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/ShelfSaveDto.java @@ -0,0 +1,17 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 货架组盘信息dto + * @Date: 2023/10/16 + */ +@Data +public class ShelfSaveDto { + private String point_code; + private String point_status; + private String vehicle_code; + private String material_qty; + private String material_id; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/VehicleBindingDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/VehicleBindingDto.class new file mode 100644 index 0000000..e43d1e5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/VehicleBindingDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/VehicleBindingDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/VehicleBindingDto.java new file mode 100644 index 0000000..cd9f55b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/dto/VehicleBindingDto.java @@ -0,0 +1,14 @@ +package org.nl.wms.pda.service.dao.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 载具绑定 + * @Date: 2023/10/7 + */ +@Data +public class VehicleBindingDto { + private String origin_vehicle_code; + private String target_vehicle_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.class new file mode 100644 index 0000000..68beb03 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.java new file mode 100644 index 0000000..e3271dd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.java @@ -0,0 +1,15 @@ +package org.nl.wms.pda.service.dao.mapper; + +import org.nl.wms.pda.service.dao.dto.CommonQueryDto; +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 手持mapper接口 + * @Date: 2023/8/1 + */ +public interface PdaMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml new file mode 100644 index 0000000..0ea35f1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/mapper/PdaMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/vo/PdaResponseVo.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/vo/PdaResponseVo.class new file mode 100644 index 0000000..d3fe081 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/vo/PdaResponseVo.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java new file mode 100644 index 0000000..989cd7e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/dao/vo/PdaResponseVo.java @@ -0,0 +1,40 @@ +package org.nl.wms.pda.service.dao.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 手持返回 + * @Date: 2023/8/3 + */ +@Data +public class PdaResponseVo { + // 先提供一个message + private String message; + // 先提供一个message + private String code; + + /** + * 返回成功 + * @param message + * @return + */ + public static PdaResponseVo pdaResultOk(String message) { + PdaResponseVo vo = new PdaResponseVo(); + vo.setMessage(message); + vo.setCode("1"); + return vo; + } + + /** + * 返回失败 + * @param message + * @return + */ + public static PdaResponseVo pdaResultError(String message) { + PdaResponseVo vo = new PdaResponseVo(); + vo.setMessage(message); + vo.setCode("0"); + return vo; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/impl/PdaServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/impl/PdaServiceImpl.class new file mode 100644 index 0000000..03a9169 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/impl/PdaServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/impl/PdaServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/impl/PdaServiceImpl.java new file mode 100644 index 0000000..605834f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/pda/service/impl/PdaServiceImpl.java @@ -0,0 +1,270 @@ +package org.nl.wms.pda.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.pda.service.PdaService; +import org.nl.wms.pda.service.dao.vo.PdaResponseVo; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * @Author: lyd + * @Description: 实现类 + * @Date: 2023/8/1 + */ +@Slf4j +@Service +@Lazy +public class PdaServiceImpl implements PdaService { + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private AcsToWmsService acsToWmsService; + @Autowired + private PointMapper pointMapper; + @Autowired + private MesInMaterialMapper materialMapper; + @Autowired + private SchBaseVehiclematerialgroupMapper vehiclematerialgroupMapper; + @Override + public PdaResponseVo dwzt(JSONObject param) { + return PdaResponseVo.pdaResultOk("回温状态查询成功"); + } + + @Override + public PdaResponseVo yclrk(JSONObject param) { + PdaResponseVo result = new PdaResponseVo(); + param.put("request_medthod_code", "YCLRKTask"); + param.put("request_medthod_name", "原材料入库"); + param.put("device_code",param.getString("start_point")); + BaseResponse baseResponse=acsToWmsService.pdaApply(param); + Integer code = baseResponse.getCode(); + if(code == HttpStatus.OK.value()){ + result = PdaResponseVo.pdaResultOk(baseResponse.getMessage()); + }else { + result = PdaResponseVo.pdaResultError(baseResponse.getMessage()); + } + return result; + } + @Override + public PdaResponseVo yclck(JSONObject param) { + PdaResponseVo result = new PdaResponseVo(); + String workorder_code = param.getString("workorder_code"); + workorder_code = workorder_code.trim(); + if(ObjectUtil.isEmpty(workorder_code)){ + result = PdaResponseVo.pdaResultError("工单号不能为空!"); + return result; + } + param.put("request_medthod_code", "YCLCKTask"); + param.put("request_medthod_name", "原材料出库"); + param.put("device_code",param.getString("start_point")); + BaseResponse baseResponse=acsToWmsService.pdaApply(param); + Integer code = baseResponse.getCode(); + if(code == HttpStatus.OK.value()){ + result = PdaResponseVo.pdaResultOk(baseResponse.getMessage()); + }else { + result = PdaResponseVo.pdaResultError(baseResponse.getMessage()); + } + return result; + } + + @Override + public PdaResponseVo task(JSONObject param) { + PdaResponseVo result = new PdaResponseVo(); + param.put("request_medthod_code", "POINTTask"); + param.put("request_medthod_name", "点对点任务"); + param.put("device_code",param.getString("start_point")); + BaseResponse baseResponse=acsToWmsService.pdaApply(param); + Integer code = baseResponse.getCode(); + if(code == HttpStatus.OK.value()){ + result = PdaResponseVo.pdaResultOk(baseResponse.getMessage()); + }else { + result = PdaResponseVo.pdaResultError(baseResponse.getMessage()); + } + return result; + } + + + @Override + public PdaResponseVo zpjb(JSONObject param) { + PdaResponseVo result = new PdaResponseVo(); + String subTray = param.getString("sub_tray"); + subTray = subTray.trim(); + String motherTray = param.getString("mother_tray"); + motherTray = motherTray.trim(); + //子拖盘解绑 + if(ObjectUtil.isNotEmpty(subTray)){ + //查询母托盘 + JSONObject group_jo = new JSONObject(); + group_jo.put("vehicle_code",subTray); + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getGroup(group_jo); + if (ObjectUtil.isNotEmpty(one)) { + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateByJson(one); + } + List schBasePointList= pointMapper.selectList(new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code2, subTray)); + for(SchBasePoint schBasePoint:schBasePointList){ + schBasePoint.setVehicle_code2(""); + schBasePoint.setVehicle_qty(0); + pointService.update(schBasePoint); + } + } + //母盘解绑 + if(ObjectUtil.isNotEmpty(motherTray)){ + //查询母托盘 + JSONObject group_jo = new JSONObject(); + group_jo.put("vehicle_code",motherTray); + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getGroup(group_jo); + if (ObjectUtil.isNotEmpty(one)) { + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateByJson(one); + } + List schBasePointList= pointMapper.selectList(new LambdaQueryWrapper() + .eq(SchBasePoint::getVehicle_code, motherTray)); + for(SchBasePoint schBasePoint:schBasePointList){ + schBasePoint.setVehicle_code(""); + pointService.update(schBasePoint); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("pallet_sn",motherTray); + materialMapper.update(null,updateWrapper); + } + return PdaResponseVo.pdaResultOk("组盘解绑成功"); + } + + @Override + public PdaResponseVo zpchange(JSONObject param) { + PdaResponseVo result = new PdaResponseVo(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //原托盘号 + String sub_tray = param.getString("sub_tray"); + sub_tray = sub_tray.trim(); + //新托盘号 + String new_sub_tray = param.getString("new_sub_tray"); + new_sub_tray = new_sub_tray.trim(); + if(ObjectUtil.isEmpty(new_sub_tray)){ + result = PdaResponseVo.pdaResultError("新子托盘号不能为空!"); + return result; + } + List materialList = materialMapper.selectList(new LambdaQueryWrapper() + .eq(MesInMaterial::getPallet_sn,new_sub_tray) + .le(MesInMaterial::getReturn_status, "1")); + if (ObjectUtil.isEmpty(materialList)) { + result = PdaResponseVo.pdaResultError("新子托盘号无组盘入库单据信息!"); + return result; + } + if(ObjectUtil.isEmpty(sub_tray)){ + result = PdaResponseVo.pdaResultError("原子托盘号不能为空!"); + return result; + } + if(!sub_tray.startsWith("YBHC")){ + result = PdaResponseVo.pdaResultError("原子托盘号非缓存临时码YBHC开头!"); + return result; + } + //查询点位记录 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SchBasePoint::getVehicle_code2,sub_tray); + int countPoint = pointMapper.selectCount(queryWrapper); + if(countPoint<=0){ + result = PdaResponseVo.pdaResultError("原子托盘号未在系统点位仓位上!"); + return result; + } + //判断该子托盘是否存在未完成任务 + Integer sub_tray_lists = taskService.findUnFinishTasksBySub_tray("",sub_tray); + if(sub_tray_lists>0){ + result = PdaResponseVo.pdaResultError("该任务申请子托盘[\"+sub_tray+\"]存在未完成的任务!"); + return result; + } + //查询组盘记录 + LambdaQueryWrapper queryWrapper_group = new LambdaQueryWrapper<>(); + queryWrapper_group.eq(SchBaseVehiclematerialgroup::getVehicle_code,sub_tray); + queryWrapper_group.le(SchBaseVehiclematerialgroup::getGroup_bind_material_status,"2"); + int countGroup = vehiclematerialgroupMapper.selectCount(queryWrapper_group); + if(countGroup<=0){ + result = PdaResponseVo.pdaResultError("原子托盘号无已绑定的组盘记录!"); + return result; + } + //更新点位载具 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(SchBasePoint::getVehicle_code2,sub_tray); + + updateWrapper.set(SchBasePoint::getVehicle_code2,new_sub_tray); + updateWrapper.set(SchBasePoint::getUpdate_id,currentUserId); + updateWrapper.set(SchBasePoint::getUpdate_name,nickName); + updateWrapper.set(SchBasePoint::getUpdate_time,now); + pointMapper.update(null,updateWrapper); + + //更新组盘载具 + LambdaUpdateWrapper updateWrapper_group = new LambdaUpdateWrapper<>(); + updateWrapper_group.eq(SchBaseVehiclematerialgroup::getVehicle_code,sub_tray); + updateWrapper_group.le(SchBaseVehiclematerialgroup::getGroup_bind_material_status,"2"); + + updateWrapper_group.set(SchBaseVehiclematerialgroup::getVehicle_code,new_sub_tray); + updateWrapper_group.set(SchBaseVehiclematerialgroup::getSource_vehicle_code,sub_tray); + updateWrapper_group.set(SchBaseVehiclematerialgroup::getUpdate_id,currentUserId); + updateWrapper_group.set(SchBaseVehiclematerialgroup::getUpdate_name,nickName); + updateWrapper_group.set(SchBaseVehiclematerialgroup::getUpdate_time,now); + vehiclematerialgroupMapper.update(null,updateWrapper_group); + result = PdaResponseVo.pdaResultOk("缓存码变更成功!"); + return result; + } + + @Override + public PdaResponseVo ycck() { + PdaResponseVo result = new PdaResponseVo(); + JSONObject param=new JSONObject(); + SchBasePoint schBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, "FBC01")); + param.put("sub_tray",schBasePoint.getVehicle_code2()); + param.put("mother_tray",schBasePoint.getVehicle_code()); + this.zpjb(param); + param.put("request_medthod_code", "POINTTask"); + param.put("request_medthod_name", "点对点任务"); + param.put("device_code","FBC01"); + param.put("start_point","FBC01"); + param.put("next_point","DKT01"); + BaseResponse baseResponse=acsToWmsService.pdaApply(param); + Integer code = baseResponse.getCode(); + if(code == HttpStatus.OK.value()){ + result = PdaResponseVo.pdaResultOk(baseResponse.getMessage()); + }else { + result = PdaResponseVo.pdaResultError(baseResponse.getMessage()); + } + return result; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/controller/MaterialDataController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/controller/MaterialDataController.class new file mode 100644 index 0000000..cc1bc38 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/controller/MaterialDataController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/controller/MaterialDataController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/controller/MaterialDataController.java new file mode 100644 index 0000000..7d36581 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/controller/MaterialDataController.java @@ -0,0 +1,53 @@ +package org.nl.wms.sch.data.controller; + + +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.data.service.MaterialDataService; +import org.nl.wms.sch.data.service.dto.MaterialDataDto; +import org.nl.wms.sch.data.service.dto.MaterialDataRequest; +import org.nl.wms.sch.report.service.dto.ReportQuery; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; + +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author psh + * @date 2024-05-17 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "data管理") +@RequestMapping("/api/materialData") +@Slf4j +public class MaterialDataController { + + private final MaterialDataService materialDataService; + + @GetMapping + @ApiOperation("查询data") + //@PreAuthorize("@el.check('materialData:list')") + public ResponseEntity query(MaterialDataRequest whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(materialDataService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @Log("导出接口方法地址") + @ApiOperation("导出接口方法地址") + @GetMapping(value = "/download") + //@PreAuthorize("@el.check('Address:list')") + public void download(HttpServletResponse response, MaterialDataRequest whereJson, PageQuery page) throws IOException { + materialDataService.download(whereJson, page, response); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/MaterialDataService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/MaterialDataService.class new file mode 100644 index 0000000..3ee48d9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/MaterialDataService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/MaterialDataService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/MaterialDataService.java new file mode 100644 index 0000000..b4e3415 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/MaterialDataService.java @@ -0,0 +1,29 @@ +package org.nl.wms.sch.data.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.sch.data.service.dto.MaterialDataDto; +import org.nl.wms.sch.data.service.dto.MaterialDataRequest; +import org.nl.wms.sch.data.service.dto.MaterialDataResponse; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** + * @description 服务接口 + * @author psh + * @date 2024-05-17 + **/ +public interface MaterialDataService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @return Map + */ + IPage queryAll(MaterialDataRequest whereJson, PageQuery pageable); + + void download(MaterialDataRequest whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.class new file mode 100644 index 0000000..e5a4e05 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.java new file mode 100644 index 0000000..2172e15 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.java @@ -0,0 +1,18 @@ +package org.nl.wms.sch.data.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.wms.sch.data.service.dto.MaterialDataDto; +import org.nl.wms.sch.data.service.dto.MaterialDataRequest; +import org.nl.wms.sch.data.service.dto.MaterialDataResponse; + +/** +* @author lyd +* @date 2023-05-16 +**/ +public interface MaterialDataMapper extends BaseMapper { + + void set(); + IPage queryAll(IPage pages, MaterialDataRequest query); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.xml new file mode 100644 index 0000000..9b2fa44 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dao/mapper/MaterialDataMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataDto.class new file mode 100644 index 0000000..910485b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataDto.java new file mode 100644 index 0000000..74eda58 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataDto.java @@ -0,0 +1,50 @@ +package org.nl.wms.sch.data.service.dto; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.sql.Timestamp; +import java.math.BigDecimal; +import java.io.Serializable; + +/** + * @description / + * @author psh + * @date 2024-05-17 + **/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("material_data") +public class MaterialDataDto implements Serializable { + + /** 客户编码 */ + private String supplierCode; + + /** 客户名称 */ + private String supplierName; + + /** 物料编码 */ + private String productName; + + /** 规格 */ + private String specification; + + /** 来料批次 */ + private String batch; + + /** 领料批次 */ + private String pickingBatch; + + /** 长度 */ + private BigDecimal length; + + /** 重量 */ + private BigDecimal weight; + + /** 日期 */ + private Timestamp createTime; + + /** 操作类型,1-来料,2-领料 */ + private Integer type; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataRequest.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataRequest.class new file mode 100644 index 0000000..b3f9ab7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataRequest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataRequest.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataRequest.java new file mode 100644 index 0000000..2c9b862 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataRequest.java @@ -0,0 +1,23 @@ +package org.nl.wms.sch.data.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Timestamp; + +/** + * @description / + * @author psh + * @date 2024-05-17 + **/ +@Data +public class MaterialDataRequest implements Serializable { + + /** 客户编码 */ + private String start_time; + + /** 客户名称 */ + private String end_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataResponse.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataResponse.class new file mode 100644 index 0000000..9f053ee Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataResponse.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataResponse.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataResponse.java new file mode 100644 index 0000000..e931f24 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/dto/MaterialDataResponse.java @@ -0,0 +1,70 @@ +package org.nl.wms.sch.data.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Timestamp; + +/** + * @description / + * @author psh + * @date 2024-05-17 + **/ +@Data +public class MaterialDataResponse implements Serializable { + + /** 客户编码 */ + private String supplierCode; + + /** 客户名称 */ + private String supplierName; + + /** 物料编码 */ + private String productName; + + /** 规格 */ + private String specification; + + /** 来料批次 */ + private String batch; + + /** 棒源等级 */ + private String barLevel; + + /** 领料批次 */ + private String pickingBatch; + + /** 长度 */ + private BigDecimal length; + + /** 重量 */ + private BigDecimal weight; + + /** 日期 */ + private String date; + + /** 上月长度 */ + private BigDecimal sy_length; + + /** 上月重量 */ + private BigDecimal sy_weight; + + /** 来料长度 */ + private BigDecimal ll_length; + + /** 来料重量 */ + private BigDecimal ll_weight; + + /** 生产长度 */ + private BigDecimal sc_length; + + /** 生产重量 */ + private BigDecimal sc_weight; + + /** 结存长度 */ + private BigDecimal jc_length; + + /** 结存重量 */ + private BigDecimal jc_weight; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/impl/MaterialDataServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/impl/MaterialDataServiceImpl.class new file mode 100644 index 0000000..078118c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/impl/MaterialDataServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/impl/MaterialDataServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/impl/MaterialDataServiceImpl.java new file mode 100644 index 0000000..b7b134a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/data/service/impl/MaterialDataServiceImpl.java @@ -0,0 +1,73 @@ +package org.nl.wms.sch.data.service.impl; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.FileUtil; +import org.nl.wms.sch.data.service.MaterialDataService; +import org.nl.wms.sch.data.service.dao.mapper.MaterialDataMapper; +import org.nl.wms.sch.data.service.dto.MaterialDataDto; +import org.nl.wms.sch.data.service.dto.MaterialDataRequest; +import org.nl.wms.sch.data.service.dto.MaterialDataResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.io.IOException; +import java.util.*; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletResponse; + +/** + * @description 服务实现 + * @author psh + * @date 2024-05-17 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class MaterialDataServiceImpl extends ServiceImpl implements MaterialDataService { + + @Autowired + private MaterialDataMapper materialDataMapper; + @Override + public IPage queryAll(MaterialDataRequest query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + materialDataMapper.set(); + pages=materialDataMapper.queryAll(pages, query); + return pages; + } + + @Override + public void download(MaterialDataRequest query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + materialDataMapper.set(); + pages = materialDataMapper.queryAll(pages, query); + List> list = new ArrayList<>(); + for(MaterialDataResponse materialDataResponse:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("客户编码",materialDataResponse.getSupplierCode()); + mp.put("客户名称",materialDataResponse.getSupplierName()); + mp.put("物料编码",materialDataResponse.getProductName()); + mp.put("日期",materialDataResponse.getDate()); + mp.put("规格",materialDataResponse.getSpecification()); + mp.put("来料批次",materialDataResponse.getBatch()); + mp.put("棒源等级",materialDataResponse.getBarLevel()); + mp.put("昨日结存实际长度(mm)",materialDataResponse.getSc_length()); + mp.put("昨日结存实际重量(KG)",materialDataResponse.getSy_weight()); + mp.put("来料入库实际长度(mm)",materialDataResponse.getLl_length()); + mp.put("来料入库实际重量(KG)",materialDataResponse.getLl_weight()); + mp.put("领料批次",materialDataResponse.getPickingBatch()); + mp.put("生产领料实际长度(mm)",materialDataResponse.getSc_length()); + mp.put("生产领料实际重量(KG)",materialDataResponse.getSc_weight()); + mp.put("结存实际长度(mm)",materialDataResponse.getJc_length()); + mp.put("结存实际重量(KG)",materialDataResponse.getJc_weight()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.class new file mode 100644 index 0000000..25fcaeb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java new file mode 100644 index 0000000..725d580 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java @@ -0,0 +1,75 @@ +package org.nl.wms.sch.group.controller; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-16 +**/ +@Slf4j +@RestController +@Api(tags = "组盘信息管理管理") +@RequestMapping("/api/schBaseVehiclematerialgroup") +public class SchBaseVehiclematerialgroupController { + + @Autowired + private ISchBaseVehiclematerialgroupService schBaseVehiclematerialgroupService; + + @GetMapping + @Log("查询组盘信息管理") + @ApiOperation("查询组盘信息管理") + //@SaCheckPermission("@el.check('schBaseVehiclematerialgroup:list')") + public ResponseEntity query(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(schBaseVehiclematerialgroupService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增组盘信息管理") + @ApiOperation("新增组盘信息管理") + //@SaCheckPermission("@el.check('schBaseVehiclematerialgroup:add')") + public ResponseEntity create(@Validated @RequestBody SchBaseVehiclematerialgroup entity){ + schBaseVehiclematerialgroupService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改组盘信息管理") + @ApiOperation("修改组盘信息管理") + //@SaCheckPermission("@el.check('schBaseVehiclematerialgroup:edit')") + public ResponseEntity update(@Validated @RequestBody SchBaseVehiclematerialgroup entity){ + schBaseVehiclematerialgroupService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除组盘信息管理") + @ApiOperation("删除组盘信息管理") + //@SaCheckPermission("@el.check('schBaseVehiclematerialgroup:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + schBaseVehiclematerialgroupService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getGroup") + @Log("获取组盘信息管理") + @ApiOperation("获取组盘信息管理") + public ResponseEntity getGroup(@RequestBody JSONObject entity){ + return new ResponseEntity<>(schBaseVehiclematerialgroupService.getGroup(entity), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.class new file mode 100644 index 0000000..49cc65e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java new file mode 100644 index 0000000..cca07c0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java @@ -0,0 +1,58 @@ +package org.nl.wms.sch.group.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-16 +**/ +public interface ISchBaseVehiclematerialgroupService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SchBaseVehiclematerialgroup entity); + + /** + * 编辑 + * @param entity / + */ + void update(SchBaseVehiclematerialgroup entity); + + /** + * 根据条件更新组盘信息 + * @param entity + */ + void updateByJson(SchBaseVehiclematerialgroup entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 根据载具编码返回数据 + * @param entity + * @return + */ + SchBaseVehiclematerialgroup getGroup(JSONObject entity); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.class new file mode 100644 index 0000000..d1496c4 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java new file mode 100644 index 0000000..ac3e72b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java @@ -0,0 +1,155 @@ +package org.nl.wms.sch.group.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author lyd + * @description / + * @date 2023-05-16 + **/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sch_base_vehiclematerialgroup") +public class SchBaseVehiclematerialgroup implements Serializable { + private static final long serialVersionUID = 1L; + @TableId(value = "group_id", type = IdType.NONE) + @ApiModelProperty(value = "组盘标识") + private String group_id; + + @ApiModelProperty(value = "载具编码") + private String vehicle_code; + + @ApiModelProperty(value = "物料标识") + private String material_id; + + @ApiModelProperty(value = "载具类型") + private String vehicle_type; + + + @ApiModelProperty(value = "子载具编码") + private String child_vehicle_code; + + @ApiModelProperty(value = "来源载具编码") + private String source_vehicle_code; + + @ApiModelProperty(value = "点位编码") + private String point_code; + + @ApiModelProperty(value = "点位名称") + private String point_name; + + @ApiModelProperty(value = "是否满托") + private Boolean is_full; + + @ApiModelProperty(value = "批次") + private String pcsn; + + @ApiModelProperty(value = "回温开始时间") + private String instorage_time; + + @ApiModelProperty(value = "回温时间(小时)") + private Integer standing_time; + + @ApiModelProperty(value = "物料数量") + private Integer material_qty; + + @ApiModelProperty(value = "物料重量") + private BigDecimal material_weight; + + @ApiModelProperty(value = "搬运工单编码") + private String workorder_code; + + @ApiModelProperty(value = "组盘次数") + private Integer group_number; + + @ApiModelProperty(value = "任务编码") + private String task_code; + + @ApiModelProperty(value = "额外信息") + private String ext_data; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "组盘状态") + private String group_status; + + @ApiModelProperty(value = "业务表表名") + private String table_name; + + @ApiModelProperty(value = "业务表表名主键字段") + private String table_fk; + + @ApiModelProperty(value = "业务表表名主键值") + private String table_fk_id; + + @ApiModelProperty(value = "业务链路标识") + private String buss_move_id; + + @ApiModelProperty(value = "是否首个流程任务") + private Boolean is_first_flow_task; + + @ApiModelProperty(value = "流程编码") + private String flow_code; + + @ApiModelProperty(value = "流程顺序") + private BigDecimal flow_num; + + @ApiModelProperty(value = "上一任务编码") + private String before_task_code; + + @ApiModelProperty(value = "下一任务编码") + private String next_task_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "1:待绑定,2:已绑定,3:已解绑") + private String group_bind_material_status; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @ApiModelProperty(value = "移动途径") + private String move_way; + + + @TableField(exist = false) + private String material_name; + @TableField(exist = false) + private String material_code; + @TableField(exist = false) + private String material_spec; + @TableField(exist = false) + private String region_name; + @TableField(exist = false) + private String group_bind_material_status_name; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.class new file mode 100644 index 0000000..0f5fd1c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.java new file mode 100644 index 0000000..08e994d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.java @@ -0,0 +1,18 @@ +package org.nl.wms.sch.group.service.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; + +/** +* @author lyd +* @date 2023-05-16 +**/ +public interface SchBaseVehiclematerialgroupMapper extends BaseMapper { + + IPage selectPageLeftJoin(IPage pages, SchBaseVehiclematerialgroupQuery query); + + SchBaseVehiclematerialgroup getGroup(JSONObject entity); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.xml new file mode 100644 index 0000000..58dae1b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dao/mapper/SchBaseVehiclematerialgroupMapper.xml @@ -0,0 +1,57 @@ + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.class new file mode 100644 index 0000000..bc68b32 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java new file mode 100644 index 0000000..28012fb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupDto.java @@ -0,0 +1,122 @@ +package org.nl.wms.sch.group.service.dto; + +import java.math.BigDecimal; +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-16 +**/ +@Data +public class SchBaseVehiclematerialgroupDto implements Serializable { + + /** 组盘id */ + private String group_id; + + /** 载具编码 */ + private String vehicle_code; + + /** 物料标识 */ + private String material_id; + + /** 子载具编码 */ + private String child_vehicle_code; + + /** 来源载具编码 */ + private String source_vehicle_code; + + /** 点位编码 */ + private String point_code; + + /** 点位名称 */ + private String point_name; + + /** 是否满托 */ + private Boolean is_full; + + /** 批次 */ + private String pcsn; + + /** 回温开始时间 */ + private String instorage_time; + + /** 回温时间(小时) */ + private BigDecimal standing_time; + + /** 物料数量 */ + private BigDecimal material_qty; + + /** 物料重量 */ + private BigDecimal material_weight; + + /** 搬运工单编码 */ + private String workorder_code; + + /** 组盘次数 */ + private BigDecimal group_number; + + /** 任务编码 */ + private String task_code; + + /** 额外信息 */ + private String ext_data; + + /** 车间编码 */ + private String workshop_code; + + /** 组盘状态 */ + private String group_status; + + /** 业务表表名 */ + private String table_name; + + /** 业务表表名主键字段 */ + private String table_fk; + + /** 业务表表名主键值 */ + private String table_fk_id; + + /** 业务链路标识 */ + private String buss_move_id; + + /** 是否首个流程任务 */ + private Boolean is_first_flow_task; + + /** 流程编码 */ + private String flow_code; + + /** 流程顺序 */ + private BigDecimal flow_num; + + /** 上一任务编码 */ + private String before_task_code; + + /** 下一任务编码 */ + private String next_task_code; + + /** 备注 */ + private String remark; + + /** 是否删除 */ + private Boolean is_delete; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupQuery.class new file mode 100644 index 0000000..d963041 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupQuery.java new file mode 100644 index 0000000..44c6781 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/dto/SchBaseVehiclematerialgroupQuery.java @@ -0,0 +1,20 @@ +package org.nl.wms.sch.group.service.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; + +import java.io.Serializable; + +/** +* @author lyd +* @date 2023-05-16 +**/ +@Data +public class SchBaseVehiclematerialgroupQuery implements Serializable { + private String vehicle_code; + private String workshop_code; + private String region_code; + private String material_id; + private String group_bind_material_status; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.class new file mode 100644 index 0000000..09dd064 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java new file mode 100644 index 0000000..c9c5dd2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java @@ -0,0 +1,102 @@ +package org.nl.wms.sch.group.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-16 +**/ +@Slf4j +@Service +public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl implements ISchBaseVehiclematerialgroupService { + + @Autowired + private SchBaseVehiclematerialgroupMapper vehiclematerialgroupMapper; + + @Override + public IPage queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){ + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + pages = vehiclematerialgroupMapper.selectPageLeftJoin(pages, whereJson); + return pages; + } + + @Override + public void create(SchBaseVehiclematerialgroup entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + vehiclematerialgroupMapper.insert(entity); + } + + @Override + public void update(SchBaseVehiclematerialgroup entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + vehiclematerialgroupMapper.updateById(entity); + } + + @Override + public void updateByJson(SchBaseVehiclematerialgroup entity) { + log.info("组盘记录变更updateByJson:"+entity.toString()); + //更新 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("vehicle_code",entity.getVehicle_code()); + updateWrapper.le("group_bind_material_status","2"); + + updateWrapper.set("task_code",entity.getTask_code()); + updateWrapper.set("point_code",entity.getPoint_code()); + updateWrapper.set("point_name",entity.getPoint_name()); + updateWrapper.set("move_way",entity.getMove_way()); + updateWrapper.set("group_bind_material_status", entity.getGroup_bind_material_status()); + updateWrapper.set("update_id",entity.getUpdate_id()); + updateWrapper.set("update_name",entity.getUpdate_name()); + updateWrapper.set("update_time",entity.getUpdate_time()); + updateWrapper.set("pcsn",entity.getPcsn()); + updateWrapper.set("standing_time",entity.getStanding_time()); + vehiclematerialgroupMapper.update(null,updateWrapper); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + vehiclematerialgroupMapper.deleteBatchIds(ids); + } + + @Override + public SchBaseVehiclematerialgroup getGroup(JSONObject entity) { + return vehiclematerialgroupMapper.getGroup(entity); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.class new file mode 100644 index 0000000..97d0e13 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java new file mode 100644 index 0000000..1e3fa7b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/controller/SchBaseAcsandlmsinteractivelogController.java @@ -0,0 +1,66 @@ +package org.nl.wms.sch.interactivelog.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.interactivelog.service.ISchBaseAcsandlmsinteractivelogService; +import org.nl.wms.sch.interactivelog.service.dao.SchBaseAcsandlmsinteractivelog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-26 +**/ +@Slf4j +@RestController +@Api(tags = "ACS和LMS交互日志表管理") +@RequestMapping("/api/schBaseAcsandlmsinteractivelog") +public class SchBaseAcsandlmsinteractivelogController { + + @Autowired + private ISchBaseAcsandlmsinteractivelogService schBaseAcsandlmsinteractivelogService; + + @GetMapping + @Log("查询ACS和LMS交互日志表") + @ApiOperation("查询ACS和LMS交互日志表") + //@SaCheckPermission("@el.check('schBaseAcsandlmsinteractivelog:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(schBaseAcsandlmsinteractivelogService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增ACS和LMS交互日志表") + @ApiOperation("新增ACS和LMS交互日志表") + //@SaCheckPermission("@el.check('schBaseAcsandlmsinteractivelog:add')") + public ResponseEntity create(@Validated @RequestBody SchBaseAcsandlmsinteractivelog entity){ + schBaseAcsandlmsinteractivelogService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改ACS和LMS交互日志表") + @ApiOperation("修改ACS和LMS交互日志表") + //@SaCheckPermission("@el.check('schBaseAcsandlmsinteractivelog:edit')") + public ResponseEntity update(@Validated @RequestBody SchBaseAcsandlmsinteractivelog entity){ + schBaseAcsandlmsinteractivelogService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除ACS和LMS交互日志表") + @ApiOperation("删除ACS和LMS交互日志表") + //@SaCheckPermission("@el.check('schBaseAcsandlmsinteractivelog:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + schBaseAcsandlmsinteractivelogService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/ISchBaseAcsandlmsinteractivelogService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/ISchBaseAcsandlmsinteractivelogService.class new file mode 100644 index 0000000..d2488c2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/ISchBaseAcsandlmsinteractivelogService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/ISchBaseAcsandlmsinteractivelogService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/ISchBaseAcsandlmsinteractivelogService.java new file mode 100644 index 0000000..744c54c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/ISchBaseAcsandlmsinteractivelogService.java @@ -0,0 +1,43 @@ +package org.nl.wms.sch.interactivelog.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.sch.interactivelog.service.dao.SchBaseAcsandlmsinteractivelog; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-26 +**/ +public interface ISchBaseAcsandlmsinteractivelogService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SchBaseAcsandlmsinteractivelog entity); + + /** + * 编辑 + * @param entity / + */ + void update(SchBaseAcsandlmsinteractivelog entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.class new file mode 100644 index 0000000..df9713c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java new file mode 100644 index 0000000..40c0464 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/SchBaseAcsandlmsinteractivelog.java @@ -0,0 +1,73 @@ +package org.nl.wms.sch.interactivelog.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-26 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sch_base_acsandlmsinteractivelog") +public class SchBaseAcsandlmsinteractivelog implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "log_id", type = IdType.NONE) + @ApiModelProperty(value = "日志标识") + private String log_id; + + @ApiModelProperty(value = "请求名字") + private String request_name; + + @ApiModelProperty(value = "生成任务的请求参数") + private String request_param; + + @ApiModelProperty(value = "下发任务的请求参数") + private String response_param; + + @ApiModelProperty(value = "链路标识") + private String acs_trace_id; + + @ApiModelProperty(value = "请求描述") + private String request_desc; + + @ApiModelProperty(value = "请求类型") + private String request_type; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "是否处理完成") + private Boolean is_finish; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.class new file mode 100644 index 0000000..a929d79 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.java new file mode 100644 index 0000000..8a5ef66 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.interactivelog.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.interactivelog.service.dao.SchBaseAcsandlmsinteractivelog; + +/** +* @author lyd +* @date 2023-05-26 +**/ +public interface SchBaseAcsandlmsinteractivelogMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.xml new file mode 100644 index 0000000..44bd41d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dao/mapper/SchBaseAcsandlmsinteractivelogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogDto.class new file mode 100644 index 0000000..d8ab4df Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogDto.java new file mode 100644 index 0000000..ed0fa6f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogDto.java @@ -0,0 +1,61 @@ +package org.nl.wms.sch.interactivelog.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-26 +**/ +@Data +public class SchBaseAcsandlmsinteractivelogDto implements Serializable { + + /** 日志标识 */ + private String log_id; + + /** 请求名字 */ + private String request_name; + + /** 生成任务的请求参数 */ + private String request_param; + + /** 下发任务的请求参数 */ + private String response_param; + + /** 链路标识 */ + private String acs_trace_id; + + /** 请求描述 */ + private String request_desc; + + /** 请求类型 */ + private String request_type; + + /** 备注 */ + private String remark; + + /** 是否处理完成 */ + private Boolean is_finish; + + /** 车间编码 */ + private String workshop_code; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogQuery.class new file mode 100644 index 0000000..5ef6a53 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogQuery.java new file mode 100644 index 0000000..3c56b79 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/dto/SchBaseAcsandlmsinteractivelogQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.interactivelog.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.sch.interactivelog.service.dao.SchBaseAcsandlmsinteractivelog; + +/** +* @author lyd +* @date 2023-05-26 +**/ +public class SchBaseAcsandlmsinteractivelogQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.class new file mode 100644 index 0000000..650635c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java new file mode 100644 index 0000000..0ef4657 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/interactivelog/service/impl/SchBaseAcsandlmsinteractivelogServiceImpl.java @@ -0,0 +1,81 @@ +package org.nl.wms.sch.interactivelog.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.sch.interactivelog.service.ISchBaseAcsandlmsinteractivelogService; +import org.nl.wms.sch.interactivelog.service.dao.mapper.SchBaseAcsandlmsinteractivelogMapper; +import org.nl.wms.sch.interactivelog.service.dao.SchBaseAcsandlmsinteractivelog; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-26 +**/ +@Slf4j +@Service +public class SchBaseAcsandlmsinteractivelogServiceImpl extends ServiceImpl implements ISchBaseAcsandlmsinteractivelogService { + + @Autowired + private SchBaseAcsandlmsinteractivelogMapper schBaseAcsandlmsinteractivelogMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + schBaseAcsandlmsinteractivelogMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(SchBaseAcsandlmsinteractivelog entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setLog_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + schBaseAcsandlmsinteractivelogMapper.insert(entity); + } + + @Override + public void update(SchBaseAcsandlmsinteractivelog entity) { + SchBaseAcsandlmsinteractivelog dto = schBaseAcsandlmsinteractivelogMapper.selectById(entity.getLog_id()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + schBaseAcsandlmsinteractivelogMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + schBaseAcsandlmsinteractivelogMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/controller/MaterialController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/controller/MaterialController.class new file mode 100644 index 0000000..a6093ed Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/controller/MaterialController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/controller/MaterialController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/controller/MaterialController.java new file mode 100644 index 0000000..f3e3587 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/controller/MaterialController.java @@ -0,0 +1,66 @@ +package org.nl.wms.sch.material.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.material.service.IMaterialService; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dto.MaterialQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +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.Set; + +/** +* @author lyd +* @date 2023-05-16 +**/ +@Slf4j +@RestController +@Api(tags = "组盘信息管理管理") +@RequestMapping("/api/material") +public class MaterialController { + + @Autowired + private IMaterialService materialService; + + @GetMapping + @Log("查询组盘信息管理") + @ApiOperation("查询组盘信息管理") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity query(MaterialQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(materialService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增组盘信息管理") + @ApiOperation("新增组盘信息管理") + //@SaCheckPermission("@el.check('material:add')") + public ResponseEntity create(@Validated @RequestBody MesInMaterial entity){ + materialService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + + + @Log("删除组盘信息管理") + @ApiOperation("删除组盘信息管理") + //@SaCheckPermission("@el.check('material:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + materialService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/IMaterialService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/IMaterialService.class new file mode 100644 index 0000000..ffb5f12 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/IMaterialService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/IMaterialService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/IMaterialService.java new file mode 100644 index 0000000..b8a337d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/IMaterialService.java @@ -0,0 +1,34 @@ +package org.nl.wms.sch.material.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dto.MaterialQuery; + +import java.util.Set; + + +public interface IMaterialService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(MaterialQuery whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MesInMaterial entity); + + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesInMaterial.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesInMaterial.class new file mode 100644 index 0000000..b3a7545 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesInMaterial.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesInMaterial.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesInMaterial.java new file mode 100644 index 0000000..ef1b2fc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesInMaterial.java @@ -0,0 +1,54 @@ +package org.nl.wms.sch.material.service.dao; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nl.wms.mes.domain.QPMES060Request; +import org.nl.wms.mes.domain.QPMES060RequestBody; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("mes_in_material") +public class MesInMaterial implements Serializable { + private static final long serialVersionUID = 1L; + //入库单号 + private String order_code; + //入库单类型 + private String order_type; + //托盘号 + private String pallet_sn; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //供应商编码 + private String supplier_code; + //供应商名称 + private String supplier_name; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //导入时间 + private String create_time; + //更新时间 + private String update_time; + //回传状态 + private String return_status; + + + public void copyFrom(QPMES060RequestBody source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesMoveMaterial.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesMoveMaterial.class new file mode 100644 index 0000000..b1a485a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesMoveMaterial.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesMoveMaterial.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesMoveMaterial.java new file mode 100644 index 0000000..9d04221 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesMoveMaterial.java @@ -0,0 +1,49 @@ +package org.nl.wms.sch.material.service.dao; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nl.wms.mes.domain.QPMES064RequestBody; +import org.nl.wms.mes.domain.QPMES068RequestBody; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("mes_move_material") +public class MesMoveMaterial implements Serializable { + private static final long serialVersionUID = 1L; + //移库单号 + private String order_code; + //移库单类型 + private String order_type; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //供应商编码 + private String supplier_code; + //供应商名称 + private String supplier_name; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //移库对接区 + private String sect_code; + //导入时间 + private String create_time; + //更新时间 + private String update_time; + //回传状态 + private String return_status; + + + public void copyFrom(QPMES068RequestBody source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesOutMaterial.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesOutMaterial.class new file mode 100644 index 0000000..65e45ba Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesOutMaterial.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesOutMaterial.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesOutMaterial.java new file mode 100644 index 0000000..8e986c7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/MesOutMaterial.java @@ -0,0 +1,49 @@ +package org.nl.wms.sch.material.service.dao; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nl.wms.mes.domain.QPMES060RequestBody; +import org.nl.wms.mes.domain.QPMES064RequestBody; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("mes_out_material") +public class MesOutMaterial implements Serializable { + private static final long serialVersionUID = 1L; + //出库单号 + private String order_code; + //出库单类型 + private String order_type; + //物料编码 + private String product_name; + //物料名称 + private String product_description; + //供应商编码 + private String supplier_code; + //供应商名称 + private String supplier_name; + //规格 + private String specification; + //批次号 + private String batch; + //数量 + private double qty; + //出库对接区 + private String sect_code; + //导入时间 + private String create_time; + //更新时间 + private String update_time; + //回传状态 + private String return_status; + + + public void copyFrom(QPMES064RequestBody source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesInMaterialMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesInMaterialMapper.class new file mode 100644 index 0000000..c78b37d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesInMaterialMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesInMaterialMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesInMaterialMapper.java new file mode 100644 index 0000000..d871f46 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesInMaterialMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.material.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.material.service.dao.MesInMaterial; + +/** +* @author lyd +* @date 2023-05-16 +**/ +public interface MesInMaterialMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesMoveMaterialMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesMoveMaterialMapper.class new file mode 100644 index 0000000..9aef0b2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesMoveMaterialMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesMoveMaterialMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesMoveMaterialMapper.java new file mode 100644 index 0000000..52e2945 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesMoveMaterialMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.material.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.material.service.dao.MesMoveMaterial; + +/** +* @author lyd +* @date 2023-05-16 +**/ +public interface MesMoveMaterialMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesOutMaterialMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesOutMaterialMapper.class new file mode 100644 index 0000000..3e63cc9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesOutMaterialMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesOutMaterialMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesOutMaterialMapper.java new file mode 100644 index 0000000..fb519fa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dao/mapper/MesOutMaterialMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.material.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.material.service.dao.MesOutMaterial; + +/** +* @author lyd +* @date 2023-05-16 +**/ +public interface MesOutMaterialMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialDto.class new file mode 100644 index 0000000..98c0345 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialDto.java new file mode 100644 index 0000000..8e169e6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialDto.java @@ -0,0 +1,44 @@ +package org.nl.wms.sch.material.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class MaterialDto implements Serializable { + /** 入库单号 */ + private String SimtOrderNo; + /** 场地 */ + private String locationCode; + /** 入库类型 */ + private String simtType; + /** 到货单号 */ + private String deliveryNo; + /** 扫描库位 */ + private String whlCode; + /** 托盘号 */ + private String PalletSN; + /** 物料条码号 */ + private String lotSN; + /** 物料编码 */ + private String productName; + /** 物料名称 */ + private String productDescription; + /** 供应商编码 */ + private String supplierCode; + /** 供应商名称 */ + private String supplierName; + /** 规格 */ + private String specification; + /** 批次号 */ + private String batch; + /** 数量 */ + private String qty; + /** 来料长度 */ + private String incomingLength; + /** 来料重量 */ + private String incomingWeight; + /** 来料缺陷长度 */ + private String incomingchipping; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialQuery.class new file mode 100644 index 0000000..5e5e770 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialQuery.java new file mode 100644 index 0000000..d03d0a0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/dto/MaterialQuery.java @@ -0,0 +1,23 @@ +package org.nl.wms.sch.material.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MaterialQuery implements Serializable { + //托盘号 + private String palletSN; + //物料条码号 + private String lotSN; + //物料名称 + private String productName; + //供应商编码 + private String productDescription; + //供应商名称 + private String supplierCode; + //绑定状态 + private String group_bind_material_status; + //绑定状态 + private String return_status; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/impl/MaterialServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/impl/MaterialServiceImpl.class new file mode 100644 index 0000000..e4993d0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/impl/MaterialServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/impl/MaterialServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/impl/MaterialServiceImpl.java new file mode 100644 index 0000000..632e04a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/material/service/impl/MaterialServiceImpl.java @@ -0,0 +1,54 @@ +package org.nl.wms.sch.material.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.sch.material.service.IMaterialService; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.material.service.dto.MaterialQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.Set; + +@Slf4j +@Service +public class MaterialServiceImpl extends ServiceImpl implements IMaterialService { + + @Autowired + private MesInMaterialMapper materialMapper; + + @Override + public IPage queryAll(MaterialQuery whereJson, PageQuery page){ + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + /*wrapper.like(StringUtils.isNotBlank(whereJson.getPalletSN()),MesInMaterial::getPalletSN,whereJson.getPalletSN()); + wrapper.like(StringUtils.isNotBlank(whereJson.getLotSN()),MesInMaterial::getLotSN,whereJson.getLotSN()); + wrapper.like(StringUtils.isNotBlank(whereJson.getProductName()),MesInMaterial::getProductName,whereJson.getProductName()); + wrapper.like(StringUtils.isNotBlank(whereJson.getSupplierCode()),MesInMaterial::getSupplierCode,whereJson.getSupplierCode()); + wrapper.like(StringUtils.isNotBlank(whereJson.getProductDescription()),MesInMaterial::getProductDescription,whereJson.getProductDescription()); + wrapper.eq(StringUtils.isNotBlank(whereJson.getGroup_bind_material_status()),MesInMaterial::getGroup_bind_material_status,whereJson.getGroup_bind_material_status());*/ + wrapper.eq(StringUtils.isNotBlank(whereJson.getReturn_status()),MesInMaterial::getReturn_status,whereJson.getReturn_status()); + wrapper.orderByDesc(MesInMaterial::getCreate_time); + pages = materialMapper.selectPage(pages, wrapper); + return pages; + } + + @Override + public void create(MesInMaterial entity) { + materialMapper.insert(entity); + } + + + @Override + public void deleteAll(Set ids) { + // 真删除 + materialMapper.deleteBatchIds(ids); + } + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/controller/SchBasePointController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/controller/SchBasePointController.class new file mode 100644 index 0000000..af4bc8a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/controller/SchBasePointController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/controller/SchBasePointController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/controller/SchBasePointController.java new file mode 100644 index 0000000..8b5331e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/controller/SchBasePointController.java @@ -0,0 +1,133 @@ +package org.nl.wms.sch.point.controller; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.role.dao.SysRole; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dto.SysUserDetail; +import org.nl.system.service.user.dto.UserQuery; +import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.SchBasePointQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-15 +**/ +@Slf4j +@RestController +@Api(tags = "点位管理管理") +@RequestMapping("/api/schBasePoint") +public class SchBasePointController { + + @Autowired + private ISchBasePointService schBasePointService; + @Autowired + private ISysUserService userService; + @Autowired + private AcsToWmsService acsToWmsService; + + @GetMapping + @Log("查询点位管理") + @ApiOperation("查询点位管理") + //@SaCheckPermission("@el.check('schBasePoint:list')") + public ResponseEntity query(SchBasePointQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(schBasePointService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增点位管理") + @ApiOperation("新增点位管理") + //@SaCheckPermission("@el.check('schBasePoint:add')") + public ResponseEntity create(@Validated @RequestBody SchBasePoint entity){ + schBasePointService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改点位管理") + @ApiOperation("修改点位管理") + //@SaCheckPermission("@el.check('schBasePoint:edit')") + public ResponseEntity update(@Validated @RequestBody SchBasePoint entity){ + schBasePointService.updateByPc(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除点位管理") + @ApiOperation("删除点位管理") + //@SaCheckPermission("@el.check('schBasePoint:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + schBasePointService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("启动与禁用") + @PostMapping("/changeUsed") + @ApiOperation("启动与禁用") + public ResponseEntity changeUsedOn(@RequestBody JSONObject jsonObject) { + schBasePointService.changeUsed(jsonObject); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getPointList") + @Log("获取区域下拉框") + @ApiOperation("获取区域下拉框") + //@SaCheckPermission("@el.check('schBaseRegion:list')") + public ResponseEntity getPointList(@RequestBody(required = false) SchBasePoint region){ + return new ResponseEntity<>(schBasePointService.getPointList(region),HttpStatus.OK); + } + + @PostMapping("/getPointListByPda") + @Log("获取区域下拉框") + @ApiOperation("获取区域下拉框") + //@SaCheckPermission("@el.check('schBaseRegion:list')") + public ResponseEntity getPointListByPda(@RequestBody(required = false) SchBasePoint region){ + return new ResponseEntity<>(schBasePointService.getPointListByPda(region),HttpStatus.OK); + } + + @PostMapping("/getPointsByRegionCodes") + @Log("获取区域下拉框") + @ApiOperation("获取区域下拉框") + //@SaCheckPermission("@el.check('schBaseRegion:list')") + public ResponseEntity getPointsByRegionCodes(@RequestBody(required = false) String RegionCodes){ + return new ResponseEntity<>(schBasePointService.getPointsByRegionCodes(RegionCodes),HttpStatus.OK); + } + + @PostMapping("/outbound") + @Log("原材料异常出库") + @ApiOperation("原材料异常出库") + //@SaCheckPermission("@el.check('schBaseRegion:list')") + public ResponseEntity outbound(@RequestBody JSONObject param){ + param.put("request_medthod_code", "POINTTask"); + param.put("request_medthod_name", "点对点任务"); + param.put("start_point",param.getString("device_code")); + param.put("next_point","FBC01"); + SchBasePoint schBasePoint= schBasePointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, "FBC01")); + if(schBasePoint.getVehicle_qty()==1){ + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + BaseResponse baseResponse=acsToWmsService.acsApply(param); + return new ResponseEntity<>(baseResponse,HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/ISchBasePointService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/ISchBasePointService.class new file mode 100644 index 0000000..dce17fd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/ISchBasePointService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/ISchBasePointService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/ISchBasePointService.java new file mode 100644 index 0000000..a26f56e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/ISchBasePointService.java @@ -0,0 +1,81 @@ +package org.nl.wms.sch.point.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; +import org.nl.wms.sch.point.service.dto.SchBasePointQuery; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-15 +**/ +public interface ISchBasePointService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(SchBasePointQuery whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SchBasePoint entity); + + /** + * 编辑 + * @param entity / + */ + void update(SchBasePoint entity); + + /** + * pc端编辑 + * @param entity / + */ + void updateByPc(SchBasePoint entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 改变启用状态 + * @param jsonObject + */ + void changeUsed(JSONObject jsonObject); + + /** + * 获取点位 + * @param region + * @return + */ + List getPointList(SchBasePoint region); + + /** + * 获取点位 + * @param region + * @return + */ + List getPointListByPda(SchBasePoint region); + + /** + * 获取点位 + * @param RegionCodes + * @return + */ + List getPointsByRegionCodes(String RegionCodes); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/SchBasePoint.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/SchBasePoint.class new file mode 100644 index 0000000..555c051 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/SchBasePoint.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/SchBasePoint.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/SchBasePoint.java new file mode 100644 index 0000000..63ac6f2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/SchBasePoint.java @@ -0,0 +1,135 @@ +package org.nl.wms.sch.point.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.io.Serializable; +import java.util.List; + +/** +* @description / +* @author lyd +* @date 2023-05-15 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sch_base_point") +@ToString +public class SchBasePoint implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "point_code", type = IdType.NONE) + @ApiModelProperty(value = "点位编码") + private String point_code; + + @ApiModelProperty(value = "点位名称") + private String point_name; + + @ApiModelProperty(value = "区域编码") + private String region_code; + + @ApiModelProperty(value = "区域名称") + private String region_name; + + @ApiModelProperty(value = "点位类型") + private String point_type; + + @ApiModelProperty(value = "点位状态") + private String point_status; + + @ApiModelProperty(value = "载具允许最大数量") + private Integer vehicle_max_qty; + + @ApiModelProperty(value = "载具类型") + private String vehicle_type; + + @ApiModelProperty(value = "载具编码") + private String vehicle_code; + + @ApiModelProperty(value = "载具编码2") + private String vehicle_code2; + + @ApiModelProperty(value = "载具数量") + private Integer vehicle_qty; + + @ApiModelProperty(value = "是否存储货位") + private String is_storage; + + @ApiModelProperty(value = "排") + private Integer row_num; + + @ApiModelProperty(value = "列") + private Integer col_num; + + @ApiModelProperty(value = "层") + private Integer layer_num; + + @ApiModelProperty(value = "货位高度") + private BigDecimal point_height; + + @ApiModelProperty(value = "入库顺序") + private Integer in_order_seq; + + @ApiModelProperty(value = "出库顺序") + private Integer out_order_seq; + + @ApiModelProperty(value = "父点位编码") + private String parent_point_code; + + @ApiModelProperty(value = "外部点位编码") + private String ext_point_code; + + @ApiModelProperty(value = "在执行的任务标识") + private String ing_task_code; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "是否启用") + private Boolean is_used; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @ApiModelProperty(value = "物料重量") + private BigDecimal material_weight; + + @ApiModelProperty(value = "物料高度") + private BigDecimal material_height; + + @ApiModelProperty(value = "批次") + private String pcsn; + + @ApiModelProperty(value = "是否呆滞物料") + private String is_stragnant; + + @ApiModelProperty(value = "入库时间") + private String instorage_time; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.class new file mode 100644 index 0000000..c29d31e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java new file mode 100644 index 0000000..e8f2ff6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java @@ -0,0 +1,29 @@ +package org.nl.wms.sch.point.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; +import org.nl.wms.sch.point.service.dto.SchBasePointQuery; + +import java.util.List; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public interface SchBasePointMapper extends BaseMapper { + + /** + * 批量禁用启用 + * @param pointCodes + * @param used + */ + void batchChangeUsed(List pointCodes, Boolean used); + + /** + * 分页查找 + * @return + */ + IPage queryPoint(IPage pages, SchBasePointQuery query); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml new file mode 100644 index 0000000..8730834 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml @@ -0,0 +1,45 @@ + + + + + + UPDATE sch_base_point + SET is_used = #{used} + + point_code IN + + #{code} + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/PointLeftDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/PointLeftDto.class new file mode 100644 index 0000000..9c0a4de Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/PointLeftDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/PointLeftDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/PointLeftDto.java new file mode 100644 index 0000000..c3c348d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/PointLeftDto.java @@ -0,0 +1,16 @@ +package org.nl.wms.sch.point.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class PointLeftDto implements Serializable { + /** 当前排 */ + private Integer row_num; + /** 当前排剩余空位数量 */ + private Integer left_num; + /** 当前排已分配数量 */ + private Integer now_num; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointDto.class new file mode 100644 index 0000000..6bfda00 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointDto.java new file mode 100644 index 0000000..756d5c7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointDto.java @@ -0,0 +1,85 @@ +package org.nl.wms.sch.point.service.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-15 +**/ +@Data +public class SchBasePointDto implements Serializable { + + private String point_code; + + private String point_name; + + private String region_code; + + private String region_name; + + private String point_type; + + private String point_status; + + private Integer vehicle_max_qty; + + private String vehicle_type; + + private String vehicle_code; + + private String vehicle_code2; + + private Integer vehicle_qty; + + private String is_storage; + + private Integer row_num; + + private Integer col_num; + + private Integer layer_num; + + private BigDecimal point_height; + + private Integer in_order_seq; + + private Integer out_order_seq; + + private String parent_point_code; + + private String ext_point_code; + + private String ing_task_code; + + private String workshop_code; + + private String remark; + + private Boolean is_used; + + private String create_id; + + private String create_name; + + private String create_time; + + private String update_id; + + private String update_name; + + private String update_time; + + private BigDecimal material_weight; + + private BigDecimal material_height; + + private String pcsn; + + private String is_stragnant; + + private String instorage_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointQuery.class new file mode 100644 index 0000000..e853369 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointQuery.java new file mode 100644 index 0000000..f3224fa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/dto/SchBasePointQuery.java @@ -0,0 +1,28 @@ +package org.nl.wms.sch.point.service.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.io.Serializable; + +/** +* @author lyd +* @date 2023-05-15 +**/ +@Data +public class SchBasePointQuery implements Serializable { + + private String blurry; + + private String region_code; + + private String vehicle_code; + + private String vehicle_code2; + + private Boolean is_used; + + private Boolean lock_type; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.class new file mode 100644 index 0000000..373a27d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java new file mode 100644 index 0000000..3bf77af --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -0,0 +1,203 @@ +package org.nl.wms.sch.point.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch.point.service.dto.SchBasePointDto; +import org.nl.wms.sch.point.service.dto.SchBasePointQuery; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; +import org.nl.wms.sch.region.service.dao.mapper.SchBaseRegionMapper; +import org.nl.wms.sch.report.service.dto.ReportDto; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-05-15 +**/ +@Slf4j +@Service +public class SchBasePointServiceImpl extends ServiceImpl implements ISchBasePointService { + + @Autowired + private SchBasePointMapper pointMapper; + + @Autowired + private SchBaseRegionMapper regionMapper; + + @Autowired + private SchBaseVehiclematerialgroupMapper vehiclematerialgroupMapper; + + @Override + public IPage queryAll(SchBasePointQuery whereJson, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = pointMapper.queryPoint(pages, whereJson); + return pages; + } + + @Override + public void create(SchBasePoint entity) { + String point_code = entity.getPoint_code(); + SchBasePoint pointObj = pointMapper.selectById(point_code); + if (ObjectUtil.isNotEmpty(pointObj) && !pointObj.getPoint_code().equals(entity.getPoint_code())) { + throw new BadRequestException(LangProcess.msg("universal_exist_point")); + } + + // 默认父类点位为自身 + if (ObjectUtil.isEmpty(entity.getParent_point_code())) { + entity.setParent_point_code(entity.getPoint_code()); + } + + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + if(ObjectUtil.isEmpty(entity.getRegion_name())){ + // 获取region_name + SchBaseRegion baseRegion = regionMapper.selectById(entity.getRegion_code()); + entity.setRegion_name(baseRegion.getRegion_name()); + } + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + pointMapper.insert(entity); + } + + @Override + public void update(SchBasePoint entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + if(ObjectUtil.isEmpty(entity.getRegion_name())){ + // 获取region_name + SchBaseRegion baseRegion = regionMapper.selectById(entity.getRegion_code()); + entity.setRegion_name(baseRegion.getRegion_name()); + } + log.info("update管理端变更点位信息为:{}",entity.toString()); + pointMapper.updateById(entity); + } + + @Override + public void updateByPc(SchBasePoint entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + if(ObjectUtil.isEmpty(entity.getRegion_name())){ + // 获取region_name + SchBaseRegion baseRegion = regionMapper.selectById(entity.getRegion_code()); + entity.setRegion_name(baseRegion.getRegion_name()); + } + //同步修改组盘托盘号,且子托盘号不能为空 + if(ObjectUtil.isNotEmpty(entity.getVehicle_code2())){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(SchBasePoint::getPoint_code,entity.getPoint_code()); + SchBasePoint old_point = this.getOne(lam); + String old_vehicle_code2 = old_point.getVehicle_code2(); + if(ObjectUtil.isNotEmpty(old_vehicle_code2) && old_vehicle_code2.startsWith("YBHC")){ + //更新 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("vehicle_code",old_vehicle_code2); + updateWrapper.le("group_bind_material_status","2"); + + updateWrapper.set("vehicle_code",entity.getVehicle_code2()); + updateWrapper.set("source_vehicle_code",old_vehicle_code2); + updateWrapper.set("update_id",currentUserId); + updateWrapper.set("update_name",nickName); + updateWrapper.set("update_time",now); + vehiclematerialgroupMapper.update(null,updateWrapper); + } + } + log.info("updateByPc管理端变更点位信息为:{}",entity.toString()); + pointMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + pointMapper.deleteBatchIds(ids); + } + + @Override + public void changeUsed(JSONObject jsonObject) { + // 不可能为空 + JSONArray data = jsonObject.getJSONArray("data"); + Boolean used = jsonObject.getBoolean("used"); + Assert.notNull(data, "数据为空!"); + Assert.notNull(used, "数据为空!"); + List schBasePoints = JSONArray.parseArray(JSONArray.toJSONString(data), SchBasePoint.class); + // 获取所有pointCode + List pointCodes = schBasePoints.stream() + .map(SchBasePoint::getPoint_code) + .collect(Collectors.toList()); + pointMapper.batchChangeUsed(pointCodes, used); + } + + @Override + public List getPointList(SchBasePoint region) { + if (ObjectUtil.isEmpty(region)) return this.list(); + return pointMapper.selectList(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, region.getRegion_code()) + .like(region.getPoint_code()!=null,SchBasePoint::getPoint_code, region.getPoint_code()) + .eq(SchBasePoint::getIs_used, 1)); + } + + @Override + public List getPointListByPda(SchBasePoint region) { + return pointMapper.selectList(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(region.getRegion_code()),SchBasePoint::getRegion_code, region.getRegion_code()) + .like(ObjectUtil.isNotEmpty(region.getPoint_code()),SchBasePoint::getPoint_code, region.getPoint_code()) + .and(slam -> slam.eq(SchBasePoint::getIng_task_code, "") + .or() + .isNull(SchBasePoint::getIng_task_code)) + .eq(SchBasePoint::getIs_used, 1) + .eq(ObjectUtil.isNotEmpty(region.getVehicle_qty()),SchBasePoint::getVehicle_qty, region.getVehicle_qty())); + } + + @Override + public List getPointsByRegionCodes(String RegionCodes) { + Set regions = new HashSet<>(); + String[] split = RegionCodes.split(","); + regions.addAll(Arrays.asList(split)); + return pointMapper.selectList(new LambdaQueryWrapper() + .in(ObjectUtil.isNotEmpty(RegionCodes),SchBasePoint::getRegion_code,regions) + .eq(SchBasePoint::getIs_used, 1) + .orderByAsc(SchBasePoint::getPoint_code) + ); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/controller/SchBaseRegionController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/controller/SchBaseRegionController.class new file mode 100644 index 0000000..c5ca8dd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/controller/SchBaseRegionController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/controller/SchBaseRegionController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/controller/SchBaseRegionController.java new file mode 100644 index 0000000..c9f7d90 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/controller/SchBaseRegionController.java @@ -0,0 +1,90 @@ +package org.nl.wms.sch.region.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.region.service.ISchBaseRegionService; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-15 +**/ +@Slf4j +@RestController +@Api(tags = "区域管理管理") +@RequestMapping("/api/schBaseRegion") +public class SchBaseRegionController { + + @Autowired + private ISchBaseRegionService regionService; + + @GetMapping + @Log("查询区域管理") + @ApiOperation("查询区域管理") + //@SaCheckPermission("@el.check('schBaseRegion:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(regionService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增区域管理") + @ApiOperation("新增区域管理") + //@SaCheckPermission("@el.check('schBaseRegion:add')") + public ResponseEntity create(@Validated @RequestBody SchBaseRegion entity){ + regionService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域管理") + @ApiOperation("修改区域管理") + //@SaCheckPermission("@el.check('schBaseRegion:edit')") + public ResponseEntity update(@Validated @RequestBody SchBaseRegion entity){ + regionService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域管理") + @ApiOperation("删除区域管理") + //@SaCheckPermission("@el.check('schBaseRegion:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + regionService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getRegionList") + @Log("获取区域下拉框") + @ApiOperation("获取区域下拉框") + //@SaCheckPermission("@el.check('schBaseRegion:list')") + public ResponseEntity getRegionList(@RequestBody(required = false) SchBaseRegion region){ + return new ResponseEntity<>(regionService.getRegionList(region),HttpStatus.OK); + } + + @PostMapping("/getPointStatusSelectById") + @Log("获取点位状态下拉框") + @ApiOperation("获取点位状态下拉框") + //@SaCheckPermission("region:add") + public ResponseEntity getPointStatusSelectById(@RequestBody String region_id) { + return new ResponseEntity<>(regionService.getPointStatusSelectById(region_id), HttpStatus.OK); + } + + @PostMapping("/getPointTypeSelectById") + @Log("获取点位类型下拉框") + @ApiOperation("获取点位类型下拉框") + //@SaCheckPermission("region:add") + public ResponseEntity getPointTypeSelectById(@RequestBody String region_id) { + return new ResponseEntity<>(regionService.getPointTypeSelectById(region_id), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/ISchBaseRegionService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/ISchBaseRegionService.class new file mode 100644 index 0000000..9856755 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/ISchBaseRegionService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/ISchBaseRegionService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/ISchBaseRegionService.java new file mode 100644 index 0000000..325c516 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/ISchBaseRegionService.java @@ -0,0 +1,55 @@ +package org.nl.wms.sch.region.service; + +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-15 +**/ +public interface ISchBaseRegionService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SchBaseRegion entity); + + /** + * 编辑 + * @param entity / + */ + void update(SchBaseRegion entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 区域下拉框 + * @return + */ + List getRegionList(SchBaseRegion region); + + JSONArray getPointStatusSelectById(String regionId); + + JSONArray getPointTypeSelectById(String regionId); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/SchBaseRegion.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/SchBaseRegion.class new file mode 100644 index 0000000..2d22d4f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/SchBaseRegion.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/SchBaseRegion.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/SchBaseRegion.java new file mode 100644 index 0000000..0a6f49f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/SchBaseRegion.java @@ -0,0 +1,67 @@ +package org.nl.wms.sch.region.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @description / + * @author lyd + * @date 2023-05-16 + **/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sch_base_region") +public class SchBaseRegion implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "region_code", type = IdType.NONE) + @ApiModelProperty(value = "区域编码") + private String region_code; + + @ApiModelProperty(value = "区域名称") + private String region_name; + + @ApiModelProperty(value = "点位类型说明") + private String point_type_explain; + + @ApiModelProperty(value = "点位状态说明") + private String point_status_explain; + + @ApiModelProperty(value = "是否创建工单") + private Boolean is_has_workder; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @ApiModelProperty(value = "顺和号") + private Integer order_seq; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.class new file mode 100644 index 0000000..fa3fc8e Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.java new file mode 100644 index 0000000..2837734 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.region.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public interface SchBaseRegionMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.xml new file mode 100644 index 0000000..9174217 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dao/mapper/SchBaseRegionMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionDto.class new file mode 100644 index 0000000..d5ca580 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionDto.java new file mode 100644 index 0000000..2f704a5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionDto.java @@ -0,0 +1,55 @@ +package org.nl.wms.sch.region.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** + * @description / + * @author lyd + * @date 2023-05-16 + **/ +@Data +public class SchBaseRegionDto implements Serializable { + + /** 区域编码 */ + private String region_code; + + /** 区域名称 */ + private String region_name; + + /** 点位类型说明 */ + private String point_type_explain; + + /** 点位状态说明 */ + private String point_status_explain; + + /** 是否创建工单 */ + private Boolean is_has_workder; + + /** 车间编码 */ + private String workshop_code; + + /** 备注 */ + private String remark; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; + + /** 顺和号 */ + private Integer order_seq; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionQuery.class new file mode 100644 index 0000000..11f46f9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionQuery.java new file mode 100644 index 0000000..6a3d20f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/dto/SchBaseRegionQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.region.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public class SchBaseRegionQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.class new file mode 100644 index 0000000..419d99d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java new file mode 100644 index 0000000..d8cb4e6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java @@ -0,0 +1,135 @@ +package org.nl.wms.sch.region.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.sch.region.service.ISchBaseRegionService; +import org.nl.wms.sch.region.service.dao.mapper.SchBaseRegionMapper; +import org.nl.wms.sch.region.service.dao.SchBaseRegion; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; + +/** + * @author lyd + * @description 服务实现 + * @date 2023-05-15 + **/ +@Slf4j +@Service +public class SchBaseRegionServiceImpl extends ServiceImpl implements ISchBaseRegionService { + + @Autowired + private SchBaseRegionMapper schBaseRegionMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String workshop_code = ObjectUtil.isNotEmpty(whereJson.get("workshop_code")) ? whereJson.get("workshop_code").toString() : null; + String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) ? whereJson.get("blurry").toString() : null; + Boolean is_has_workder = ObjectUtil.isNotEmpty(whereJson.get("is_has_workder")) ? Boolean.valueOf(whereJson.get("is_has_workder").toString()) : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(workshop_code), SchBaseRegion::getWorkshop_code, workshop_code) + .eq(ObjectUtil.isNotEmpty(is_has_workder), SchBaseRegion::getIs_has_workder, is_has_workder) + .like(ObjectUtil.isNotEmpty(blurry), SchBaseRegion::getRegion_code, blurry) + .or(ObjectUtil.isNotEmpty(blurry), la -> la.like(SchBaseRegion::getRegion_name, blurry)) + .orderByAsc(SchBaseRegion::getOrder_seq); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + schBaseRegionMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(SchBaseRegion entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + schBaseRegionMapper.insert(entity); + } + + @Override + public void update(SchBaseRegion entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + schBaseRegionMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + schBaseRegionMapper.deleteBatchIds(ids); + } + + @Override + public List getRegionList(SchBaseRegion region) { + return schBaseRegionMapper.selectList(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(region), SchBaseRegion::getIs_has_workder, true)); + } + + @Override + public JSONArray getPointStatusSelectById(String regionId) { + /** + * label,value + */ + SchBaseRegion schBaseRegion = schBaseRegionMapper.selectById(regionId); + JSONArray res = new JSONArray(); + String pointStatusExplain = schBaseRegion.getPoint_status_explain(); + if (ObjectUtil.isEmpty(pointStatusExplain)) return res; + String[] explain = pointStatusExplain.split(","); + for (int i = 0; i < explain.length; i++) { + String[] status = explain[i].split("-"); + JSONObject point_status = new JSONObject(); + point_status.put("label", status[1]); + point_status.put("value", status[0]); + res.add(point_status); + } + return res; + } + + @Override + public JSONArray getPointTypeSelectById(String regionId) { + /** + * label,value + */ + SchBaseRegion schBaseRegion = schBaseRegionMapper.selectById(regionId); + JSONArray res = new JSONArray(); + String pointTypeExplain = schBaseRegion.getPoint_type_explain(); + if (ObjectUtil.isEmpty(pointTypeExplain)) return res; + String[] explain = pointTypeExplain.split(","); + for (int i = 0; i < explain.length; i++) { + String[] types = explain[i].split("-"); + JSONObject point_type = new JSONObject(); + point_type.put("label", types[1]); + point_type.put("value", types[0]); + res.add(point_type); + } + return res; + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/ReportController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/ReportController.class new file mode 100644 index 0000000..49aeb36 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/ReportController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/ReportController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/ReportController.java new file mode 100644 index 0000000..8d0cd4b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/ReportController.java @@ -0,0 +1,259 @@ +package org.nl.wms.sch.report; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.report.service.IReportService; +import org.nl.wms.sch.report.service.dto.ReportQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; + +@Slf4j +@RestController +@Api(tags = "报表管理") +@RequestMapping("/api/report") +public class ReportController { + + @Autowired + private IReportService reportService; + + @GetMapping + @Log("查询报表管理") + @ApiOperation("查询报表管理") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity query(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/yl/detail") + @Log("原料库库存明细") + @ApiOperation("原料库库存明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryYlDetail(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryYlDetail(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/yl/outdetail") + @Log("原料库工单库存明细") + @ApiOperation("原料库工单库存明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryYlOutDetail(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryYlOutDetail(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/yl/movedetail") + @Log("原料缓存区移库明细") + @ApiOperation("原料缓存区移库明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryMoveDetail(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryMoveDetail(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/yl/movedetail2") + @Log("回温区移库库存明细") + @ApiOperation("回温区移库库存明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryMoveDetail2(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryMoveDetail2(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/yl/in") + @Log("原材入库明细") + @ApiOperation("原材入库明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryYlIn(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryYlIn(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/yl/out") + @Log("原料库出库明细") + @ApiOperation("原料库出库明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryYlOut(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryYlOut(whereJson,page)),HttpStatus.OK); + } + + + @GetMapping("/hw/detail") + @Log("回温间库存明细") + @ApiOperation("回温间库存明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryHwDetail(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryHwDetail(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/hw/in") + @Log("回温间入库明细") + @ApiOperation("回温间入库明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryHwIn(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryHwIn(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/hw/inpending") + @Log("回温间待入库明细") + @ApiOperation("回温间待入库明细") + public ResponseEntity queryHwInPending(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryHwInPending(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/hw/out") + @Log("回温间出库存明细") + @ApiOperation("回温间出库明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryHwOut(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryHwOut(whereJson,page)),HttpStatus.OK); + } + + @GetMapping("/hw/outpending") + @Log("回温间待出库存明细") + @ApiOperation("回温间待出库明细") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity queryHwOutPending(ReportQuery whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(reportService.queryHwOutPending(whereJson,page)),HttpStatus.OK); + } + + @SneakyThrows + @GetMapping("/yl/detail/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + //@SaCheckPermission("@el.check('material:list')") + public void queryYlDetailDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryYlDetailDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/yl/in/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + //@SaCheckPermission("@el.check('material:list')") + public void queryYlInDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryYlInDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/yl/out/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + //@SaCheckPermission("@el.check('material:list')") + public void queryYlOutDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryYlOutDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/hw/detail/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + //@SaCheckPermission("@el.check('material:list')") + public void queryHwDetailDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryHwDetailDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/hw/in/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + //@SaCheckPermission("@el.check('material:list')") + public void queryHwInDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryHwInDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/hw/inpending/download") + @Log("待入库明细导出") + @ApiOperation("查询详情导出") + public void queryHwInPendingDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryHwInPendingDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/hw/out/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + public void queryHwOutDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryHwOutDownload(whereJson,page,response); + } + + @SneakyThrows + @GetMapping("/hw/outpending/download") + @Log("查询详情导出") + @ApiOperation("查询详情导出") + public void queryHwOutPendingDownload(ReportQuery whereJson, PageQuery page, HttpServletResponse response){ + reportService.queryHwOutPendingDownload(whereJson,page,response); + } + + @GetMapping("/getSupplierNameList") + @Log("查询供应商名称列表") + @ApiOperation("查询供应商名称列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getSupplierNameList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getSupplierNameList()),HttpStatus.OK); + } + + @GetMapping("/getNowSupplierNameList") + @Log("查询供应商名称列表") + @ApiOperation("查询供应商名称列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getNowSupplierNameList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getNowSupplierNameList()),HttpStatus.OK); + } + + @GetMapping("/getProductDescriptionList") + @Log("查询物料名称列表") + @ApiOperation("查询物料名称列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getProductDescriptionList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getProductDescriptionList()),HttpStatus.OK); + } + + @GetMapping("/getNowProductDescriptionList") + @Log("查询物料名称列表") + @ApiOperation("查询物料名称列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getNowProductDescriptionList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getNowProductDescriptionList()),HttpStatus.OK); + } + + @GetMapping("/getLotSNList") + @Log("查询晶棒编号列表") + @ApiOperation("查询晶棒编号列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getLotSNList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getLotSNList()),HttpStatus.OK); + } + + @GetMapping("/getIngotBatchList") + @Log("查询批次号列表") + @ApiOperation("查询批次号列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getIngotBatchList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getIngotBatchList()),HttpStatus.OK); + } + + @GetMapping("/getNowIngotBatchList") + @Log("查询批次号列表") + @ApiOperation("查询批次号列表") + //@SaCheckPermission("@el.check('material:list')") + public ResponseEntity getNowIngotBatchList(){ + return new ResponseEntity<>(TableDataInfo.build(reportService.getNowIngotBatchList()),HttpStatus.OK); + } + + @PostMapping("/hwtask") + @Log("回温出库") + @ApiOperation("回温出库") + public ResponseEntity hwtask(@RequestBody JSONObject param){ + log.info("回温出库任务:"+param.toString()); + reportService.hwtask(param); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/IReportService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/IReportService.class new file mode 100644 index 0000000..726fea8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/IReportService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/IReportService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/IReportService.java new file mode 100644 index 0000000..096625c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/IReportService.java @@ -0,0 +1,144 @@ +package org.nl.wms.sch.report.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.sch.report.service.dto.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + + +public interface IReportService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(ReportQuery whereJson, PageQuery pageable); + + /** + * 回温间库存明细 + * @param whereJson + * @param pageable + * @return + */ + IPage queryHwDetail(ReportQuery whereJson, PageQuery pageable); + + /** + * 回温间入库明细------------------------ + * @param whereJson + * @param pageable + * @return + */ + IPage queryHwIn(ReportQuery whereJson, PageQuery pageable); + + /** + * 回温间待入库明细--------------- + * @param whereJson + * @param pageable + * @return + */ + IPage queryHwInPending(ReportQuery whereJson, PageQuery pageable); + + /** + * 回温间出库明细------------------ + * @param whereJson + * @param pageable + * @return + */ + IPage queryHwOut(ReportQuery whereJson, PageQuery pageable); + + /** + * 回温间待出库存明细------------ + * @param whereJson + * @param pageable + * @return + */ + IPage queryHwOutPending(ReportQuery whereJson, PageQuery pageable); + + /** + * 原料库库存明细------- + * @param whereJson + * @param pageable + * @return + */ + IPage queryYlDetail(ReportQuery whereJson, PageQuery pageable); + + /** + * 原料库工单库存明细------ + * @param whereJson + * @param pageable + * @return + */ + IPage queryYlOutDetail(ReportQuery whereJson, PageQuery pageable); + + /** + * 查询原料缓存区库存----- + * @param whereJson + * @param pageable + * @return + */ + IPage queryMoveDetail(ReportQuery whereJson, PageQuery pageable); + + /** + * 查询回温区库存----- + * @param whereJson + * @param pageable + * @return + */ + IPage queryMoveDetail2(ReportQuery whereJson, PageQuery pageable); + + /** + * 原材入库明细-------- + * @param whereJson + * @param pageable + * @return + */ + IPage queryYlIn(ReportQuery whereJson, PageQuery pageable); + + /** + * 原料库出库明细-------- + * @param whereJson + * @param pageable + * @return + */ + IPage queryYlOut(ReportQuery whereJson, PageQuery pageable); + + void queryYlDetailDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryYlInDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryYlOutDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryHwDetailDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryHwInDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryHwInPendingDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryHwOutDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + void queryHwOutPendingDownload(ReportQuery whereJson, PageQuery pageable, HttpServletResponse response) throws IOException; + + List getSupplierNameList(); + + List getNowSupplierNameList(); + + List getProductDescriptionList(); + + List getNowProductDescriptionList(); + + List getLotSNList(); + + List getIngotBatchList(); + + List getNowIngotBatchList(); + + void hwtask(JSONObject param); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.class new file mode 100644 index 0000000..b3969ed Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.java new file mode 100644 index 0000000..6e06e34 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.java @@ -0,0 +1,65 @@ +package org.nl.wms.sch.report.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Select; +import org.nl.wms.sch.report.service.dto.*; + +import java.util.List; + +/** +* @author lyd +* @date 2023-05-16 +**/ +public interface ReportMapper extends BaseMapper { + + /** + * 分页查找 + * @return + */ + IPage queryReport(IPage pages, ReportQuery query); + + /** + * 分页查找 + * @return + */ + IPage queryYlDetail(IPage pages, ReportQuery query); + + IPage queryYlOutDetail(IPage pages, ReportQuery query); + + IPage queryMoveDetail(IPage pages, ReportQuery query); + + IPage queryMoveDetail2(IPage pages, ReportQuery query); + + IPage queryYlIn(IPage pages, ReportQuery query); + + IPage queryYlOut(IPage pages, ReportQuery query); + + IPage queryHwDetail(IPage pages, ReportQuery query); + + IPage queryHwIn(IPage pages, ReportQuery query); + + IPage queryHwInPending(IPage pages, ReportQuery query); + + IPage queryHwOut(IPage pages, ReportQuery query); + + IPage queryHwOutPending(IPage pages, ReportQuery query); + + @Select("select supplierName from sch_base_material group by supplierName") + List getSupplierNameList(); + + List getNowSupplierNameList(); + + @Select("select productDescription from sch_base_material group by productDescription") + List getProductDescriptionList(); + + List getNowProductDescriptionList(); + + @Select("select lotSN from sch_base_material") + List getLotSNList(); + + @Select("select ingotBatch from sch_base_material group by ingotBatch") + List getIngotBatchList(); + + List getNowIngotBatchList(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.xml new file mode 100644 index 0000000..2767195 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dao/mapper/ReportMapper.xml @@ -0,0 +1,716 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/HwDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/HwDto.class new file mode 100644 index 0000000..41ea5a1 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/HwDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/HwDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/HwDto.java new file mode 100644 index 0000000..c20dd9a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/HwDto.java @@ -0,0 +1,43 @@ +package org.nl.wms.sch.report.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class HwDto implements Serializable { + /** 点位编码 */ + private String pointCode; + /** 点位名称 */ + private String pointName; + /** 区域编码 */ + private String regionCode; + /** 区域名称 */ + private String regionName; + /** 点位名称 */ + private String pointCode2; + /** 区域名称 */ + private String regionName2; + /** 子托号 */ + private String subTray; + /** 母拖号 */ + private String motherTray; + /** 物料名称 */ + private String productDescription; + /** 供应商名称 */ + private String supplierName; + /** 入库时间 */ + private String updateTime; + /** 回温时间 */ + private String standingTime; + /** 已回温时间 */ + private String usedTime; + /** 数量 */ + private String number; + /** 棒源等级 */ + private String siliconGrade; + /** 客户来料批次号 */ + private String ingotBatch; + /** 任务号 */ + private String ing_task_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportDto.class new file mode 100644 index 0000000..c83da1b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportDto.java new file mode 100644 index 0000000..9207430 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportDto.java @@ -0,0 +1,29 @@ +package org.nl.wms.sch.report.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ReportDto implements Serializable { + /** 点位编码 */ + private String pointCode; + /** 点位名称 */ + private String pointName; + /** 区域编码 */ + private String regionCode; + /** 区域名称 */ + private String regionName; + /** 子托号 */ + private String subTray; + /** 母拖号 */ + private String motherTray; + /** 物料名称 */ + private String productDescription; + /** 供应商名称 */ + private String supplierName; + /** + * 客户来料批次号 + */ + private String ingotBatch; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportQuery.class new file mode 100644 index 0000000..9e71956 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportQuery.java new file mode 100644 index 0000000..20d23f3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/ReportQuery.java @@ -0,0 +1,36 @@ +package org.nl.wms.sch.report.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ReportQuery implements Serializable { + //托盘号 + private String palletSN; + //物料条码号 + private String lotSN; + //物料名称 + private String productName; + //供应商编码 + private String productDescription; + //供应商编码 + private String supplierCode; + //供应商名称 + private String supplierName; + //绑定状态 + private String group_bind_material_status; + //点位编码 + private String point_code; + + private String region_code; + + private String ingotBatch; + + private String start_point; + private String end_point; + //每托根数 + private Integer number; + //工单状态 + private Integer status; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YCLKCDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YCLKCDto.class new file mode 100644 index 0000000..c93229a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YCLKCDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YCLKCDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YCLKCDto.java new file mode 100644 index 0000000..9f32cff --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YCLKCDto.java @@ -0,0 +1,38 @@ +package org.nl.wms.sch.report.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class YCLKCDto implements Serializable { + /** 点位编码 */ + private String pointCode; + /** 区域名称 */ + private String regionName; + /** 子托号 */ + private String subTray; + /** 母拖号 */ + private String motherTray; + /** 出库单号 */ + private String somtOrderNo; + /** 生产工单 */ + private String moname; + /** 工单状态 */ + private String status; + /** 回温模式 */ + private String mode; + /** 入库时间 */ + private String updateTime; + /** 棒源等级 */ + private String siliconGrade; + /** 物料名称 */ + private String productDescription; + /** 供应商名称 */ + private String supplierName; + /** 客户来料批次号 */ + private String ingotBatch; + /** 数量 */ + private String number; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YlDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YlDto.class new file mode 100644 index 0000000..2b7ff37 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YlDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YlDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YlDto.java new file mode 100644 index 0000000..8e12bdb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/dto/YlDto.java @@ -0,0 +1,102 @@ +package org.nl.wms.sch.report.service.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class YlDto implements Serializable { + /** + * 点位编码 + */ + private String pointCode; + /** + * 点位名称 + */ + private String pointName; + /** + * 区域编码 + */ + private String regionCode; + /** + * 区域名称 + */ + private String regionName; + /** + * 目的点位编码 + */ + private String pointCode2; + /** + * 目的区域名称 + */ + private String regionName2; + /** + * 子托号 + */ + private String subTray; + /** + * 母拖号 + */ + private String motherTray; + /** + * 物料名称 + */ + private String productDescription; + /** + * 供应商名称 + */ + private String supplierName; + /** + * 入库时间 + */ + private String updateTime; + /** + * 棒源等级 + */ + private String siliconGrade; + /** + * 客户来料批次号 + */ + private String ingotBatch; + /** + * 晶棒号 + */ + private String lotSN; + /** + * 来料长度 + */ + private String incomingLength; + /** + * 来料重量 + */ + private String incomingWeight; + /** + * 物料编码 + */ + private String productName; + /** + * 来料缺陷长度 + */ + private String incomingchipping; + /** + * 拼棒类型 + */ + private String planZBNum; + /** + * 极性 + */ + private String siliconPolarity; + /** + * 重量折算系数 + */ + private String weightCoefficientValue; + /** + * 线径 + */ + private String lineDiameter; + //出库状态 + private String status; + //工单 + private String moname; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/impl/ReportServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/impl/ReportServiceImpl.class new file mode 100644 index 0000000..6562e19 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/impl/ReportServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/impl/ReportServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/impl/ReportServiceImpl.java new file mode 100644 index 0000000..1647e42 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/report/service/impl/ReportServiceImpl.java @@ -0,0 +1,385 @@ +package org.nl.wms.sch.report.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.FileUtil; +import org.nl.config.language.LangProcess; +import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.report.service.IReportService; +import org.nl.wms.sch.report.service.dao.mapper.ReportMapper; +import org.nl.wms.sch.report.service.dto.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class ReportServiceImpl extends ServiceImpl implements IReportService { + + @Autowired + private ReportMapper reportMapper; + @Autowired + private AcsToWmsService acsToWmsService; + @Autowired + private ISchBasePointService pointService; + + @Override + public IPage queryAll(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryReport(pages, query); + return pages; + } + + @Override + public IPage queryYlDetail(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryYlDetail(pages, query); + return pages; + } + + @Override + public IPage queryYlOutDetail(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryYlOutDetail(pages, query); + return pages; + } + + @Override + public IPage queryMoveDetail(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryMoveDetail(pages, query); + return pages; + } + + @Override + public IPage queryMoveDetail2(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryMoveDetail2(pages, query); + return pages; + } + + @Override + public IPage queryYlIn(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryYlIn(pages, query); + return pages; + } + + @Override + public IPage queryYlOut(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryYlOut(pages, query); + return pages; + } + + public IPage queryHwDetail(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryHwDetail(pages, query); + return pages; + } + + public IPage queryHwIn(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryHwIn(pages, query); + return pages; + } + + @Override + public IPage queryHwInPending(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryHwInPending(pages, query); + return pages; + } + + public IPage queryHwOut(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryHwOut(pages, query); + return pages; + } + + public IPage queryHwOutPending(ReportQuery query, PageQuery pageQuery){ + IPage pages = new Page<>(pageQuery.getPage() + 1, pageQuery.getSize()); + pages = reportMapper.queryHwOutPending(pages, query); + return pages; + } + + @Override + public void queryYlDetailDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryYlDetail(query,pageQuery); + List> list = new ArrayList<>(); + for(YlDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("点位编码",detailDto.getPointCode()); + mp.put("点位名称",detailDto.getPointCode()); + mp.put("区域编码",detailDto.getRegionCode()); + mp.put("区域名称",detailDto.getRegionName()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("入库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + if("1".equals(detailDto.getStatus())){ + mp.put("出库状态","出库中"); + }else{ + mp.put("出库状态","未出库"); + } + mp.put("工单编号",detailDto.getMoname()); + mp.put("晶棒号",detailDto.getLotSN()); + mp.put("来料长度",detailDto.getIncomingLength()); + mp.put("来料重量",detailDto.getIncomingWeight()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryYlInDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryYlIn(query,pageQuery); + List> list = new ArrayList<>(); + for(YlDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("点位编码",detailDto.getPointCode()); + mp.put("点位名称",detailDto.getPointCode()); + mp.put("区域编码",detailDto.getRegionCode()); + mp.put("区域名称",detailDto.getRegionName()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("入库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("晶棒号",detailDto.getLotSN()); + mp.put("来料长度",detailDto.getIncomingLength()); + mp.put("来料重量",detailDto.getIncomingWeight()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryYlOutDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryYlOut(query,pageQuery); + List> list = new ArrayList<>(); + for(YlDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("点位编码",detailDto.getPointCode()); + mp.put("区域名称",detailDto.getRegionName()); + mp.put("目的点位编码",detailDto.getPointCode2()); + mp.put("目的区域名称",detailDto.getRegionName2()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("出库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("晶棒号",detailDto.getLotSN()); + mp.put("来料长度",detailDto.getIncomingLength()); + mp.put("来料重量",detailDto.getIncomingWeight()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryHwDetailDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryHwDetail(query,pageQuery); + List> list = new ArrayList<>(); + for(HwDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("点位编码",detailDto.getPointCode()); + mp.put("区域名称",detailDto.getRegionName()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("入库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("回温时间",detailDto.getStandingTime()); + mp.put("已回温时间",detailDto.getUsedTime()); + mp.put("每托数量(根)",detailDto.getNumber()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryHwInDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryHwIn(query,pageQuery); + List> list = new ArrayList<>(); + for(HwDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("点位编码",detailDto.getPointCode()); + mp.put("区域名称",detailDto.getRegionName()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("入库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("已回温时间",detailDto.getUsedTime()); + mp.put("每托数量(根)",detailDto.getNumber()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryHwInPendingDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryHwInPending(query,pageQuery); + List> list = new ArrayList<>(); + for(HwDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("待入库点位编码",detailDto.getPointCode()); + mp.put("待入库区域名称",detailDto.getRegionName()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("每托数量(根)",detailDto.getNumber()); + mp.put("更新时间",detailDto.getUpdateTime()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryHwOutDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryHwOut(query,pageQuery); + List> list = new ArrayList<>(); + for(HwDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("点位编码",detailDto.getPointCode()); + mp.put("区域名称",detailDto.getRegionName()); + mp.put("目的点位编码",detailDto.getPointCode2()); + mp.put("目的区域名称",detailDto.getRegionName2()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("出库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("回温时间",detailDto.getStandingTime()); + mp.put("已回温时间",detailDto.getUsedTime()); + mp.put("每托数量(根)",detailDto.getNumber()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void queryHwOutPendingDownload(ReportQuery query, PageQuery pageQuery, HttpServletResponse response) throws IOException { + pageQuery.setSize(99999); + IPage pages = this.queryHwOutPending(query,pageQuery); + List> list = new ArrayList<>(); + for(HwDto detailDto:pages.getRecords()){ + Map mp = new LinkedHashMap<>(); + mp.put("待出库点位编码",detailDto.getPointCode()); + mp.put("待出库区域编码",detailDto.getRegionName()); + mp.put("目的点位编码",detailDto.getPointCode2()); + mp.put("目的区域名称",detailDto.getRegionName2()); + mp.put("子托号",detailDto.getSubTray()); + mp.put("母拖号",detailDto.getMotherTray()); + mp.put("物料名称",detailDto.getProductDescription()); + mp.put("供应商名称",detailDto.getSupplierName()); + mp.put("入库时间",detailDto.getUpdateTime()); + mp.put("棒源等级",detailDto.getSiliconGrade()); + mp.put("客户来料批次号",detailDto.getIngotBatch()); + mp.put("已回温时间",detailDto.getUsedTime()); + mp.put("每托数量(根)",detailDto.getNumber()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + + + public List getSupplierNameList(){ + return reportMapper.getSupplierNameList(); + } + + public List getNowSupplierNameList(){ + return reportMapper.getNowSupplierNameList(); + } + + public List getProductDescriptionList(){ + return reportMapper.getProductDescriptionList(); + } + + public List getNowProductDescriptionList(){ + return reportMapper.getNowProductDescriptionList(); + } + + public List getLotSNList(){ + return reportMapper.getLotSNList(); + } + + public List getIngotBatchList(){ + return reportMapper.getIngotBatchList(); + } + + public List getNowIngotBatchList(){ + return reportMapper.getNowIngotBatchList(); + } + + + @Override + public void hwtask(JSONObject param){ + param.put("request_medthod_code", "POINTTask"); + param.put("request_medthod_name", "点对点任务"); + param.put("device_code",param.getString("start_point")); + BaseResponse result = acsToWmsService.pdaApply(param); + Integer resultCode = result.getCode(); + if(resultCode.equals(200)){ + //更新起点终点任务号 + SchBasePoint schBasePoint = pointService.getById(param.getString("start_point")); + SchBasePoint nextSchBasePoint = pointService.getById(param.getString("next_point")); + Map parameters = result.getParameters(); + //设置初始值 + schBasePoint.setIng_task_code("1"); + nextSchBasePoint.setIng_task_code("1"); + if(ObjectUtil.isNotNull(parameters)){ + String task_code = parameters.get("task_code"); + if(ObjectUtil.isNotEmpty(task_code)){ + schBasePoint.setIng_task_code(task_code); + nextSchBasePoint.setIng_task_code(task_code); + } + } + //发起任务时先把点位占用,防止发起重复任务 + pointService.update(schBasePoint); + pointService.update(nextSchBasePoint); + }else{ + throw new BadRequestException(LangProcess.msg("error_report",result.getMessage())); + + } + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskController.class new file mode 100644 index 0000000..894d7d8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskController.java new file mode 100644 index 0000000..f44ae3b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskController.java @@ -0,0 +1,97 @@ +package org.nl.wms.sch.task.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-15 +**/ +@Slf4j +@RestController +@Api(tags = "任务管理管理") +@RequestMapping("/api/schBaseTask") +@Lazy +public class SchBaseTaskController { + + @Autowired + private ISchBaseTaskService schBaseTaskService; + + @GetMapping + @Log("查询任务管理") + @ApiOperation("查询任务管理") + //@SaCheckPermission("@el.check('schBaseTask:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增任务管理") + @ApiOperation("新增任务管理") + //@SaCheckPermission("@el.check('schBaseTask:add')") + public ResponseEntity create(@Validated @RequestBody SchBaseTask entity){ + schBaseTaskService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改任务管理") + @ApiOperation("修改任务管理") + //@SaCheckPermission("@el.check('schBaseTask:edit')") + public ResponseEntity update(@Validated @RequestBody SchBaseTask entity){ + schBaseTaskService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除任务管理") + @ApiOperation("删除任务管理") + //@SaCheckPermission("@el.check('schBaseTask:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + schBaseTaskService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/taskStatusList") + @Log("任务状态下拉框") + @ApiOperation("任务状态下拉框") + @SaIgnore + //@SaCheckPermission("@el.check('schBaseTask:list')") + public ResponseEntity getTaskStatusList(){ + return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.getTaskStatusList()),HttpStatus.OK); + } + + @PutMapping("/operation") + @Log("任务操作") + @ApiOperation("任务操作") + //@SaCheckPermission("task:edit") + public ResponseEntity update(@RequestBody Map map) { + schBaseTaskService.operation(map); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/move") + @Log("管理端一键移库") + @ApiOperation("管理端一键移库") + @SaIgnore + //@PreAuthorize("@el.check('task:list')") + public ResponseEntity move() { + schBaseTaskService.move(); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.class new file mode 100644 index 0000000..7f38cbc Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java new file mode 100644 index 0000000..86f6b7c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/controller/SchBaseTaskconfigController.java @@ -0,0 +1,66 @@ +package org.nl.wms.sch.task.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-05-15 +**/ +@Slf4j +@RestController +@Api(tags = "任务配置管理") +@RequestMapping("/api/schBaseTaskconfig") +public class SchBaseTaskconfigController { + + @Autowired + private ISchBaseTaskconfigService schBaseTaskconfigService; + + @GetMapping + @Log("查询任务配置") + @ApiOperation("查询任务配置") + //@SaCheckPermission("@el.check('schBaseTaskconfig:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(schBaseTaskconfigService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增任务配置") + @ApiOperation("新增任务配置") + //@SaCheckPermission("@el.check('schBaseTaskconfig:add')") + public ResponseEntity create(@Validated @RequestBody SchBaseTaskconfig entity){ + schBaseTaskconfigService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改任务配置") + @ApiOperation("修改任务配置") + //@SaCheckPermission("@el.check('schBaseTaskconfig:edit')") + public ResponseEntity update(@Validated @RequestBody SchBaseTaskconfig entity){ + schBaseTaskconfigService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除任务配置") + @ApiOperation("删除任务配置") + //@SaCheckPermission("@el.check('schBaseTaskconfig:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + schBaseTaskconfigService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskService.class new file mode 100644 index 0000000..5dd4c55 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskService.java new file mode 100644 index 0000000..d0d1226 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskService.java @@ -0,0 +1,114 @@ +package org.nl.wms.sch.task.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author lyd + * @description 服务接口 + * @date 2023-05-15 + **/ +public interface ISchBaseTaskService extends IService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + + /** + * 创建 + * + * @param entity / + */ + String create(SchBaseTask entity); + + /** + * 编辑 + * + * @param entity / + */ + void update(SchBaseTask entity); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Set ids); + + + /** + * 根据任务配置查询下发中的列表 + * + * @param config_code 任务配置编码 + * @return 未完成任务列表 + */ + List findCreateTasksByTaskConfig(String config_code); + + /** + * 根据任务号和点位查询未完成的任务 + * @param task_code + * @param point_code2 + * @return + */ + Integer findUnFinishTasksByPoint_code2(String task_code, String point_code2); + + + /** + * 根据任务号和子托盘查询未完成的任务 + * @param task_code + * @param sub_tray + * @return + */ + Integer findUnFinishTasksBySub_tray(String task_code, String sub_tray); + + /** + * 根据任务类型和任务状态查询任务 + * @param config_code + * @param status + * @return + */ + List findTasksByTaskStatus(String config_code, TaskStatus status); + + /** + * 任务申请 + * + * @param param / + */ + void apply(JSONObject param); + + /** + * 获取任务状态下拉框 + * @return + */ + JSONArray getTaskStatusList(); + + /** + * 任务操作 + * + * @param param + */ + void operation(Map param); + + + /** + * 管理端一键移库 + * + * @return + */ + void move(); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskconfigService.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskconfigService.class new file mode 100644 index 0000000..89e7148 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskconfigService.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskconfigService.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskconfigService.java new file mode 100644 index 0000000..1d28781 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/ISchBaseTaskconfigService.java @@ -0,0 +1,43 @@ +package org.nl.wms.sch.task.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-05-15 +**/ +public interface ISchBaseTaskconfigService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(SchBaseTaskconfig entity); + + /** + * 编辑 + * @param entity / + */ + void update(SchBaseTaskconfig entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTask.class new file mode 100644 index 0000000..9a030ea Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTask.java new file mode 100644 index 0000000..c26b646 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -0,0 +1,135 @@ +package org.nl.wms.sch.task.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-15 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sch_base_task") +public class SchBaseTask implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "task_id", type = IdType.NONE) + @ApiModelProperty(value = "任务标识") + private String task_id; + + + @ApiModelProperty(value = "任务编码") + private String task_code; + + + @ApiModelProperty(value = "任务状态") + private String task_status; + + @ApiModelProperty(value = "配置编码") + private String config_code; + + @ApiModelProperty(value = "点位1") + private String point_code1; + + @ApiModelProperty(value = "点位2") + private String point_code2; + + @ApiModelProperty(value = "点位3") + private String point_code3; + + @ApiModelProperty(value = "点位4") + private String point_code4; + + @ApiModelProperty(value = "组盘标识") + private String group_id; + + @ApiModelProperty(value = "载具类型") + private String vehicle_type; + + @ApiModelProperty(value = "载具数量") + private Integer vehicle_qty; + + @ApiModelProperty(value = "载具编码") + private String vehicle_code; + + @ApiModelProperty(value = "载具编码2") + private String vehicle_code2; + + @ApiModelProperty(value = "处理状态") + private String handle_status; + + @ApiModelProperty(value = "车号") + private String car_no; + + + @ApiModelProperty(value = "任务组标识") + private String task_group_id; + + @ApiModelProperty(value = "任务组顺序号") + private Integer task_group_seq; + + @ApiModelProperty(value = "任务完成类型") + private String finished_type; + + @ApiModelProperty(value = "生成方式") + private String create_mode; + + @ApiModelProperty(value = "链路标识") + private String acs_trace_id; + + @ApiModelProperty(value = "生成任务的请求参数") + private String request_param; + + @ApiModelProperty(value = "下发任务的请求参数") + private String response_param; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "额外组盘信息") + private String ext_group_data; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @ApiModelProperty(value = "点位1高度") + private String point_code1_height="0"; + + @ApiModelProperty(value = "点位2高度") + private String point_code2_height="0"; + + @TableField(exist = false) + private String task_type; + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.class new file mode 100644 index 0000000..db3af99 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java new file mode 100644 index 0000000..e7423ca --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/SchBaseTaskconfig.java @@ -0,0 +1,153 @@ +package org.nl.wms.sch.task.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.io.Serializable; +import java.util.List; + +/** +* @description / +* @author lyd +* @date 2023-05-15 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sch_base_taskconfig") +public class SchBaseTaskconfig implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "config_id", type = IdType.NONE) + @ApiModelProperty(value = "配置标识") + private String config_id; + + @ApiModelProperty(value = "配置编码") + private String config_code; + + @ApiModelProperty(value = "配置名称") + private String config_name; + + @ApiModelProperty(value = "路由编码") + private String route_plan_code; + + @ApiModelProperty(value = "任务取放类型") + private String task_qf_type; + + @ApiModelProperty(value = "acs任务类型") + private String acs_task_type; + + @ApiModelProperty(value = "任务名字") + private String task_name; + + @ApiModelProperty(value = "任务类型") + private String task_type; + + @ApiModelProperty(value = "任务方向") + private String task_direction; + + @ApiModelProperty(value = "优先级") + private String priority; + + @ApiModelProperty(value = "允许最大任务生成数") + private Integer task_create_max_num; + + @ApiModelProperty(value = "允许最大任务下发数") + private Integer task_issue_max_num; + + @ApiModelProperty(value = "是否自动下发") + private Boolean is_auto_issue; + + @ApiModelProperty(value = "起点区域配置") + private String start_region_str; + + @ApiModelProperty(value = "终点区域配置") + private String next_region_str; + + @ApiModelProperty(value = "起点点位前缀") + private String start_point_pre; + + @ApiModelProperty(value = "终点点位前缀") + private String next_region_pre; + + @ApiModelProperty(value = "是否校验工单") + private Boolean is_check_workorder; + + @ApiModelProperty(value = "是否判断起点锁定") + private Boolean is_check_start_lock; + + @ApiModelProperty(value = "是否立即创建") + private Boolean is_immediate_create; + + @ApiModelProperty(value = "是否判断终点锁定") + private Boolean is_check_next_lock; + + @ApiModelProperty(value = "是否起点自动") + private Boolean is_start_auto; + + @ApiModelProperty(value = "是否终点自动") + private Boolean is_next_auto; + + @ApiModelProperty(value = "是否锁定起点") + private Boolean is_lock_start; + + @ApiModelProperty(value = "是否锁定终点") + private Boolean is_lock_next; + + @ApiModelProperty(value = "生成任务的请求参数") + private String request_param; + + @ApiModelProperty(value = "下发任务的请求参数") + private String response_param; + + @ApiModelProperty(value = "是否按组控制下发顺序") + private Boolean is_group_congrol_issue_seq; + + @ApiModelProperty(value = "任务未完成通知时间数") + private BigDecimal unfinish_notify_time; + + @ApiModelProperty(value = "sql配置") + private String sql_param; + + @ApiModelProperty(value = "车间编码") + private String workshop_code; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "是否启用") + private Boolean is_used; + + @ApiModelProperty(value = "是否删除") + private Boolean is_delete; + + @ApiModelProperty(value = "创建人") + private String create_id; + + @ApiModelProperty(value = "创建人") + private String create_name; + + @ApiModelProperty(value = "创建时间") + private String create_time; + + @ApiModelProperty(value = "修改人") + private String update_id; + + @ApiModelProperty(value = "修改人") + private String update_name; + + @ApiModelProperty(value = "修改时间") + private String update_time; + + @TableField(exist = false) + private List start_region_strs; + + @TableField(exist = false) + private List next_region_strs; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.class new file mode 100644 index 0000000..adb89c2 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.java new file mode 100644 index 0000000..a898965 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.task.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.task.service.dao.SchBaseTask; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public interface SchBaseTaskMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.xml new file mode 100644 index 0000000..9544698 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.class new file mode 100644 index 0000000..fa0dbbf Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.java new file mode 100644 index 0000000..eeb14fe --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.task.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public interface SchBaseTaskconfigMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.xml new file mode 100644 index 0000000..a9acdc0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dao/mapper/SchBaseTaskconfigMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.class new file mode 100644 index 0000000..769505f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java new file mode 100644 index 0000000..28a972f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java @@ -0,0 +1,108 @@ +package org.nl.wms.sch.task.service.dto; + +import java.math.BigDecimal; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-15 +**/ +@Data +public class SchBaseTaskDto implements Serializable { + + /** 任务编码 */ + private String task_code; + + + /** 任务状态 */ + private String task_status; + + /** 配置编码 */ + private String config_code; + + /** 点位1 */ + private String point_code1; + + /** 点位2 */ + private String point_code2; + + /** 点位3 */ + private String point_code3; + + /** 点位4 */ + private String point_code4; + + @ApiModelProperty(value = "组盘标识") + private String group_id; + + /** 载具类型 */ + private String vehicle_type; + + /** 载具数量 */ + private BigDecimal vehicle_qty; + + /** 载具编码 */ + private String vehicle_code; + + /** 处理状态 */ + private String handle_status; + + /** 车号 */ + private String car_no; + + + /** 任务组标识 */ + private Long task_group_id; + + /** 任务组顺序号 */ + private BigDecimal task_group_seq; + + /** 任务完成类型 */ + private String finished_type; + + /** 生成方式 */ + private String create_mode; + + /** 链路标识 */ + private String acs_trace_id; + + /** 生成任务的请求参数 */ + private String request_param; + + /** 下发任务的请求参数 */ + private String response_param; + + /** 车间编码 */ + private String workshop_code; + + /** 额外组盘信息 */ + private String ext_group_data; + + /** 备注 */ + private String remark; + + /** 是否删除 */ + private Boolean is_delete; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskQuery.class new file mode 100644 index 0000000..409b616 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskQuery.java new file mode 100644 index 0000000..76086e8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.task.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.sch.task.service.dao.SchBaseTask; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public class SchBaseTaskQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigDto.class new file mode 100644 index 0000000..a2484d9 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigDto.java new file mode 100644 index 0000000..eb845ba --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigDto.java @@ -0,0 +1,134 @@ +package org.nl.wms.sch.task.service.dto; + +import java.math.BigDecimal; +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-05-15 +**/ +@Data +public class SchBaseTaskconfigDto implements Serializable { + + /** 配置标识 */ + private String config_id; + + /** 配置编码 */ + private String config_code; + + /** 配置名称 */ + private String config_name; + + /** 路由编码 */ + private String route_plan_code; + + /** 任务取放类型 */ + private String task_qf_type; + + /** acs任务类型 */ + private String acs_task_type; + + /** 任务名字 */ + private String task_name; + + /** 任务类型 */ + private String task_type; + + /** 优先级 */ + private String priority; + + /** 任务方向 **/ + private String task_direction; + + /** 允许最大任务生成数 */ + private Integer task_create_max_num; + + /** 允许最大任务下发数 */ + private Integer task_issue_max_num; + + /** 是否自动下发 */ + private Boolean is_auto_issue; + + /** 起点区域配置 */ + private String start_region_str; + + /** 终点区域配置 */ + private String next_region_str; + + /** 起点点位前缀 */ + private String start_point_pre; + + /** 终点点位前缀 */ + private String next_region_pre; + + /** 是否校验工单 */ + private Boolean is_check_workorder; + + /** 是否判断起点锁定 */ + private Boolean is_check_start_lock; + + /** 是否立即创建 */ + private Boolean is_immediate_create; + + /** 是否判断终点锁定 */ + private Boolean is_check_next_lock; + + /** 是否起点自动 */ + private Boolean is_start_auto; + + /** 是否终点自动 */ + private Boolean is_next_auto; + + /** 是否锁定起点 */ + private Boolean is_lock_start; + + /** 是否锁定终点 */ + private Boolean is_lock_next; + + /** 生成任务的请求参数 */ + private String request_param; + + /** 下发任务的请求参数 */ + private String response_param; + + /** 是否按组控制下发顺序 */ + private Boolean is_group_congrol_issue_seq; + + /** 任务未完成通知时间数 */ + private BigDecimal unfinish_notify_time; + + /** sql配置 */ + private String sql_param; + + /** 车间编码 */ + private String workshop_code; + + /** 备注 */ + private String remark; + + /** 是否启用 */ + private Boolean is_used; + + /** 是否删除 */ + private Boolean is_delete; + + /** 创建人 */ + private String create_id; + + /** 创建人 */ + private String create_name; + + /** 创建时间 */ + private String create_time; + + /** 修改人 */ + private String update_id; + + /** 修改人 */ + private String update_name; + + /** 修改时间 */ + private String update_time; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigQuery.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigQuery.class new file mode 100644 index 0000000..a034d3f Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigQuery.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigQuery.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigQuery.java new file mode 100644 index 0000000..1ef82e5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/dto/SchBaseTaskconfigQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.sch.task.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; + +/** +* @author lyd +* @date 2023-05-15 +**/ +public class SchBaseTaskconfigQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.class new file mode 100644 index 0000000..d5ca872 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java new file mode 100644 index 0000000..32fa3c5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -0,0 +1,350 @@ +package org.nl.wms.sch.task.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.ext.service.AcsToWmsService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.task.TaskFactory; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author lyd + * @description 服务实现 + * @date 2023-05-15 + **/ +@Slf4j +@Service +@Lazy +public class SchBaseTaskServiceImpl extends ServiceImpl implements ISchBaseTaskService { + + @Autowired + private SchBaseTaskMapper schBaseTaskMapper; + @Autowired + private SchBaseTaskconfigMapper schBaseTaskconfigMapper; + + @Autowired + private TaskFactory taskFactory; + + @Autowired + private ISchBasePointService schBasePointService; + + @Autowired + private AcsToWmsService acsToWmsService; + @Autowired + private ISchBasePointService pointService; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String task_code = ObjectUtil.isNotEmpty(whereJson.get("task_code")) ? whereJson.get("task_code").toString() : null; + String vehicle_code = ObjectUtil.isNotEmpty(whereJson.get("vehicle_code")) ? whereJson.get("vehicle_code").toString() : null; + String point_code = ObjectUtil.isNotEmpty(whereJson.get("point_code")) ? whereJson.get("point_code").toString() : null; + String begin_time = ObjectUtil.isNotEmpty(whereJson.get("begin_time")) ? whereJson.get("begin_time").toString() : null; + String end_time = ObjectUtil.isNotEmpty(whereJson.get("end_time")) ? whereJson.get("end_time").toString() : null; + String more_task_status = ObjectUtil.isNotEmpty(whereJson.get("more_task_status")) ? whereJson.get("more_task_status").toString() : null; + List collect = ObjectUtil.isNotEmpty(more_task_status) ? Arrays.stream(more_task_status.split(",")).collect(Collectors.toList()) : null; + String unFinished = null; + if (collect != null) { + if (collect.contains(TaskStatus.UNFINISHED.getCode())) { + collect = null; + unFinished = TaskStatus.EXECUTING.getCode(); + } + } + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(task_code), SchBaseTask::getTask_code, task_code) + .eq(ObjectUtil.isNotEmpty(vehicle_code), SchBaseTask::getVehicle_code, vehicle_code) + .eq(ObjectUtil.isNotEmpty(point_code), SchBaseTask::getPoint_code1, point_code) + .ge(ObjectUtil.isNotEmpty(begin_time), SchBaseTask::getCreate_time, begin_time) + .le(ObjectUtil.isNotEmpty(end_time), SchBaseTask::getCreate_time, end_time) + .in(ObjectUtil.isNotEmpty(collect), SchBaseTask::getTask_status, collect) + .le(ObjectUtil.isNotEmpty(unFinished), SchBaseTask::getTask_status, unFinished) + .orderByDesc(SchBaseTask::getUpdate_time); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + schBaseTaskMapper.selectPage(pages, lam); + return pages; + } + + + @Override + public void update(SchBaseTask entity) { + SchBaseTask dto = schBaseTaskMapper.selectById(entity.getTask_id()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + schBaseTaskMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + schBaseTaskMapper.deleteBatchIds(ids); + } + + @Override + public List findCreateTasksByTaskConfig(String config_code) { + Assert.notNull(config_code, "任务配置编码不能为空!"); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(SchBaseTask::getConfig_code, config_code) + .ne(SchBaseTask::getIs_delete, true) + .gt(SchBaseTask::getTask_status, TaskStatus.APPLY.getCode()) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()); + List schBaseTasks = schBaseTaskMapper.selectList(lam); + return schBaseTasks; + } + @Override + public Integer findUnFinishTasksByPoint_code2(String task_code, String point_code2) { + Assert.notNull(point_code2, "点位不能为空!"); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .ne(ObjectUtil.isNotEmpty(task_code),SchBaseTask::getTask_code, task_code)// 不是当前任务 + .and(slam -> slam.eq(SchBaseTask::getPoint_code1, point_code2) + .or() + .eq(SchBaseTask::getPoint_code2, point_code2) + .or() + .eq(SchBaseTask::getPoint_code3, point_code2) + ) + .eq(SchBaseTask::getIs_delete, false); + Integer schBaseTasks = schBaseTaskMapper.selectCount(lam); + return schBaseTasks; + } + + @Override + public Integer findUnFinishTasksBySub_tray(String task_code, String sub_tray) { + Assert.notNull(sub_tray, "子托盘不能为空!"); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .ne(ObjectUtil.isNotEmpty(task_code),SchBaseTask::getTask_code, task_code)// 不是当前任务 + .eq(SchBaseTask::getVehicle_code2, sub_tray) + .eq(SchBaseTask::getIs_delete, false); + Integer taskCount = schBaseTaskMapper.selectCount(lam); + return taskCount; + } + + @Override + public List findTasksByTaskStatus(String config_code, TaskStatus status) { + Assert.notNull(config_code, "任务配置编码不能为空!"); + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(SchBaseTask::getConfig_code, config_code) + .eq(SchBaseTask::getTask_status, status.getCode()) + .ne(SchBaseTask::getIs_delete, true); + + List schBaseTasks = schBaseTaskMapper.selectList(lam); + return schBaseTasks; + } + + @Override + public String create(SchBaseTask entity) { + String now = DateUtil.now(); + Assert.notNull(entity.getTask_status(), "任务状态不能为空!"); + + entity.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_time(now); + entity.setUpdate_time(now); + schBaseTaskMapper.insert(entity); + return entity.getTask_code(); + } + + @Override + public void apply(JSONObject param) { + /** + * 参数:设备编号(确定的点), 任务类型, 载具编码 + * hint: 根据任务类型来判断校验 + */ + String device_code = ObjectUtil.isNotEmpty(param.getString("device_code")) ? param.getString("device_code") : null; + String type = ObjectUtil.isNotEmpty(param.getString("task_type")) ? param.getString("task_type") : null; + String vehicle_code = ObjectUtil.isNotEmpty(param.getString("vehicle_code")) ? param.getString("vehicle_code") : null; + String config_code = param.getString("config_code"); + + if ("4".equals(type)) { + //4-叫料 + + } else if ("5".equals(type)) { + //5-满料出库 + if (device_code.startsWith("TBX")) { + config_code = "MJXLTask"; + param.put("config_code", config_code); + } + + } else if ("6".equals(type)) { + //6-申请空盘 + + } else if ("7".equals(type)) { + //7-空托盘出库 + + } + + if (ObjectUtil.isEmpty(config_code)) { + throw new BadRequestException(LangProcess.msg("task_type_Incorrect","device_code",device_code,"type",type)); + } + AbstractTask task = taskFactory.getTask(config_code); + // 执行创建任务 + task.apply(param); + } + + @Override + public JSONArray getTaskStatusList() { + TaskStatus[] values = TaskStatus.values(); + JSONArray arr = new JSONArray(); + for (TaskStatus value : values) { + JSONObject json = new JSONObject(); + json.put("code", value.getCode()); + json.put("name", value.getName()); + arr.add(json); + } + return arr; + } + + @Override + public void operation(Map param) { + String task_id = ObjectUtil.isNotEmpty(param.get("task_id")) ? param.get("task_id").toString() : null; + String method_name = ObjectUtil.isNotEmpty(param.get("method_name")) ? param.get("method_name").toString() : null; + String config_code = ObjectUtil.isNotEmpty(param.get("config_code")) ? param.get("config_code").toString() : null; + if (ObjectUtil.isEmpty(task_id) || ObjectUtil.isEmpty(method_name) || ObjectUtil.isEmpty(config_code)) { + throw new BadRequestException(LangProcess.msg("error_operation")); + } + // 根据标识找到任务 + SchBaseTask taskOne = schBaseTaskMapper.selectById(task_id); + if (Integer.parseInt(taskOne.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode()) + && !"feedback".equals(method_name)) { + throw new BadRequestException(LangProcess.msg("task_finish_or_cancel")); + } + // 根据配置去工厂类获得类对象 + String processing_class = config_code; + String message = ""; + // 根据任务类型获取对应的任务操作类 + AbstractTask abstractTask = taskFactory.getTask(processing_class); + // 调用每个任务类的method_name()强制结束方法 + JSONObject result; + switch (method_name) { + case "immediateNotifyAcs": + // + break; + case "forceFinish": // 强制完成 + abstractTask.forceFinish(task_id); + break; + case "cancel": + abstractTask.cancel(task_id); + break; + case "feedback": + sendToMes(taskOne); + break; + default: + break; + } + } + + private void sendToMes(SchBaseTask task) { + if (task.getPoint_code2().startsWith("YL")) { +// QPMES062 + } else if (task.getPoint_code2().startsWith("HW")) { +// QPMES065 + } else { + throw new RuntimeException("目的地非入原材料库或出库,无需反馈MES!"); + } + } + + /** + * 管理端一键移库:原材料缓存区---》原材料库存区 + * + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void move() { + log.info("管理端发起一键移库!"); + List schBasePointList = schBasePointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getRegion_code, "YLHC") + .notLike(SchBasePoint::getVehicle_code2, "YBHC") + .isNotNull(SchBasePoint::getVehicle_code2) + .ne(SchBasePoint::getVehicle_code2, "") + .and(slam -> slam.isNull(SchBasePoint::getIng_task_code) + .or() + .eq(SchBasePoint::getIng_task_code, "") + )); + List nextList = schBasePointService.list(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, "YL") + .eq(SchBasePoint::getIs_used, true) + .eq(SchBasePoint::getVehicle_qty, 0) + .and(slam -> slam.isNull(SchBasePoint::getVehicle_code2) + .or() + .eq(SchBasePoint::getVehicle_code2, "")) + .and(slam -> slam.isNull(SchBasePoint::getIng_task_code) + .or() + .eq(SchBasePoint::getIng_task_code, ""))); + for (SchBasePoint schBasePoint : schBasePointList) { + if(nextList.size()==0){ + log.info("原料库存区无可用点位,取消后续循环"); + return; + } + JSONObject param = new JSONObject(); + SchBasePoint nexSchBasePoint = nextList.get(0); + param.put("start_point", schBasePoint.getPoint_code()); + param.put("next_point", nexSchBasePoint.getPoint_code()); + param.put("create_mode","1"); + param.put("request_medthod_code", "POINTTask"); + param.put("request_medthod_name", "点对点任务"); + param.put("vehicle_code",schBasePoint.getVehicle_code()); + param.put("vehicle_code2",schBasePoint.getVehicle_code2()); + param.put("device_code", schBasePoint.getPoint_code()); + + BaseResponse baseResponse= acsToWmsService.pdaApply(param); + Integer resultCode = baseResponse.getCode(); + if(resultCode.equals(200)){ + Map parameters = baseResponse.getParameters(); + //设置初始值 + schBasePoint.setIng_task_code("1"); + nexSchBasePoint.setIng_task_code("1"); + if(ObjectUtil.isNotNull(parameters)){ + String task_code = parameters.get("task_code"); + if(ObjectUtil.isNotEmpty(task_code)){ + schBasePoint.setIng_task_code(task_code); + nexSchBasePoint.setIng_task_code(task_code); + } + } + //发起任务时先把点位占用,防止发起重复任务 + pointService.update(schBasePoint); + pointService.update(nexSchBasePoint); + nextList.remove(0); + }else{ + log.info(baseResponse.toString()); + } + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.class new file mode 100644 index 0000000..78698fb Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java new file mode 100644 index 0000000..e8fe677 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task/service/impl/SchBaseTaskconfigServiceImpl.java @@ -0,0 +1,126 @@ +package org.nl.wms.sch.task.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.Map; +import java.util.Set; + +/** + * @author lyd + * @description 服务实现 + * @date 2023-05-15 + **/ +@Slf4j +@Service +public class SchBaseTaskconfigServiceImpl extends ServiceImpl implements ISchBaseTaskconfigService { + + @Autowired + private SchBaseTaskconfigMapper schBaseTaskconfigMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) ? whereJson.get("blurry").toString() : null; + String workshop_code = ObjectUtil.isNotEmpty(whereJson.get("workshop_code")) ? whereJson.get("workshop_code").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(blurry), SchBaseTaskconfig::getConfig_name, blurry) + .eq(ObjectUtil.isNotEmpty(workshop_code), SchBaseTaskconfig::getWorkshop_code, workshop_code); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + schBaseTaskconfigMapper.selectPage(pages, lam); + pages.getRecords().forEach(config -> { + if (ObjectUtil.isNotEmpty(config.getStart_region_str())) { + config.setStart_region_strs(Arrays.asList(config.getStart_region_str().split(","))); + } + if (ObjectUtil.isNotEmpty(config.getNext_region_str())) { + config.setNext_region_strs(Arrays.asList(config.getNext_region_str().split(","))); + } + }); + return pages; + } + + @Override + public void create(SchBaseTaskconfig entity) { + SchBaseTaskconfig schBaseTaskconfig = schBaseTaskconfigMapper.selectOne(new LambdaQueryWrapper().eq(SchBaseTaskconfig::getConfig_code, entity.getConfig_code())); + if (ObjectUtil.isNotEmpty(schBaseTaskconfig)) + throw new BadRequestException(LangProcess.msg("task_checkExist",entity.getConfig_code())); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + if (ObjectUtil.isAllEmpty(entity.getStart_region_strs(), entity.getNext_region_strs())) + throw new BadRequestException(LangProcess.msg("task_point_isNull")); + + if (ObjectUtil.isNotEmpty(entity.getStart_region_strs())) { + // 起点区域配置 + String startRegion = String.join(",", entity.getStart_region_strs()); + entity.setStart_region_str(startRegion); + } + + if (ObjectUtil.isNotEmpty(entity.getNext_region_strs())) { + // 终点区域配置 + String nextRegion = String.join(",", entity.getNext_region_strs()); + entity.setNext_region_str(nextRegion); + } + + entity.setConfig_id(IdUtil.getSnowflake(1,1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + schBaseTaskconfigMapper.insert(entity); + } + + @Override + public void update(SchBaseTaskconfig entity) { + SchBaseTaskconfig dto = schBaseTaskconfigMapper.selectById(entity.getConfig_id()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + if (ObjectUtil.isAllEmpty(entity.getStart_region_strs(), entity.getNext_region_strs())) + throw new BadRequestException(LangProcess.msg("task_point_isNull")); + + if (ObjectUtil.isNotEmpty(entity.getStart_region_strs())) { + // 起点区域配置 + String startRegion = String.join(",", entity.getStart_region_strs()); + entity.setStart_region_str(startRegion); + } + + if (ObjectUtil.isNotEmpty(entity.getNext_region_strs())) { + // 终点区域配置 + String nextRegion = String.join(",", entity.getNext_region_strs()); + entity.setNext_region_str(nextRegion); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + schBaseTaskconfigMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + schBaseTaskconfigMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AbstractTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AbstractTask.class new file mode 100644 index 0000000..d0beaa3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AbstractTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AbstractTask.java new file mode 100644 index 0000000..e2ce0a6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AbstractTask.java @@ -0,0 +1,326 @@ +package org.nl.wms.sch.task_manage; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.language.LangProcess; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum; +import org.nl.wms.sch.task_manage.task.AcsUtil; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年05月16日 16:42 + * @desc desc + */ +@Component +public abstract class AbstractTask { + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISchBasePointService pointService; + @Autowired + private MesInMaterialMapper materialMapper; + @Autowired + private ISysParamService paramService; + /** + * 任务创建 + * 根据配置生成任务,如并发控制等 + */ + protected abstract void create() throws BadRequestException; + + + /** + * @return WCS的任务集合 + * @discription 重新下发给wcs任务 + * @author ldjun + * @created 2020年6月12日 下午5:52:28 + */ + protected JSONObject renotifyAcs(SchBaseTask task) { + Assert.notNull(task); + List taskList = new ArrayList<>(); + taskList.add(task); + return this.renotifyAcs(taskList); + } + + /** + * @return WCS的任务集合 + * @discription 重新下发给wcs任务 + * @author ldjun + * @created 2020年6月12日 下午5:52:28 + */ + protected JSONObject renotifyAcs(List taskList) { + //1、获取任务 + //2、根据任务配置补全任务 + //3、下发 + List list = new ArrayList<>(); + for (SchBaseTask task : taskList) { + AcsTaskDto taskDto = new AcsTaskDto(); + taskDto.setTask_id(task.getTask_id()); + taskDto.setTask_code(task.getTask_code()); + //taskDto.setPriority("1"); + taskDto.setRoute_plan_code("normal"); + taskDto.setStart_device_code(task.getPoint_code1()); + taskDto.setNext_device_code(task.getPoint_code2()); + taskDto.setVehicle_code(task.getVehicle_code()); + taskDto.setTask_type(task.getTask_type()); + this.setTask(task.getConfig_code(), taskDto); + list.add(taskDto); + } + + return AcsUtil.notifyAcs("api/wms/task", list); + } + + private AcsTaskDto setTask(String config_code, AcsTaskDto taskDto) { + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, config_code)); + taskDto.setPriority(taskConfig.getPriority()); + taskDto.setTask_type(taskConfig.getTask_type()); + taskDto.setRoute_plan_code(taskConfig.getRoute_plan_code()); + return taskDto; + } + + + /** + * 定时任务 + */ + public void schedule() { + this.autoCreate(); + this.create(); + } + + + /** + * 自动生成任务 + */ + protected void autoCreate() { + + } + + protected abstract void updateStatus(String task_code, TaskStatus status); + + + /** + * 设置起点或者终点 + * + * @param taskConfig + * @param task + * @param apply_point_code + */ + protected void setTaskPoint(SchBaseTaskconfig taskConfig, SchBaseTask task, String apply_point_code,JSONObject param) { + String taskDirection = taskConfig.getTask_direction(); + if (TaskDirectionEnum.SEND.getValue().equals(taskDirection)) { + task.setPoint_code1(apply_point_code); + } else if(TaskDirectionEnum.CALL.getValue().equals(taskDirection)) { + task.setPoint_code2(apply_point_code); + } else { + task.setPoint_code1(param.getString("start_point")); + task.setPoint_code2(param.getString("next_point")); + } + + } + + /** + * @param task_code 任务标识 + * @return + * @discription 强制结束完成任务 + * @author ldjun + * @created 2020年6月19日 上午10:34:58 + */ + public abstract void forceFinish(String task_code); + + /** + * 取消任务,货物搬回原点 + * + * @param task_code + */ + public abstract void cancel(String task_code); + + /** + * 申请任务 + * + * @param param + * @throws BadRequestException + */ + public String apply(JSONObject param) throws BadRequestException { + // 申请任务 + SchBaseTask task = new SchBaseTask(); // 任务实体 + String apply_point_code = param.getString("device_code"); // 请求点 + String next_point = param.getString("next_point"); // 目的点 + String config_code = param.getString("config_code"); + String sub_tray = param.getString("vehicle_code2");//子托盘 + Double height = param.getDouble("height"); + if(ObjectUtil.isNotEmpty(sub_tray)) { + sub_tray = sub_tray.trim(); + } + //子托盘非空 + if(ObjectUtil.isNotEmpty(sub_tray)) { + Assert.isFalse(sub_tray.contains(";"), + "该任务申请子托盘["+param.getString("vehicle_code2")+"]存在串读,无法申请任务!"); + }else{ + Assert.isFalse(ObjectUtil.isEmpty(sub_tray), + "该任务申请子托盘["+param.getString("vehicle_code2")+"]为空,无法申请任务!"); + } + if(ObjectUtil.isEmpty(height)){ + Assert.isFalse(ObjectUtil.isEmpty(sub_tray), + "该任务申请子托盘["+param.getString("vehicle_code2")+"无高度信号,无法申请任务!"); + } + if(height>2.0){ + //若校验不通过,三色灯提示红色报警,后续由人工介入处理 + Assert.isFalse(ObjectUtil.isEmpty(sub_tray), + "该任务申请子托盘["+param.getString("vehicle_code2")+"超高,无法申请任务!"); + }else{//若校验通过,三色灯提示绿色信号 + + } + //判断该申请点位是否存在起点或终点的未完成任务 + Integer apply_point_lists = taskService.findUnFinishTasksByPoint_code2("",apply_point_code); + Assert.isFalse(apply_point_lists>0, + "该任务申请点位["+apply_point_code+"]已存在未完成的任务,无法申请任务!"); + //子托盘非空 + if(ObjectUtil.isNotEmpty(sub_tray)) { + //判断该子托盘是否存在未完成任务 + Integer sub_tray_lists = taskService.findUnFinishTasksBySub_tray("",sub_tray); + Assert.isFalse(sub_tray_lists>0, + "该任务申请子托盘["+sub_tray+"]已存在未完成的任务,无法申请任务!"); + } + + // 1、查询任务配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, config_code)); + Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); + + // 最大可创建任务数 + Integer tcmn = taskConfig.getTask_create_max_num(); + // 获取申请的任务 + List unFinishTasksByTaskConfig = taskService.findTasksByTaskStatus( + taskConfig.getConfig_code(), TaskStatus.APPLY); + Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, + "该任务类型["+taskConfig.getTask_name()+"]的任务最大可申请数已超过上限,无法申请任务"); + // 获取对接位点位对象 + SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, apply_point_code)); + //如果是点对点,判断目标点是否有载具 + if("3".equals( taskConfig.getTask_direction())){ + SchBasePoint nextSchBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, next_point)); + if(ObjectUtil.isEmpty(nextSchBasePoint)) { + throw new BadRequestException(LangProcess.msg("task_point_error5",next_point)); + } + if (nextSchBasePoint.getVehicle_qty() > 0 + || ObjectUtil.isNotEmpty(nextSchBasePoint.getVehicle_code2()) + || ObjectUtil.isNotEmpty(nextSchBasePoint.getIng_task_code())) { + // 消息通知 + throw new BadRequestException(LangProcess.msg("task_point_error6",next_point)); + } + } + // 判断是否校验工单 + if (taskConfig.getIs_check_workorder()) { + //如果点位上没货 + if(ObjectUtil.isEmpty(pointObj)) { + throw new BadRequestException(LangProcess.msg("task_point_error3",apply_point_code)); + } + //如果点位上没货 + if(ObjectUtil.isEmpty(pointObj.getVehicle_code2())) { + throw new BadRequestException(LangProcess.msg("task_point_error1",apply_point_code)); + } + //点位上载具和申请任务不一致 + if(!sub_tray.equals(pointObj.getVehicle_code2())) { + throw new BadRequestException(LangProcess.msg("task_point_error2",apply_point_code,pointObj.getVehicle_code2(),sub_tray)); + } + //判断是否校验mes组盘记录 + Param isConnectAcs = paramService.findByCode(GeneralDefinition.IS_RETURN_MES); + Assert.notNull(isConnectAcs, "找不到配置文件,请确认系统参数[is_return_mes]配置是否存在!"); + String isReturn = isConnectAcs.getValue(); + if("1".equals(isReturn)){ + //若不是缓存区托盘,校验mes接口组盘记录 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MesInMaterial::getPallet_sn,sub_tray); + Integer list_size = materialMapper.selectCount(wrapper); + Assert.isFalse(list_size<=0, + "该任务申请子托盘["+sub_tray+"]异常,无入库组盘信息!"); + } + //更新对应载具工单状态为已生成任务,不可在工单页面取消 + //pdm_bd_workorder_two任务生成时,status改为2 + //workorderService.updateByPda(pointObj.getVehicle_code2(),"2",param.getString("mode")); + } + // 校验是否需要自动agv + /* if (!pointObj.getIs_auto()) { + // 如果不需要自动,则不创建任务 + return "1"; + }*/ + // 2、创建申请任务 + task.setAcs_trace_id(param.getString("acs_trace_id")); + //设置任务类型 + task.setConfig_code(config_code); + //设置任务创建模式 + task.setCreate_mode(param.getString("create_mode")); + //记录母载具号 + task.setVehicle_code(param.getString("vehicle_code")); + //记录子载具号 + task.setVehicle_code2(param.getString("vehicle_code2")); + task.setVehicle_qty(param.getInteger("vehicle_qty")); + task.setVehicle_type(param.getString("material_type")); + //设置任务状态为 申请状态(当前任务参数不全,不具备下发条件) + task.setTask_status(TaskStatus.APPLY.getCode()); + task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 + // 设置起/终点 + this.setTaskPoint(taskConfig, task, apply_point_code,param); + task.setExt_group_data(JSONObject.toJSONString(param)); + //设置操作人 + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + if(ObjectUtil.isNotEmpty(param.getString("user_id"))){ + currentUserId = param.getString("user_id"); + nickName = param.getString("person_name"); + } + task.setRemark("任务申请"); + task.setCreate_id(currentUserId); + task.setCreate_name(nickName); + task.setUpdate_id(currentUserId); + task.setUpdate_name(nickName); + //设置任务组id + task.setTask_group_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + String task_code =taskService.create(task); + return task_code; + } + + public void updateTaskStatus(String task_code, TaskStatus status) { + this.updateStatus(task_code, status); + } + + /** + * 任务阶段反馈最新点位 + * + * @param param + * @throws BadRequestException + */ + public void feedbackState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) throws BadRequestException { + this.feedbackTaskState(param,schBaseTask,result); + } + + protected abstract void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask,BaseResponse result); + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AcsTaskDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AcsTaskDto.class new file mode 100644 index 0000000..092cb2d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AcsTaskDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AcsTaskDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AcsTaskDto.java new file mode 100644 index 0000000..649d7c0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AcsTaskDto.java @@ -0,0 +1,30 @@ +package org.nl.wms.sch.task_manage; + +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/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AutoCreateTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AutoCreateTask.class new file mode 100644 index 0000000..ddfe8e7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AutoCreateTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AutoCreateTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AutoCreateTask.java new file mode 100644 index 0000000..42e5c63 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/AutoCreateTask.java @@ -0,0 +1,56 @@ + +package org.nl.wms.sch.task_manage; + +import cn.hutool.core.util.ObjectUtil; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.config.SpringContextHolder; +import org.reflections.Reflections; +import org.springframework.stereotype.Component; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; +import java.util.Set; + + +@Slf4j +@Component +public class AutoCreateTask { + private Set> subTypes = null; + + @SneakyThrows + public void run() { + log.info("定时任务AutoCreateTask开始执行:"); + + if (ObjectUtil.isNull(subTypes) || subTypes.isEmpty()) { + Reflections reflections = new Reflections("org.nl"); + subTypes = reflections.getSubTypesOf(AbstractTask.class); + } + this.doExecute(); + } + + + /** + * 需要按照任务配置类型并行执行 + */ + private void doExecute() { + subTypes.forEach(clz -> { + // 调用AbstractAcsTask类的每个子类的schedule()方法 + try { + Object obj = SpringContextHolder.getBean(clz); + Method m = obj.getClass().getMethod("schedule"); + m.invoke(obj); + } catch (InvocationTargetException e) { + e.printStackTrace(); + log.info("定时器执行失败:{}", e.getTargetException().getMessage()); + } catch (Exception e) { + e.printStackTrace(); + log.info("定时器执行失败:{}", e.getMessage()); + } + + }); + } + +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/GeneralDefinition.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/GeneralDefinition.class new file mode 100644 index 0000000..b744cb6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/GeneralDefinition.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/GeneralDefinition.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/GeneralDefinition.java new file mode 100644 index 0000000..cd4367e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/GeneralDefinition.java @@ -0,0 +1,86 @@ +package org.nl.wms.sch.task_manage; + +/** + * @Author: lyd + * @Description: 通用定义类型数据 + * @Date: 2023/7/13 + */ +public class GeneralDefinition { + /** 未知 */ + public static final String UNKNOWN = "-"; + // 统一编码定义 + /** 窑自动任务开启 */ + public static final String AUTO_KILN_CALL = "auto_kiln_call"; + // 是否 + /**是/正确/可用... */ + public static final String YES = "1"; + /** 否/错误/不可用... */ + public static final String NO = "0"; + // 载具类型 + /** 料盅 */ + public static final String MATERIAL_CUP = "LZ"; + /** 钢托盘 */ + public static final String STEEL_TRAY = "GTP"; + // 账号定义 + /** acs系统 */ + public static final String ACS_ID = "2"; + /** acs系统 */ + public static final String ACS_NAME = "ACS系统"; + /** mes系统 */ + public static final String MES_ID = "3"; + /** mes系统 */ + public static final String MES_NAME = "MES系统"; + // 点位类型 + /** 设备位 */ + public static final String DEVICE_POINT = "1"; + /** 对接位 */ + public static final String DOCKING_POINT = "2"; + // 出入口 + /**入口**/ + public static final String ENTRANCE = "1"; + /**出口**/ + public static final String EXIT = "2"; + // 任务生产方式 + /**自动创建**/ + public static final String AUTO_CREATION = "1"; + /**ACS创建**/ + public static final String ACS_CREATION = "2"; + // 请求方向 + /**ACS->LMS**/ + public static final String ACS_LMS = "1"; + /**LMS->ACS**/ + public static final String LMS_ACS = "2"; + /**MES->LMS**/ + public static final String MES_LMS = "3"; + /**LMS->MES**/ + public static final String LMS_MES = "4"; + // 区域定义 + /** 料盅睏料线区域 */ + public static final String LZKLX = "LZKLX"; + /** 干燥窑区域 */ + public static final String GZY = "GZY"; + // 特殊: 1-缓存输送线入口,2-缓存输送线出口,3-上输送线,4-下输送线 + /** 上输送线 */ + public static final String UPPER_CONVEYOR_LINE = "3"; + /** 下输送线 */ + public static final String LOWER_CONVEYOR_LINE = "4"; + // 参数名称 + /** 是否连接 */ + public static final String IS_CONNECT_ACS = "is_connect_acs"; + /** 是否连接 */ + public static final String IS_RETURN_MES = "is_return_mes"; + /** 叠盘机最大数量 */ + public static final String MAX_DKT_QTY = "max_dkt_qty"; + /** ACS路径 */ + public static final String ACS_URL = "acs_url"; + /** 是否连接 */ + public static final String IS_CONNECT_MES = "is_connect_mes"; + /** MES路径 */ + public static final String MES_URL = "mes_url"; + /** 当前货架排 */ + public static final String NOW_YL_ROW = "now_yl_row"; + /** 当前货架排 */ + public static final String NOW_YLHC_ROW = "now_ylhc_row"; + /** 任务取消 */ + public static final String TASK_CANCEL = "任务取消"; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.class new file mode 100644 index 0000000..cbd1e23 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.java new file mode 100644 index 0000000..4415856 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupBindMaterialStatusEnum.java @@ -0,0 +1,42 @@ +package org.nl.wms.sch.task_manage.enums; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.Getter; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.impl.SysDictServiceImpl; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 组盘绑定物料状态枚举 + * @Date: 2023/5/25 + */ +@Getter +public enum GroupBindMaterialStatusEnum { + /** + * 待绑定 + */WAIT_BIND, + /** + * 已绑定 + */BOUND, + /** + * 已解绑 + */UNBOUND; + + private String value; + private String label; + + static { + SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class); + List taskDirection = bean.list(new LambdaQueryWrapper() + .eq(Dict::getCode, "group_bind_material_status") + .orderByAsc(Dict::getDict_sort)); + GroupBindMaterialStatusEnum[] values = GroupBindMaterialStatusEnum.values(); + for (int i = 0; i < values.length; i++) { + values[i].value = taskDirection.get(i).getValue(); + values[i].label = taskDirection.get(i).getLabel(); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupStatusEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupStatusEnum.class new file mode 100644 index 0000000..939acc0 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupStatusEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupStatusEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupStatusEnum.java new file mode 100644 index 0000000..1e0c579 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/GroupStatusEnum.java @@ -0,0 +1,23 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 组盘状态枚举 + * @Date: 2023/5/24 + */ +@Getter +@AllArgsConstructor +public enum GroupStatusEnum { + OUT_SYSTEM("1", "系统外"), + IN_STORAGE("2", "存储中"), + IN_PROCESS("3", "处理中"), + IN_CARRY("4", "搬运中"), + DISCHARGE_MATERIAL("5", "可放料"), + CABLE_RETRIEVABLE_MATERIAL("6", "可取料"); + + private final String type; + private final String name; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/NoticeTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/NoticeTypeEnum.class new file mode 100644 index 0000000..3aa0477 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/NoticeTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/NoticeTypeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/NoticeTypeEnum.java new file mode 100644 index 0000000..66756b0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/NoticeTypeEnum.java @@ -0,0 +1,21 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 通知类型枚举 + * @Date: 2023/6/15 + */ +@Getter +@AllArgsConstructor +public enum NoticeTypeEnum { + + EXCEPTION("1", "异常"), + WARN("2", "警告"), + NOTIFICATION("3", "通知"); + + private final String code; + private final String name; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointStatusEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointStatusEnum.class new file mode 100644 index 0000000..460c916 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointStatusEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java new file mode 100644 index 0000000..e92e1ef --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java @@ -0,0 +1,21 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/25 + */ +@Getter +@AllArgsConstructor +public enum PointStatusEnum { + + EMPTY_POINT("1", "空位/无货"), + FULL_POINT("3", "有料"), + EMPTY_VEHICLE("2", "空载具/有货"); + + private final String code; + private final String label; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointTypeEnum.class new file mode 100644 index 0000000..1f82f56 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointTypeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointTypeEnum.java new file mode 100644 index 0000000..c320a30 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/PointTypeEnum.java @@ -0,0 +1,22 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: zds + * @Description: + * @Date: 2023/5/25 + */ +@Getter +@AllArgsConstructor +public enum PointTypeEnum { + + IN_POINT("1", "入库点位"), + OUT_POINT("2", "出库点位"), + STORAGE_POINT("3", "正常存储点位"), + TRANSFER_POINT("4", "中转点位"); + + private final String code; + private final String label; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.class new file mode 100644 index 0000000..9f9dcaa Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java new file mode 100644 index 0000000..19a6e3e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskDirectionEnum.java @@ -0,0 +1,47 @@ +package org.nl.wms.sch.task_manage.enums; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.dao.Dict; +import org.nl.system.service.dict.impl.SysDictServiceImpl; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 任务配置 - 任务去向枚举 + * @Date: 2023/5/25 + */ +@Getter +public enum TaskDirectionEnum { + + /** + * 送货 + */ + SEND, + /** + * 取货 + */ + CALL, + /** + * 移货 + */ + MOVE; + + private String value; + private String label; + + static { + SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class); + List taskDirection = bean.list(new LambdaQueryWrapper() + .eq(Dict::getCode, "task_direction") + .orderByAsc(Dict::getDict_sort)); + TaskDirectionEnum[] values = TaskDirectionEnum.values(); + for (int i = 0; i < values.length; i++) { + values[i].value = taskDirection.get(i).getValue(); + values[i].label = taskDirection.get(i).getLabel(); + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.class new file mode 100644 index 0000000..26748ff Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.java new file mode 100644 index 0000000..9a31662 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/TaskFinishedTypeEnum.java @@ -0,0 +1,22 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 任务完成枚举 + * @Date: 2023/6/13 + */ +@Getter +@AllArgsConstructor +public enum TaskFinishedTypeEnum { + + AUTO_ACS("1", "ACS自动完成"), + MANUAL_PC("2", "PC手完成"), + MANUAL_PDA("3", "PDA手持"); + + private final String code; + + private final String description; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.class new file mode 100644 index 0000000..95f9a1b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java new file mode 100644 index 0000000..035a895 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java @@ -0,0 +1,21 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 工单状态枚举 + * @Date: 2023/6/16 + */ +@Getter +@AllArgsConstructor +public enum WorkOrderStatusEnum { + UNPRODUCED("1", "未生产"), + ISSUED("2", "已下发"), + PRODUCING("3", "生产中"), + STOP("4", "暂停"), + COMPLETE("5", "完成"); + private final String code; + private final String name; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderTwoStatusEnum.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderTwoStatusEnum.class new file mode 100644 index 0000000..87e19a3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderTwoStatusEnum.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderTwoStatusEnum.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderTwoStatusEnum.java new file mode 100644 index 0000000..b22311b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/enums/WorkOrderTwoStatusEnum.java @@ -0,0 +1,20 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: zds + * @Description: 出库工单状态枚举 + * @Date: 2023/6/16 + */ +@Getter +@AllArgsConstructor +public enum WorkOrderTwoStatusEnum { + UNPRODUCED(0, "未提交"), + ISSUED(1, "已提交"), + PRODUCING(2, "出库中"), + COMPLETE(3, "已出库"); + private final Integer code; + private final String name; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/AcsUtil.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/AcsUtil.class new file mode 100644 index 0000000..33d103a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/AcsUtil.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/AcsUtil.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/AcsUtil.java new file mode 100644 index 0000000..204f8fb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/AcsUtil.java @@ -0,0 +1,106 @@ + +package org.nl.wms.sch.task_manage.task; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.dao.Param; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.service.dto.to.wms.AcsResponse; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.springframework.http.HttpStatus; + +import java.util.List; + +/** + * ACS连接工具类: + */ +@Slf4j +public class AcsUtil { + public static JSONObject notifyAcs(String api, List list) { + //判断是否连接ACS系统 + String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_connect_acs").getValue(); + // list转JSONArray + String s = JSON.toJSONString(list); + JSONObject result = new JSONObject(); + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.BAD_REQUEST.value()); + result.put("message", "未连接ACS!"); + result.put("data", new JSONObject()); + return result; + } + //ACS地址:127.0.0.1:8010 + String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("acs_url").getValue(); + + String url = acsUrl + api; + log.info("下发acs任务的参数为:{}", list.toString()); + try { + String resultMsg = HttpRequest.post(url) + .body(s) + .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()); + } + log.info("acs任务的回传参数为:", result.toString()); + //acs抛异常这里 + /* if (result.getString("status").equals(String.valueOf(HttpStatus.BAD_REQUEST.value()))) + throw new BadRequestException(result.getString("message"));*/ + return result; + } + + /** + * 新的请求方式:对象中包含数组 + * @param api + * @param object + * @return + * @param + */ + public static AcsResponse notifyAcs2(String api, T object) { + SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class); + //判断是否连接ACS系统 + Param isConnectAcs = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_ACS); + if (ObjectUtil.isEmpty(isConnectAcs)) { + return AcsResponse.requestRefuse("参数表中:" + GeneralDefinition.IS_CONNECT_ACS + "不存在"); + } + String isConnect = isConnectAcs.getValue(); + //ACS地址:127.0.0.1:8010 + Param acsUrlObj = sysParamService.findByCode(GeneralDefinition.ACS_URL); + if (ObjectUtil.isEmpty(acsUrlObj)) { + return AcsResponse.requestRefuse("参数表中:" + GeneralDefinition.ACS_URL + "不存在"); + } + String acsUrl = acsUrlObj.getValue(); + JSONObject result; + if (StrUtil.equals(GeneralDefinition.NO, isConnect)) { + return AcsResponse.requestRefuse("未连接ACS!"); + } + String url = acsUrl + api; + log.info("下发acs任务的参数为:{}", object.toString()); + AcsResponse resultForAcs; + try { + String resultMsg = HttpRequest.post(url) + .body(JSON.toJSONString(object)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + resultForAcs = JSONObject.toJavaObject(result, AcsResponse.class); + } catch (Exception e) { + String msg = e.getMessage(); + //网络不通 + log.error("连接失败:{}", msg); + return AcsResponse.requestRefuse("网络不通,操作失败!"); + } + return resultForAcs; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskFactory.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskFactory.class new file mode 100644 index 0000000..25dbb58 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskFactory.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskFactory.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskFactory.java new file mode 100644 index 0000000..7e47ceb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskFactory.java @@ -0,0 +1,44 @@ +package org.nl.wms.sch.task_manage.task; + +import org.nl.wms.sch.task_manage.AbstractTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author ldjun + * @version 2.0 + * @date 2023年05月16日 16:42 + * @desc 采用获取注解来标识任务类型,并通过扫描和反射的方式来获取任务实例 + */ +@Component +@Lazy +public class TaskFactory { + private final Map taskMap; + + @Autowired + public TaskFactory(ApplicationContext applicationContext) { + taskMap = new HashMap<>(); + initializeTasks(applicationContext); + } + + private void initializeTasks(ApplicationContext applicationContext) { + Map taskBeans = applicationContext.getBeansWithAnnotation(TaskType.class); + for (Object taskBean : taskBeans.values()) { + TaskType taskTypeAnnotation = taskBean.getClass().getAnnotation(TaskType.class); + String taskType = taskTypeAnnotation.value(); + taskMap.put(taskType.toUpperCase(), (AbstractTask) taskBean); + } + } + + public AbstractTask getTask(String taskType) { + if (taskType == null) { + return null; + } + return taskMap.get(taskType.toUpperCase()); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskListType.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskListType.java new file mode 100644 index 0000000..88856c7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskListType.java @@ -0,0 +1 @@ +package org.nl.wms.sch.task_manage.task; \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskServiceImpl.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskServiceImpl.class new file mode 100644 index 0000000..84a3ea7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskServiceImpl.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskServiceImpl.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskServiceImpl.java new file mode 100644 index 0000000..6cb1295 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskServiceImpl.java @@ -0,0 +1,34 @@ +package org.nl.wms.sch.task_manage.task; + +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; +import org.nl.common.exception.BadRequestException; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年05月08日 13:59 + * @desc desc + */ +public class TaskServiceImpl { + String create(JSONObject param) throws BadRequestException { + + + return null; + } + + public void beforeToCreate(JSONObject param) throws BadRequestException { + String point_code = param.getString("point_code"); + Assert.notEmpty(point_code, "点位编码为空!"); + //1、查找点位 + //2、校验点位是否启用 + //3、校验点位是否自动 + //4、任务类型 + + + } + + public void createAfter(JSONObject param) throws BadRequestException { + + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskType.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskType.class new file mode 100644 index 0000000..240675c Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskType.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskType.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskType.java new file mode 100644 index 0000000..dd0e424 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/TaskType.java @@ -0,0 +1,18 @@ +package org.nl.wms.sch.task_manage.task; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @Author: lyd + * @Description: 配置任务类型注解 + * @Date: 2023/6/21 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface TaskType { + String value(); +} + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyDto.java new file mode 100644 index 0000000..ee9e476 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyDto.java @@ -0,0 +1 @@ +package org.nl.wms.sch.task_manage.task.core; \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyType.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyType.class new file mode 100644 index 0000000..ce30a01 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyType.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyType.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyType.java new file mode 100644 index 0000000..82a4a9e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskApplyType.java @@ -0,0 +1,28 @@ +package org.nl.wms.sch.task_manage.task.core; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年05月08日 10:27 + * @desc desc + */ + +public enum TaskApplyType { + SEND_MATERIAL(1, "送料", "送料"), + SEND_EMPTY(2, "送空载具", "送空载具"), + CALL_MATERIAL(3, "叫料", "叫料"), + CALL_EMPTY(4, "叫空载具", "叫空载具"); + + TaskApplyType(int code, String name, String desc) { + this.code = code; + this.name = name; + this.desc = desc; + } + + // 操作设备类型编码 + private int code; + // 操作设备类型名字 + private String name; + //操作设备类型类型 + private String desc; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskDto.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskDto.class new file mode 100644 index 0000000..3ee3ea5 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskDto.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskDto.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskDto.java new file mode 100644 index 0000000..d9683df --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskDto.java @@ -0,0 +1,11 @@ +package org.nl.wms.sch.task_manage.task.core; + +/** + * @author ldjun + * @version 1.0 + * @date 2023年05月08日 13:41 + * @desc desc + */ +public class TaskDto { + private String task_code; +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskOperateType.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskOperateType.class new file mode 100644 index 0000000..c315bad Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskOperateType.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskOperateType.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskOperateType.java new file mode 100644 index 0000000..ba2f756 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskOperateType.java @@ -0,0 +1,23 @@ +package org.nl.wms.sch.task_manage.task.core; + +/** + * 任务操作终端类型 + */ +public enum TaskOperateType { + ACS("1", "ACS", "ACS"), + PC("2", "PC", "创建完成"), + MOBILE("3", "手持", "手持"), + QUARTZ("4", "定时任务", "定时任务"), + OTHER("5", "其它", "其它"); + + + TaskOperateType(String code, String name, String desc) { + this.code = code; + this.name = name; + this.desc = desc; + } + + private String code; + private String name; + private String desc; +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskStatus.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskStatus.class new file mode 100644 index 0000000..25f991a Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskStatus.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskStatus.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskStatus.java new file mode 100644 index 0000000..02ef58d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/core/TaskStatus.java @@ -0,0 +1,46 @@ +package org.nl.wms.sch.task_manage.task.core; + +public enum TaskStatus { + APPLY("1", "申请", "申请"), + CREATED("2", "创建完成", "创建完成"), + ISSUED("3", "下发", "下发"), + EXECUTING("4", "执行中", "执行中"), + FINISHED("5", "完成", "完成"), + CANCELED("6", "已取消", "已取消"), + UNFINISHED("7", "未完成", "未完成"); + + + TaskStatus(String code, String name, String desc) { + this.code = code; + this.name = name; + this.desc = desc; + } + + private String code; + private String name; + private String desc; + + 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; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.class new file mode 100644 index 0000000..d5e37aa Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java new file mode 100644 index 0000000..5100f75 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/KJRKTask.java @@ -0,0 +1,203 @@ +package org.nl.wms.sch.task_manage.task.tasks; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author: psh + * @Description: 空架入库 + * @Date: 2024/1/24 + */ +@Slf4j +@Component +@TaskType("KJRKTask") +@Lazy +public class KJRKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "KJRKTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private PointMapper pointMapper; + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + // 获取任务配置最大生成任务数 + Integer tcmn = taskConfig.getTask_issue_max_num(); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findCreateTasksByTaskConfig(TASK_CONFIG_CODE); + if(unFinishTasksByTaskConfig.size() < tcmn){ + Integer now_num = unFinishTasksByTaskConfig.size(); + for (SchBaseTask task : tasks) { + if(now_num < tcmn){ + // 找终点 + SchBasePoint point = findNextPoint(); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + log.info("空架入库未找到当前符合条件的点位!"); + continue; + }else{ + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),point.getPoint_code()); + if(taskList>0){ + task.setRemark("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + continue; + } + } + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(task,SchBaseTask.class); + // 设置终点并修改创建成功状态 + acs_task.setPoint_code2(point.getPoint_code()); + //下发 + JSONObject result = this.renotifyAcs(acs_task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("下发"); + task.setPoint_code2(point.getPoint_code()); + taskService.update(task); + + //发起任务时先把点位占用,防止发起重复任务 + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + taskService.update(task); + } + + } + } + } + } + + /** + * 判断目标点位 + * + * @return + */ + private SchBasePoint findNextPoint() { + String regionCode = "KJHC"; + List schBasePointList = pointMapper.findPointByCondition(regionCode, "0",0); + for (SchBasePoint schBasePoint : schBasePointList) { + //查找点上无载具号无任务号、载具数量为0的 + if (schBasePoint.getIs_used() + && StringUtils.isEmpty(schBasePoint.getIng_task_code()) + && schBasePoint.getVehicle_qty() ==0 + && ObjectUtil.isEmpty(schBasePoint.getVehicle_code2())) { + log.info("空架入库找到当前符合条件的点位{}", schBasePoint.getPoint_code()); + return schBasePoint; + } + } + return null; + } + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish")); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_cancel")); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + } + // 终点解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_qty(1); + endPointObj.setUpdate_time(DateUtil.now()); + pointService.update(endPointObj); + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + //任务取消把原先占用的位置释放 + pointService.update(endPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + //该场景无需重算等待点 + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/POINTTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/POINTTask.class new file mode 100644 index 0000000..f4efec6 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/POINTTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java new file mode 100644 index 0000000..62e5454 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/POINTTask.java @@ -0,0 +1,328 @@ +package org.nl.wms.sch.task_manage.task.tasks; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; +import java.util.List; + +/** + * @Author: psh + * @Description: 点对点任务 + * @Date: 2023/1/24 + */ +@Slf4j +@Component +@TaskType("POINTTask") +@Lazy +public class POINTTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "POINTTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + Assert.notNull(taskConfig, "找不到任务配置文件,请确认YCLCKTask配置是否存在!"); + // 获取任务配置最大生成任务数 + Integer tcmn = taskConfig.getTask_issue_max_num(); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findCreateTasksByTaskConfig(TASK_CONFIG_CODE); + //执行中任务数量小于最大可生成任务数 + if(unFinishTasksByTaskConfig.size() < tcmn){ + Integer now_num = unFinishTasksByTaskConfig.size(); + for (SchBaseTask task : tasks) { + if(now_num < tcmn){ + SchBasePoint schBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, task.getPoint_code1())); + SchBasePoint nextSchBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, task.getPoint_code2())); + if(task.getPoint_code2().startsWith("DKT")){ + Integer max_qty = nextSchBasePoint.getVehicle_max_qty(); + //如果是叠盘位,根据当前数量+1为目标地址 + int qty=nextSchBasePoint.getVehicle_qty()+1; + if(qty <= max_qty){ + task.setPoint_code2(task.getPoint_code2().substring(0,task.getPoint_code2().length()-1)+qty); + }else{ + task.setRemark("叠盘机空盘数量已达最大值:["+max_qty+"],暂时无法下发任务!"); + taskService.update(task); + continue; + } + }else{ + if (nextSchBasePoint.getVehicle_qty() > 0 + || ObjectUtil.isNotEmpty(nextSchBasePoint.getVehicle_code2())) { + task.setRemark("分配终点点位"+task.getPoint_code2()+"已存在载具!"); + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+task.getPoint_code2()+"已存在已存在载具!"); + continue; + } + } + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),task.getPoint_code2()); + if(taskList>0){ + task.setRemark("分配终点点位"+task.getPoint_code2()+"已存在未完成任务!"); + if(task.getPoint_code2().startsWith("DKT")){ + task.setPoint_code2(nextSchBasePoint.getPoint_code()); + } + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+task.getPoint_code2()+"已存在未完成任务!"); + continue; + } + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(task,SchBaseTask.class); + acs_task.setVehicle_code(schBasePoint.getVehicle_code()); + acs_task.setVehicle_code2(schBasePoint.getVehicle_code2()); + //下发 + JSONObject result = this.renotifyAcs(acs_task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("下发"); + task.setVehicle_code(schBasePoint.getVehicle_code()); + task.setVehicle_code2(schBasePoint.getVehicle_code2()); + taskService.update(task); + + //发起任务时先把点位占用,防止发起重复任务 + schBasePoint.setIng_task_code(task.getTask_code()); + pointService.update(schBasePoint); + nextSchBasePoint.setIng_task_code(task.getTask_code()); + pointService.update(nextSchBasePoint); + //去回温库的任务,更细工单表 + if(nextSchBasePoint.getPoint_code().contains("XHW")){ + //pdm_bd_workorder_two任务完成时,status改为2出库中 + // workorderService.update(schBasePoint.getVehicle_code2(),"2"); + } + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + if(task.getPoint_code2().startsWith("DKT")){ + task.setPoint_code2(nextSchBasePoint.getPoint_code()); + } + taskService.update(task); + } + } + + } + } + + } + + /** + * 点对点任务暂定不需要等待点 + * + * @param extGroupData + * @return + */ + private SchBasePoint findNextPoint(JSONObject extGroupData,SchBaseTask task) { + return null; + } + + /** + * 1.取货完毕后起点减少最后一份组盘,并且该组盘视为已结束 + * 2.包片机LMS不记录点位信息,由人工对组盘进行操作 + */ + @Override +// @Transactional(rollbackFor = Exception.class) + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish")); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_cancel")); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + if(endPoint.startsWith("DKT")){ + endPoint=endPoint.substring(0,endPoint.length()-1)+1; + } + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + String vehicleCode = taskObj.getVehicle_code(); + String vehicleCode2 = taskObj.getVehicle_code2(); + SchBaseVehiclematerialgroup one =null; + //母托盘更新组盘信息 + if(StringUtils.isNotEmpty(vehicleCode)) { + JSONObject group_jo = new JSONObject(); + group_jo.put("vehicle_code",vehicleCode); + one = vehiclematerialgroupService.getGroup(group_jo); + if (ObjectUtil.isNotEmpty(one)) { + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code()); + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + //拆包位需解绑组盘记录 + if(endPointObj.getRegion_code().contains("CB")){ + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + } + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateByJson(one); + } + } + //子托盘更新组盘信息 + if(StringUtils.isNotEmpty(vehicleCode2)) { + JSONObject group_jo = new JSONObject(); + group_jo.put("vehicle_code",vehicleCode2); + one = vehiclematerialgroupService.getGroup(group_jo); + if (ObjectUtil.isNotEmpty(one)) { + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code()); + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + //拆包位需解绑组盘记录 + if(endPointObj.getRegion_code().contains("CB")){ + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + } + if(ObjectUtil.isEmpty(extGroupData.getString("time"))){ + one.setStanding_time(1); + }else{ + one.setStanding_time(Integer.valueOf(extGroupData.getString("time"))); + } + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateByJson(one); + } + //工单出库任务更新工单记录 + if(endPointObj.getRegion_code().contains("HW")){ + //pdm_bd_workorder_two任务完成时,status改为3 + //workorderService.update(vehicleCode2,"3"); + } + } + // 终点解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(taskObj.getVehicle_code()); + endPointObj.setVehicle_code2(taskObj.getVehicle_code2()); + if(extGroupData.containsKey("weight")){ + endPointObj.setMaterial_weight(extGroupData.getBigDecimal("weight")); + } + if(endPointObj.getPoint_code().startsWith("DKT")){ + //叠盘机数量由acs同步,无需维护 +// endPointObj.setVehicle_qty(endPointObj.getVehicle_qty()+1); + }else { + endPointObj.setVehicle_qty(1); + } + pointService.update(endPointObj); + // 起点清空 + startPointObj.setVehicle_code(""); + startPointObj.setVehicle_code2(""); + startPointObj.setVehicle_qty(0); + startPointObj.setIng_task_code(""); + startPointObj.setUpdate_time(DateUtil.now()); + pointService.updateById(startPointObj); + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setGroup_id(ObjectUtil.isNotEmpty(one)?one.getGroup_id():null); + taskObj.setRemark("任务完成"); + } + // 取消 + if (status.equals(TaskStatus.CANCELED)) { + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + //去回温库的任务,更细工单表 + if(endPointObj.getPoint_code().contains("XHW")){ + //pdm_bd_workorder_two任务完成时,status改为1出库中 + // workorderService.update(endPointObj.getVehicle_code2(),"1"); + } + } + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } + + @Override + protected void feedbackTaskState(JSONObject param,SchBaseTask schBaseTask, BaseResponse result) { + log.info("feedbackTaskState方法,param:"+param.toString()); + log.info("feedbackTaskState方法,变更前schBaseTask:"+schBaseTask.toString()); + if(schBaseTask.getPoint_code2().startsWith("DKT")){ + //叠盘任务需要二次分配 + SchBasePoint nextSchBasePoint= pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, "DKT01")); + Integer max_qty = nextSchBasePoint.getVehicle_max_qty(); + //如果是叠盘位,根据当前数量+1为目标地址 + int qty=nextSchBasePoint.getVehicle_qty()+1; + if(qty <= max_qty){ + schBaseTask.setPoint_code2(schBaseTask.getPoint_code2().substring(0,schBaseTask.getPoint_code2().length()-1)+qty); + log.info("feedbackTaskState方法,变更后schBaseTask:"+schBaseTask.toString()); + }else{ + schBaseTask.setRemark("叠盘机空盘数量已达最大值:["+max_qty+"],暂时无法放置托盘!"); + taskService.update(schBaseTask); + throw new BadRequestException(LangProcess.msg("task_point_error4",max_qty.toString())); + } + } + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.class new file mode 100644 index 0000000..1ddb128 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java new file mode 100644 index 0000000..7cf8664 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/SSXBKJTask.java @@ -0,0 +1,207 @@ +package org.nl.wms.sch.task_manage.task.tasks; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.druid.util.StringUtils; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author: psh + * @Description: 输送线补空架 + * @Date: 2024/1/24 + */ +@Slf4j +@Component +@TaskType("SSXBKJTask") +@Lazy +public class SSXBKJTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "SSXBKJTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private PointMapper pointMapper; + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + // 获取任务配置最大生成任务数 + Integer tcmn = taskConfig.getTask_issue_max_num(); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findCreateTasksByTaskConfig(TASK_CONFIG_CODE); + //执行中任务数量小于最大可生成任务数 + if(unFinishTasksByTaskConfig.size() < tcmn){ + Integer now_num = unFinishTasksByTaskConfig.size(); + for (SchBaseTask task : tasks) { + if(now_num < tcmn){ + SchBasePoint point = findNextPoint(); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + log.info("输送线补空架未找到当前符合条件的点位!"); + continue; + }else{ + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),point.getPoint_code()); + if(taskList>0){ + task.setRemark("分配起点点位"+point.getPoint_code()+"已存在未完成任务!"); + taskService.update(task); + // 消息通知 + log.info("分配起点点位"+point.getPoint_code()+"已存在未完成任务!"); + continue; + } + } + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(task,SchBaseTask.class); + acs_task.setPoint_code1(point.getPoint_code()); + //下发 + JSONObject result = this.renotifyAcs(acs_task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + // 设置起点并修改创建成功状态 + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("下发"); + task.setPoint_code1(point.getPoint_code()); + taskService.update(task); + + //发起任务时先把点位占用,防止发起重复任务 + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + taskService.update(task); + } + } + } + } + } + + /** + * 判断目标点位 + * + * @return + */ + private SchBasePoint findNextPoint() { + String regionCode = "KJHC"; + List schBasePointList = pointMapper.findPointByCondition(regionCode, "0",1); + for (SchBasePoint schBasePoint : schBasePointList) { + //查找点上无载具号无任务号、载具数量为1的 + if (schBasePoint.getIs_used() + && StringUtils.isEmpty(schBasePoint.getIng_task_code()) + && StringUtils.isEmpty(schBasePoint.getVehicle_code2()) + && schBasePoint.getVehicle_qty() ==1) { + log.info("输送线补空架找到当前符合条件的点位{}", schBasePoint.getPoint_code()); + return schBasePoint; + } + } + return null; + } + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish")); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_cancel")); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + } + // 终点解锁 + endPointObj.setIng_task_code(""); + endPointObj.setUpdate_time(DateUtil.now()); + pointService.update(endPointObj); + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + //任务取消把原先占用的位置释放 + pointService.update(startPointObj); + } + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + //任务取消把原先占用的位置释放 + pointService.update(endPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + //该场景无需重算等待点 + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.class new file mode 100644 index 0000000..ff1c93d Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java new file mode 100644 index 0000000..21b474d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/XGRKTask.java @@ -0,0 +1,447 @@ +package org.nl.wms.sch.task_manage.task.tasks; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.mes.domain.Head; +import org.nl.wms.mes.domain.QPMES062Request; +import org.nl.wms.mes.domain.QPMES062RequestBody; +import org.nl.wms.sch.data.service.dao.mapper.MaterialDataMapper; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.PointLeftDto; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; +import org.nl.wms.sch.task_manage.enums.PointTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author: zds + * @Description: 西阁楼入库区任务配置 + * @Date: 2024/1/24 + */ +@Slf4j +@Component +@TaskType("XGRKTask") +@Lazy +public class XGRKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "XGRKTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysParamService paramService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private PointMapper pointMapper; + @Autowired + private MesInMaterialMapper materialMapper; + @Autowired + private MaterialDataMapper materialDataMapper; + + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + // 获取任务配置最大下发任务数 + Integer tcmn = taskConfig.getTask_issue_max_num(); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findCreateTasksByTaskConfig(TASK_CONFIG_CODE); + //执行中任务数量小于最大可生成任务数 + if(unFinishTasksByTaskConfig.size() < tcmn){ + Integer now_num = unFinishTasksByTaskConfig.size(); + for (SchBaseTask task : tasks) { + if(now_num < tcmn){ + //若终点不为空,说明是4、5层的中转任务 + String point_code2 = task.getPoint_code2(); + //若不是4、5层的第二条任务 + if(ObjectUtil.isEmpty(point_code2)){ + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(task.getExt_group_data()) + ? JSONObject.parseObject(task.getExt_group_data()) + : null; + SchBasePoint point = findNextPoint(extGroupData.getString("sub_tray"),extGroupData.getDouble("height")); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + log.info("入库未找到当前符合条件的点位!"); + continue; + }else{ + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),point.getPoint_code()); + if(taskList>0){ + task.setRemark("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + continue; + } + } + //层号 + Integer layer_num = point.getLayer_num(); + SchBasePoint point2 = null; + if(layer_num > 3){ + //查找2层中转点 + point2 = pointMapper.findPointByCondition2(point.getRegion_code(),point.getRow_num(),PointTypeEnum.TRANSFER_POINT.getCode()); + if (ObjectUtil.isEmpty(point2)) { + task.setRemark("未找到所需中转点位!"); + taskService.update(task); + // 消息通知 + log.info("入库未找到当前符合条件的中转点位!"); + continue; + } + } + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(task,SchBaseTask.class); + if(layer_num > 3){ + //设置中转点 + acs_task.setPoint_code2(point2.getPoint_code()); + //设置货位终点 + acs_task.setPoint_code3(point.getPoint_code()); + }else{ + //设置货位终点 + acs_task.setPoint_code2(point.getPoint_code()); + } + acs_task.setVehicle_code(extGroupData.getString("mother_tray")); + acs_task.setVehicle_code2(extGroupData.getString("sub_tray")); + //下发 + JSONObject result = this.renotifyAcs(acs_task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + // 设置终点并修改创建成功状态 + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("下发"); + if(layer_num > 3){ + //设置中转点 + task.setPoint_code2(point2.getPoint_code()); + //设置货位终点 + task.setPoint_code3(point.getPoint_code()); + }else{ + //设置货位终点 + task.setPoint_code2(point.getPoint_code()); + } + task.setVehicle_code(extGroupData.getString("mother_tray")); + task.setVehicle_code2(extGroupData.getString("sub_tray")); + taskService.update(task); + + //发起任务时先把点位占用,防止发起重复任务 + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + if(layer_num > 3){ + point2.setIng_task_code(task.getTask_code()); + pointService.update(point2); + } + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + taskService.update(task); + } + } + else{//若是4、5层的中转任务 + //查询4、5层点位信息 + SchBasePoint point = pointService.getById(point_code2); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("目标点位信息异常,查询失败!"); + taskService.update(task); + // 消息通知 + log.info("入库未找到当前符合条件的点位!"); + continue; + }else{ + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),point.getPoint_code()); + if(taskList>0){ + task.setRemark("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + continue; + } + } + //下发 + JSONObject result = this.renotifyAcs(task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + // 设置终点并修改创建成功状态 + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("下发"); + taskService.update(task); + + //发起任务时先把点位占用,防止发起重复任务 + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + taskService.update(task); + } + } + } + } + } + } + + /** + * 判断目标点位 + * + * @return + */ + private SchBasePoint findNextPoint(String sub_tray,Double height) { + //1、优先从中间库存区查找 + String regionCode = "ZJK"; + SchBasePoint point = getSchBasePointByYL(regionCode,height); + if (ObjectUtil.isNotEmpty(point)){ + return point; + }else {//2、中间存区未找到,则去东西阁楼库区 + regionCode="XGK"; + point = getSchBasePointByYL(regionCode,height); + if (ObjectUtil.isNotEmpty(point)){ + return point; + }else {//2、中间存区未找到,则去东西阁楼库区 + regionCode="DGK"; + return getSchBasePointByYL(regionCode,height); + } + } + } + + /** + * 根据区域编码和货物高度查找合适的点位 + * 规则:根据启用的原料区的排号顺序分配 + * @param regionCode + * @return + */ + private SchBasePoint getSchBasePointByYL(String regionCode,Double height) { + List rowList = new ArrayList(); + //根据库区和高度,查询有空位,且按 当前已入库载具数量、排号升序 + if(height == 1.2){ + rowList = pointMapper.findPointRowByCondition(regionCode,0,1.2); + if(rowList.size() == 0){ + rowList = pointMapper.findPointRowByCondition(regionCode,0,1.8); + if(rowList.size() == 0){ + rowList = pointMapper.findPointRowByCondition(regionCode,0,2.0); + } + } + }else if(height == 1.8){ + rowList = pointMapper.findPointRowByCondition(regionCode,0,1.8); + if(rowList.size() == 0){ + rowList = pointMapper.findPointRowByCondition(regionCode,0,2.0); + } + }else if(height == 2.0){ + rowList = pointMapper.findPointRowByCondition(regionCode,0,2.0); + } + //若存在满足条件的排号 + if(rowList.size() > 0){ + Integer row = rowList.get(0).getRow_num(); + //分配入库点位,按层数又低到高、列号由小到大 + SchBasePoint point = pointMapper.findPointByCondition2(regionCode,row, PointTypeEnum.STORAGE_POINT.getCode()); + if(ObjectUtil.isNotEmpty(point)){ + return point; + } + } + return null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish")); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_cancel")); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String point_code3 = taskObj.getPoint_code3(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + SchBasePoint pointObj3 = null; + if(ObjectUtil.isNotEmpty(point_code3)){ + pointObj3 = pointService.getById(point_code3); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.update(taskObj); + } + else if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + } + //更新终点 + endPointObj.setUpdate_time(DateUtil.now()); + endPointObj.setVehicle_code(taskObj.getVehicle_code()); + endPointObj.setVehicle_code2(taskObj.getVehicle_code2()); + endPointObj.setVehicle_qty(1); + endPointObj.setInstorage_time(DateUtil.now()); + if (ObjectUtil.isNotEmpty(pointObj3)) { + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(taskObj,SchBaseTask.class); + //设置任务状态为 申请状态(当前任务参数不全,不具备下发条件) + acs_task.setTask_status(TaskStatus.APPLY.getCode()); + acs_task.setPoint_code1(taskObj.getPoint_code2()); + acs_task.setPoint_code2(taskObj.getPoint_code3()); + acs_task.setPoint_code3(""); + acs_task.setTask_group_seq(2); + //创建中转指令 + String task_code_new =taskService.create(acs_task); + //更新终点任务号 + endPointObj.setIng_task_code(task_code_new); + pointObj3.setIng_task_code(task_code_new); + pointService.update(pointObj3); + }else{ + // 终点解锁 + endPointObj.setIng_task_code(""); + } + pointService.update(endPointObj); + + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + taskService.update(taskObj); + //如果是两点任务,回传mes + if(ObjectUtil.isEmpty(pointObj3)){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(MesInMaterial::getPallet_sn,taskObj.getVehicle_code2()); + //回传状态为0的 + wrapper.eq(MesInMaterial::getReturn_status,"0"); + List materialList= materialMapper.selectList(wrapper); + + try { + //输送线到原材料库的任务完成,反馈MES接口。逻辑可以去掉。 + if(ObjectUtil.isNotEmpty(materialList)) { + String url = "http://192.168.9.124/sitAppWebApi/PDSToWMS/Api/QPMES062"; + QPMES062Request qpmes062Request = new QPMES062Request(); + Head head=new Head(); + head.setDest_system("WMS"); + head.setIntf_id("QPMES062"); + head.setSrc_msgid(IdUtil.simpleUUID()); + head.setSrc_system("LMS"); + qpmes062Request.setHead(head); + List qpmes062RequestBodyList=new ArrayList<>(); + for(MesInMaterial material:materialList) { + QPMES062RequestBody qpmes062RequestBody = new QPMES062RequestBody(); + qpmes062RequestBody.setOrder_code(material.getOrder_code()); + qpmes062RequestBody.setBatch(material.getBatch()); + qpmes062RequestBody.setPallet_sn(material.getPallet_sn()); + qpmes062RequestBody.setProduct_description(material.getProduct_description()); + qpmes062RequestBody.setProduct_name(material.getProduct_name()); + qpmes062RequestBody.setQty(material.getQty()); + qpmes062RequestBody.setSpecification(material.getSpecification()); + //设置外部系统仓位标识 + qpmes062RequestBody.setStrcut_code(endPointObj.getExt_point_code()); + qpmes062RequestBodyList.add(qpmes062RequestBody); + } + qpmes062Request.setBody(qpmes062RequestBodyList); + log.info("开始调用QPMES062服务,入参{}", JSON.toJSONString(qpmes062Request)); + String resultMsg = HttpRequest.post(url) + .body(JSON.toJSONString(qpmes062Request)) + .execute().body(); + log.info("QPMES062服务调用成功,反馈{}",resultMsg); + JSONObject result = JSONObject.parseObject(resultMsg); + String code = result.getString("code"); + if("0".equals(code)){ + //更新接口表 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(MesInMaterial::getPallet_sn,taskObj.getVehicle_code2()); + //回传状态为0的 + updateWrapper.eq(MesInMaterial::getReturn_status,"0"); + updateWrapper.set(MesInMaterial::getReturn_status,"1"); + materialMapper.update(null,updateWrapper); + } + }else{ + log.error("当前子托盘:"+taskObj.getVehicle_code2()+"不存在需要回传的物料信息,请确认!"); + } + }catch (Exception e){ + log.error("入库上报MES失败{}",e.getMessage(),e); + } + } + } + else if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + //任务取消把原先占用的位置释放 + pointService.update(endPointObj); + } + if (ObjectUtil.isNotEmpty(pointObj3)) { + pointObj3.setIng_task_code(""); + //任务取消把原先占用的位置释放 + pointService.update(pointObj3); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskService.update(taskObj); + } + + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + //该场景无需重算等待点 + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.class new file mode 100644 index 0000000..1a64a51 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java new file mode 100644 index 0000000..c2a5219 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLCKTask.java @@ -0,0 +1,396 @@ +package org.nl.wms.sch.task_manage.task.tasks; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.system.service.param.ISysParamService; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.sch.data.service.dao.mapper.MaterialDataMapper; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; +import java.util.List; + +/** + * @Author: psh + * @Description: 原材料出库 + * @Date: 2023/1/24 + */ +@Slf4j +@Component +@TaskType("YCLCKTask") +@Lazy +public class YCLCKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "YCLCKTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private PointMapper pointMapper; + @Autowired + private MesInMaterialMapper materialMapper; + @Autowired + private MaterialDataMapper materialDataMapper; + @Autowired + private ISysParamService paramService; + + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + // 获取任务配置最大生成任务数 + Integer tcmn = taskConfig.getTask_issue_max_num(); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findCreateTasksByTaskConfig(TASK_CONFIG_CODE); + //执行中任务数量小于最大可生成任务数 + if(unFinishTasksByTaskConfig.size() < tcmn){ + Integer now_num = unFinishTasksByTaskConfig.size(); + for (SchBaseTask task : tasks) { + if(now_num < tcmn){ + JSONObject jsonObject = JSONObject.parseObject(task.getExt_group_data()); + String region; + if ("0".equals(jsonObject.getString("mode"))) { + region = "HW"; + } else if ("1".equals(jsonObject.getString("mode"))) { + region = "HWK"; + } else { + log.error("任务:" + task.getTask_code() + "回温mode:" + jsonObject.getString("mode") + "模式不正确!"); + continue; + } + SchBasePoint point = findNextPoint(task, region); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + log.info("原材料出库未找到所需点位!"); + continue; + }else{ + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),point.getPoint_code()); + if(taskList>0){ + task.setRemark("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + continue; + } + } + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(task,SchBaseTask.class); + // 设置终点并修改创建成功状态 + acs_task.setPoint_code2(point.getPoint_code()); + SchBasePoint schBasePoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, task.getPoint_code1())); + acs_task.setVehicle_code(schBasePoint.getVehicle_code()); + acs_task.setVehicle_code2(schBasePoint.getVehicle_code2()); + //下发 + JSONObject result = this.renotifyAcs(acs_task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + // 设置终点并修改创建成功状态 + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("任务下发"); + task.setPoint_code2(point.getPoint_code()); + task.setVehicle_code(schBasePoint.getVehicle_code()); + task.setVehicle_code2(schBasePoint.getVehicle_code2()); + taskService.update(task); + //发起任务时先把点位占用,防止发起重复任务 + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + //pdm_bd_workorder_two任务下发时,status改为2 + //workorderService.update(schBasePoint.getVehicle_code2(),"2"); + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + taskService.update(task); + } + } + } + } + } + + /** + * @return + */ + private SchBasePoint findNextPoint(SchBaseTask task, String regionCode) { + List schBasePointList = pointMapper.findPointByCondition(regionCode, "0",0); + for (SchBasePoint schBasePoint : schBasePointList) { + //已锁定直接返回 + if (task.getTask_code().equals(schBasePoint.getIng_task_code())) { + return schBasePoint; + } + if (schBasePoint.getIs_used() + && schBasePoint.getVehicle_qty() == 0 + && ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) + && ObjectUtil.isEmpty(schBasePoint.getVehicle_code2())) { + log.info("原材料出库任务找到当前符合条件的缓存区位置{}", schBasePoint.getPoint_code()); + return schBasePoint; + } + } + return null; + } + + /** + * 任务完成设置完成时间为开始固化时间 + */ + @Override +// @Transactional(rollbackFor = Exception.class) + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish")); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_cancel")); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + String vehicleCode = taskObj.getVehicle_code(); + SchBaseVehiclematerialgroup one =null; + if(ObjectUtil.isNotEmpty(vehicleCode)){ + //查询母托盘 + JSONObject group_jo = new JSONObject(); + group_jo.put("vehicle_code",vehicleCode); + one = vehiclematerialgroupService.getGroup(group_jo); + if (ObjectUtil.isNotEmpty(one)) { + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code()); + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + one.setInstorage_time(DateUtil.now()); + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateByJson(one); + } + } + String vehicleCode2 = taskObj.getVehicle_code2(); + if(ObjectUtil.isNotEmpty(vehicleCode2)){ + //查询子托盘 + JSONObject group_jo = new JSONObject(); + group_jo.put("vehicle_code",vehicleCode2); + one = vehiclematerialgroupService.getGroup(group_jo); + if (ObjectUtil.isNotEmpty(one)) { + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way() == null ? "" : (one.getMove_way() + " -> ") + endPointObj.getPoint_code()); + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + one.setInstorage_time(DateUtil.now()); + if(ObjectUtil.isEmpty(extGroupData.getString("time"))){ + one.setStanding_time(1); + }else{ + one.setStanding_time(Integer.valueOf(extGroupData.getString("time"))); + } + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + if(ObjectUtil.isNotEmpty(extGroupData.getString("batch"))){ + one.setPcsn(extGroupData.getString("batch")); + } + vehiclematerialgroupService.updateByJson(one); + } + } + + // 终点解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(taskObj.getVehicle_code()); + endPointObj.setVehicle_code2(taskObj.getVehicle_code2()); + endPointObj.setVehicle_qty(1); + endPointObj.setUpdate_time(DateUtil.now()); + if(ObjectUtil.isEmpty(extGroupData.getString("time"))){ + }else{ + } + if(ObjectUtil.isNotEmpty(extGroupData.getString("batch"))){ + endPointObj.setPcsn(extGroupData.getString("batch")); + } + endPointObj.setInstorage_time(DateUtil.now()); + pointService.update(endPointObj); + // 起点清空 + startPointObj.setVehicle_code(""); + startPointObj.setVehicle_code2(""); + startPointObj.setIng_task_code(""); + startPointObj.setVehicle_qty(0); + startPointObj.setUpdate_time(DateUtil.now()); + pointService.updateById(startPointObj); + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setGroup_id(ObjectUtil.isNotEmpty(one)?one.getGroup_id():null); + taskObj.setRemark("任务完成"); + //pdm_bd_workorder_two任务完成时,status改为3 + //workorderService.update(vehicleCode2,"3"); + + /* List materialList = materialMapper.selectList(new LambdaQueryWrapper() + .eq(Material::getPalletSN, taskObj.getVehicle_code2()) + .le(Material::getReturn_status, "1") + .eq(Material::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()));*/ + try { + /*if (ObjectUtil.isNotEmpty(materialList)) { + //自动化领料出库后经由AGV将出库信息同步至MES,从原材料库到回温库完成后自动调用 + //String url = "http://192.168.9.124/sitAppWebApi/PDSToWMS/Api/QPMES065"; + Param mes_url = paramService.findByCode(GeneralDefinition.MES_URL); + Assert.notNull(mes_url, "找不到配置文件,请确认系统参数[mes_url]配置是否存在!"); + String url = mes_url.getValue()+"QPMES065"; + QPMES065Request qpmes065Request = new QPMES065Request(); + List qpmes065RequestBodyList=new ArrayList<>(); + Head head=new Head(); + head.setDEST_SYSTEM("WMS"); + head.setINTF_ID("QPMES065"); + head.setSRC_MSGID(IdUtil.simpleUUID()); + head.setSRC_SYSTEM("AGV"); + qpmes065Request.setHEAD(head); + QPMES065RequestBody qpmes065RequestBody=new QPMES065RequestBody(); + double qty=0; + for(Material material:materialList) { + qpmes065RequestBody.setMoname(extGroupData.getString("workorder_code")); + qpmes065RequestBody.setLotSN(material.getPalletSN()); + qty+=Double.parseDouble(material.getQty()); + qpmes065RequestBody.setSiteName(material.getLocationCode()); + qpmes065RequestBody.setZXXV01(ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))?"1":"0"); + qpmes065RequestBody.setZXXV02(taskObj.getVehicle_code()); + } + qpmes065RequestBody.setQty(String.valueOf(qty)); + qpmes065RequestBodyList.add(qpmes065RequestBody); + qpmes065Request.setBODY(qpmes065RequestBodyList); + log.info("开始调用QPMES065服务,入参{}",JSON.toJSONString(qpmes065Request)); + String resultMsg = HttpRequest.post(url) + .body(JSON.toJSONString(qpmes065Request)) + .execute().body(); + log.info("QPMES065服务调用成功,反馈{}",resultMsg); + JSONObject result = JSONObject.parseObject(resultMsg); + String code = result.getString("code"); + if(ObjectUtil.isNotEmpty(code) && "0".equals(code)){ + //更新接口表 + //pdm_bd_workorder_two任务完成时,status改为3 + workorderService.update(vehicleCode2,"4"); + } + } else { + log.error("当前子托盘:" + taskObj.getVehicle_code2() + "不存在未解绑的物料信息,请确认!"); + }*/ + } catch (Exception e) { + log.error("原材料出库上报MES失败{}", e.getMessage(), e); + } + try{ + /* Map> groupedBy = materialList.stream() + .collect(Collectors.groupingBy(Material::getProductName)); + + if(ObjectUtil.isNotEmpty(groupedBy)) { + Iterator>> iterator = groupedBy.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> next = iterator.next(); + List tempList = next.getValue(); + Material material = tempList.get(0); + double length = 0.0; + double weight = 0.0; + for (Material temp : tempList) { + length += Double.parseDouble(temp.getIncomingLength()); + weight += Double.parseDouble(temp.getIncomingWeight()); + } + MaterialDataDto materialDataDto = new MaterialDataDto(); + materialDataDto.setSupplierCode(material.getSupplierCode()); + materialDataDto.setSupplierName(material.getSupplierName()); + materialDataDto.setProductName(material.getProductName()); + materialDataDto.setSpecification(material.getSpecification()); + if(ObjectUtil.isNotEmpty(extGroupData.getString("batch"))){ + materialDataDto.setPickingBatch(extGroupData.getString("batch")); + } + materialDataDto.setLength(BigDecimal.valueOf(length)); + materialDataDto.setWeight(BigDecimal.valueOf(weight)); + materialDataDto.setCreateTime(new DateTime().toTimestamp()); + materialDataDto.setType(2); + materialDataMapper.insert(materialDataDto); + } + }*/ + }catch (Exception e){ + log.error("原材料入库暂存入库数据失败{}",e.getMessage(),e); + } + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + endPointObj.setUpdate_time(DateUtil.now()); + pointService.update(endPointObj); + } + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + startPointObj.setUpdate_time(DateUtil.now()); + pointService.update(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + String vehicleCode2 = taskObj.getVehicle_code2(); + //pdm_bd_workorder_two任务取消时,status改为1 + if(ObjectUtil.isNotEmpty(vehicleCode2)){ + // workorderService.update(vehicleCode2,"1"); + } + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + //该场景无需重算等待点 + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.class new file mode 100644 index 0000000..28fa0cd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java new file mode 100644 index 0000000..be7f8e3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/YCLRKTask.java @@ -0,0 +1,478 @@ +package org.nl.wms.sch.task_manage.task.tasks; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.language.LangProcess; +import org.nl.system.service.param.ISysParamService; +import org.nl.system.service.param.dao.Param; +import org.nl.wms.ext.service.dto.to.BaseResponse; +import org.nl.wms.mes.domain.Head; +import org.nl.wms.mes.domain.QPMES062Request; +import org.nl.wms.mes.domain.QPMES062RequestBody; +import org.nl.wms.sch.data.service.dao.mapper.MaterialDataMapper; +import org.nl.wms.sch.data.service.dto.MaterialDataDto; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.material.service.dao.MesInMaterial; +import org.nl.wms.sch.material.service.dao.mapper.MesInMaterialMapper; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.PointLeftDto; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.mapper.PointMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author: psh + * @Description: 原材料入库 + * @Date: 2024/1/24 + */ +@Slf4j +@Component +@TaskType("YCLRKTask") +@Lazy +public class YCLRKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "YCLRKTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysParamService paramService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private PointMapper pointMapper; + @Autowired + private MesInMaterialMapper materialMapper; + @Autowired + private MaterialDataMapper materialDataMapper; + + @Override +// @Transactional(rollbackFor = Exception.class) + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + // 获取任务配置最大下发任务数 + Integer tcmn = taskConfig.getTask_issue_max_num(); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findCreateTasksByTaskConfig(TASK_CONFIG_CODE); + //执行中任务数量小于最大可生成任务数 + if(unFinishTasksByTaskConfig.size() < tcmn){ + Integer now_num = unFinishTasksByTaskConfig.size(); + for (SchBaseTask task : tasks) { + if(now_num < tcmn){ + String extGroupData = task.getExt_group_data(); + JSONObject jsonObject = JSONObject.parseObject(extGroupData); + SchBasePoint point = findNextPoint(jsonObject.getString("sub_tray")); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + log.info("原材料入库未找到当前符合条件的点位!"); + continue; + }else{ + // 获取任务 + Integer taskList = taskService.findUnFinishTasksByPoint_code2(task.getTask_code(),point.getPoint_code()); + if(taskList>0){ + task.setRemark("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + taskService.update(task); + // 消息通知 + log.info("分配终点点位"+point.getPoint_code()+"已存在未完成任务!"); + continue; + } + } + //复制对象 + SchBaseTask acs_task = BeanUtil.copyProperties(task,SchBaseTask.class); + acs_task.setPoint_code2(point.getPoint_code()); + acs_task.setVehicle_code(jsonObject.getString("mother_tray")); + acs_task.setVehicle_code2(jsonObject.getString("sub_tray")); + //下发 + JSONObject result = this.renotifyAcs(acs_task); + String status = result.getString("status"); + //下发成功 + if("200".equals(status)){ + // 设置终点并修改创建成功状态 + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark("下发"); + task.setPoint_code2(point.getPoint_code()); + task.setVehicle_code(jsonObject.getString("mother_tray")); + task.setVehicle_code2(jsonObject.getString("sub_tray")); + taskService.update(task); + + //发起任务时先把点位占用,防止发起重复任务 + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + now_num++; + }else{ + task.setRemark("下发acs失败:"+result.toString()); + taskService.update(task); + } + } + } + } + } + + /** + * 判断目标点位 + * + * @return + */ + private SchBasePoint findNextPoint(String sub_tray) { + //人工录入的子托盘号以YBHC开头 + if(sub_tray.startsWith("YBHC")) { + String regionCode = "YLHC"; + return getSchBasePointByYLHC(regionCode); + }else {//非人工录入子托盘 + //1、优先从原料库存区查找 + String regionCode = "YL"; + SchBasePoint point = getSchBasePointByYL(regionCode); + if (ObjectUtil.isNotEmpty(point)){ + return point; + }else {//2、原料库存区未找到,则去空架缓存区查找 + regionCode="KJHC"; + ;return getSchBasePoint(regionCode); + } + } + + } + + /** + * 根据区域编码查找合适的点位 + * @param regionCode + * @return + */ + private SchBasePoint getSchBasePoint(String regionCode) { + List schBasePointList = pointMapper.findPointByCondition(regionCode, "0",0); + for (SchBasePoint schBasePoint : schBasePointList) { + if (schBasePoint.getIs_used() + && schBasePoint.getVehicle_qty() ==0 + && ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) + && ObjectUtil.isEmpty(schBasePoint.getVehicle_code2())) { + log.info("原材料入库找到当前符合条件的点位{}", schBasePoint.getPoint_code()); + return schBasePoint; + } + } + return null; + } + + /** + * 根据区域编码查找合适的点位 + * 规则:根据启用的原料区的排号顺序分配,234567一共6排, + * 每次记录当前分配的排号到参数表,下次分配前读取参数表上次分配排号 + * @param regionCode + * @return + */ + private SchBasePoint getSchBasePointByYL(String regionCode) { + /* List rowist = pointMapper.findPointRowByCondition(regionCode,0,0.0); + if(ObjectUtil.isNotEmpty(rowist)){ + Map map = new HashMap(); + for (PointLeftDto pointLeft : rowist) { + map.put(pointLeft.getRow_num(), pointLeft.getLeft_num()); + } + Param now_yl_row = paramService.findByCode(GeneralDefinition.NOW_YL_ROW); + Assert.notNull(now_yl_row, "找不到配置文件,请确认系统参数[now_yl_row]配置是否存在!"); + //获取上次已分配的排数 + Integer row = Integer.valueOf(now_yl_row.getValue()); + //最多轮询7次map + int tryTime = 7; + while(tryTime>0){ + row = row +1; + if(row>7){ + row = row%7; + } + if(map.containsKey(row)){ + //分配原料入库点位 + SchBasePoint point = pointMapper.findPointByCondition2(regionCode,row); + if(ObjectUtil.isNotEmpty(point)){ + //更新参数排号 + now_yl_row.setValue(row.toString()); + paramService.update(now_yl_row); + return point; + } + }else{ + tryTime = tryTime -1; + } + } + }*/ + return null; + } + + /** + * 根据区域编码查找合适的点位 + * 规则:根据启用的原料缓存区的排号顺序分配,234一共3排, + * 每次记录当前分配的排号到参数表,下次分配前读取参数表上次分配排号 + * @param regionCode + * @return + */ + private SchBasePoint getSchBasePointByYLHC(String regionCode) { + /*List rowist = pointMapper.findPointRowByCondition(regionCode,0,0.0); + if(ObjectUtil.isNotEmpty(rowist)){ + Map map = new HashMap(); + for (PointLeftDto pointLeft : rowist) { + map.put(pointLeft.getRow_num(), pointLeft.getLeft_num()); + } + Param now_ylhc_row = paramService.findByCode(GeneralDefinition.NOW_YLHC_ROW); + Assert.notNull(now_ylhc_row, "找不到配置文件,请确认系统参数[now_ylhc_row]配置是否存在!"); + //获取上次已分配的排数 + Integer row = Integer.valueOf(now_ylhc_row.getValue()); + //最多轮询7次map + int tryTime = 7; + while(tryTime>0){ + row = row +1; + if(row>7){ + row = row%7; + } + if(map.containsKey(row)){ + //分配原料入库点位 + SchBasePoint point = pointMapper.findPointByCondition2(regionCode,row); + if(ObjectUtil.isNotEmpty(point)){ + //更新参数排号 + now_ylhc_row.setValue(row.toString()); + paramService.update(now_ylhc_row); + return point; + } + }else{ + tryTime = tryTime -1; + } + } + }*/ + return null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_finish")); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException(LangProcess.msg("task_cancel")); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + } + // 终点解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(taskObj.getVehicle_code()); + endPointObj.setVehicle_code2(taskObj.getVehicle_code2()); + endPointObj.setUpdate_time(DateUtil.now()); + endPointObj.setVehicle_qty(1); + endPointObj.setMaterial_weight(extGroupData.getBigDecimal("weight")); + endPointObj.setInstorage_time(DateUtil.now()); + pointService.update(endPointObj); + // 要把数据存到组盘表 -> 改造公共方法,返回id + //组盘表需要关联外部mes晶棒数据,一对多 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + //wrapper.eq(Material::getPalletSN,taskObj.getVehicle_code2()); + //wrapper.eq(Material::getGroup_bind_material_status,GroupBindMaterialStatusEnum.BOUND.getValue()); + //回传状态为0的 + wrapper.eq(MesInMaterial::getReturn_status,"0"); + List materialList= materialMapper.selectList(wrapper); + SchBaseVehiclematerialgroup groupEntity = getSchBaseVehiclematerialgroup(taskObj, endPoint, endPointObj); + groupEntity.setVehicle_code(taskObj.getVehicle_code()); + groupEntity.setVehicle_type("0"); + groupEntity.setMaterial_weight(extGroupData.getBigDecimal("weight")); + if(ObjectUtil.isNotEmpty(materialList)) { + // groupEntity.setRemark(materialList.get(0).getSupplierName()); + //groupEntity.setMaterial_id(materialList.get(0).getProductName()); + } + vehiclematerialgroupService.save(groupEntity); + + groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + groupEntity.setVehicle_code(taskObj.getVehicle_code2()); + groupEntity.setVehicle_type("1"); + groupEntity.setMaterial_weight(extGroupData.getBigDecimal("weight")); + if(ObjectUtil.isNotEmpty(materialList)) { + // groupEntity.setRemark(materialList.get(0).getSupplierName()); + // groupEntity.setMaterial_id(materialList.get(0).getProductName()); + } + vehiclematerialgroupService.save(groupEntity); + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setGroup_id(ObjectUtil.isNotEmpty(groupEntity)?groupEntity.getGroup_id():null); + taskObj.setRemark("任务完成"); + try { + /* //输送线到原材料库的任务完成,反馈MES接口。逻辑可以去掉。 + if(ObjectUtil.isNotEmpty(materialList)) { + String url = "http://192.168.9.124/sitAppWebApi/PDSToWMS/Api/QPMES062"; + QPMES062Request qpmes062Request = new QPMES062Request(); + Head head=new Head(); + head.setDEST_SYSTEM("WMS"); + head.setINTF_ID("QPMES062"); + head.setSRC_MSGID(IdUtil.simpleUUID()); + head.setSRC_SYSTEM("AGV"); + qpmes062Request.setHEAD(head); + List qpmes062RequestBodyList=new ArrayList<>(); + for(Material material:materialList) { + QPMES062RequestBody qpmes062RequestBody = new QPMES062RequestBody(); + qpmes062RequestBody.setSimtOrderNo(material.getSimtOrderNo()); + qpmes062RequestBody.setLocationCode(material.getLocationCode()); + qpmes062RequestBody.setSimtType(material.getSimtType()); + qpmes062RequestBody.setDeliveryNo(material.getDeliveryNo()); + qpmes062RequestBody.setWhlCode(material.getWhlCode()); + qpmes062RequestBody.setPalletSn(material.getLotSN()); + qpmes062RequestBody.setUserCode(material.getSupplierCode()); + qpmes062RequestBody.setUserName(material.getSupplierName()); + qpmes062RequestBodyList.add(qpmes062RequestBody); + } + qpmes062Request.setBODY(qpmes062RequestBodyList); + log.info("开始调用QPMES062服务,入参{}",JSON.toJSONString(qpmes062Request)); + String resultMsg = HttpRequest.post(url) + .body(JSON.toJSONString(qpmes062Request)) + .execute().body(); + log.info("QPMES062服务调用成功,反馈{}",resultMsg); + JSONObject result = JSONObject.parseObject(resultMsg); + String code = result.getString("code"); + if("0".equals(code)){ + //更新接口表 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Material::getPalletSN,taskObj.getVehicle_code2()); + updateWrapper.eq(Material::getGroup_bind_material_status,GroupBindMaterialStatusEnum.BOUND.getValue()); + //回传状态为0的 + updateWrapper.eq(Material::getReturn_status,"0"); + updateWrapper.set(Material::getReturn_status,"1"); + materialMapper.update(null,updateWrapper); + } + }else{ + log.error("当前子托盘:"+taskObj.getVehicle_code2()+"不存在未解绑的物料信息,请确认!"); + }*/ + }catch (Exception e){ + log.error("原材料入库上报MES失败{}",e.getMessage(),e); + } + /* try{ + Map> groupedBy = materialList.stream() + .collect(Collectors.groupingBy(Material::getProductName)); + + if(ObjectUtil.isNotEmpty(groupedBy)) { + Iterator>> iterator = groupedBy.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> next = iterator.next(); + List tempList=next.getValue(); + Material material = tempList.get(0); + double length = 0.0; + double weight = 0.0; + for (Material temp : tempList) { + length += Double.parseDouble(temp.getIncomingLength()); + weight += Double.parseDouble(temp.getIncomingWeight()); + } + MaterialDataDto materialDataDto = new MaterialDataDto(); + materialDataDto.setSupplierCode(material.getSupplierCode()); + materialDataDto.setSupplierName(material.getSupplierName()); + materialDataDto.setProductName(material.getProductName()); + materialDataDto.setSpecification(material.getSpecification()); + materialDataDto.setBatch(material.getBatch()); + materialDataDto.setLength(BigDecimal.valueOf(length)); + materialDataDto.setWeight(BigDecimal.valueOf(weight)); + materialDataDto.setCreateTime(new DateTime().toTimestamp()); + materialDataDto.setType(1); + materialDataMapper.insert(materialDataDto); + } + } + }catch (Exception e){ + log.error("原材料入库暂存入库数据失败{}",e.getMessage(),e); + }*/ + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + //任务取消把原先占用的位置释放 + pointService.update(endPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + private static SchBaseVehiclematerialgroup getSchBaseVehiclematerialgroup(SchBaseTask taskObj, String startPoint, SchBasePoint startPointObj) { + SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); + groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + groupEntity.setCreate_id("2"); + groupEntity.setCreate_name("ACS"); + groupEntity.setCreate_time(DateUtil.now()); + groupEntity.setUpdate_time(DateUtil.now()); + groupEntity.setMaterial_id(""); + groupEntity.setStanding_time(0); + groupEntity.setMaterial_weight(BigDecimal.valueOf(0)); + groupEntity.setWorkorder_code(""); + groupEntity.setPoint_code(startPoint); + groupEntity.setPoint_name(startPointObj.getPoint_name()); +// groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); +// groupEntity.setInstorage_time(DateUtil.now()); + groupEntity.setTask_code(taskObj.getTask_code()); + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setIs_delete(false); + groupEntity.setMove_way(startPoint); + return groupEntity; + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } + + @Override + protected void feedbackTaskState(JSONObject param, SchBaseTask schBaseTask, BaseResponse result) { + //该场景无需重算等待点 + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.class new file mode 100644 index 0000000..d456bad Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java new file mode 100644 index 0000000..13bfa14 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java @@ -0,0 +1,44 @@ +package org.nl.wms.sch.task_manage.task.tasks.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.dto.PointLeftDto; + +import java.util.List; + +/** + * @Author: zds + * @Description: + * @Date: 2023/10/9 + */ +public interface PointMapper extends BaseMapper { + List findPointByRegion(String regionCode,String point_status); + + List findPointByCondition(String regionCode,String point_status,Integer vehicle_qty); + + List findPointRowByCondition(String regionCode, Integer vehicle_qty,Double height); + + /** + * 根据库区、排号,按列从大到小 + * @param regionCode + * @param row_num + * @return + */ + SchBasePoint findPointByCondition2Desc(String regionCode,Integer row_num,String point_type); + /** + * 根据库区、排号,按列从小到大 + * @param regionCode + * @param row_num + * @return + */ + SchBasePoint findPointByCondition2(String regionCode,Integer row_num,String point_type); + + List findPointByParentPoint(String pointCode); + + void updatePointStatus(String device_code,String state); + + void updateVehicleType(String device_code,String vehicle_type); + void updatePointType(String device_code,String point_type); + + void updatePointVehicleQty(String device_code,String state); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml new file mode 100644 index 0000000..1b1f7b4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + update sch_base_point set point_status = #{state} + where point_code like CONCAT('%', #{device_code}, '%') + + + + update sch_base_point set vehicle_type = #{vehicle_type} + where point_code like CONCAT('%', #{device_code}, '%') + + + + update sch_base_point set point_type = #{point_type} + where point_code like CONCAT('%', #{device_code}, '%') + + + + update sch_base_point set vehicle_qty = #{state} + where point_code like CONCAT('%', #{device_code}, '%') + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/MyEventListener.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/MyEventListener.class new file mode 100644 index 0000000..af2f6c3 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/MyEventListener.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/MyEventListener.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/MyEventListener.java new file mode 100644 index 0000000..a834e93 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/MyEventListener.java @@ -0,0 +1,20 @@ +package org.nl.wms.util; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * @Author: lyd + * @Description: 监听事件,用来debug查看bean工厂等信息 + * @Date: 2023/5/23 + */ +@Component +public class MyEventListener { + + @EventListener + public void handleContextRefresh(ContextRefreshedEvent event) { + ApplicationContext applicationContext = event.getApplicationContext(); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/PointUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/PointUtils.class new file mode 100644 index 0000000..b95a35b Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/PointUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/PointUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/PointUtils.java new file mode 100644 index 0000000..167d433 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/PointUtils.java @@ -0,0 +1,51 @@ +package org.nl.wms.util; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.config.SpringContextHolder; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; + +/** + * @Author: lyd + * @Description: 点位工具类 + * @Date: 2023/5/17 + */ +public class PointUtils { + + /** + * 获取状态名或者类型名 + * @param explain + * @param label + * @return + */ + public static String getStatusOrTypeName(String explain, String label) { + JSONObject statusArr = new JSONObject(); + String[] split = explain.split(","); + for ( int j = 0; j < split.length; j++) { + String[] status = split[j].split("-"); + statusArr.put(status[0], status[1]); + } + // 设置 + return statusArr.getString(label); + } + + /** + * 清空点位 + * @param point + */ + public static void clearPoint(SchBasePoint point) { + SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class); +// point.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode()); + point.setVehicle_type(""); + point.setVehicle_code(""); + point.setIng_task_code(""); + //叠盘机数量由acs同步,无需维护 + if(!point.getPoint_code().startsWith("DKT")){ + point.setVehicle_qty(0); + } + point.setUpdate_time(DateUtil.now()); + pointService.updateById(point); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/TaskUtils.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/TaskUtils.class new file mode 100644 index 0000000..c419b73 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/TaskUtils.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/TaskUtils.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/TaskUtils.java new file mode 100644 index 0000000..b02cb4c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/TaskUtils.java @@ -0,0 +1,65 @@ +package org.nl.wms.util; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.function.Consumer; + +/** + * @Author: lyd + * @Description: 任务修改抽取的公用方法 + * @Date: 2023/6/13 + */ +@Component +@Lazy +public class TaskUtils { + @Autowired + private ISchBaseTaskService taskService; + + public void setUpdateByAcs(SchBaseTask taskObj) { + taskObj.setUpdate_id("2"); + taskObj.setUpdate_name("ACS系统"); + taskObj.setUpdate_time(DateUtil.now()); + } + public void setUpdateByPC(SchBaseTask taskObj) { + taskObj.setUpdate_id(SecurityUtils.getCurrentUserId()); + taskObj.setUpdate_name(SecurityUtils.getCurrentNickName()); + taskObj.setUpdate_time(DateUtil.now()); + } + + // 根据类型去判断谁修改的 + public void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { + setUpdateByAcs(taskObj); + } else { + setUpdateByPC(taskObj); + } + } + + /** 校验是否有起点终点的任务 */ + public Boolean hasTaskAll(String pointCode) { + final String code = pointCode; + List list = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, false) + .and(la -> la.eq(SchBaseTask::getPoint_code1, code) + .or() + .eq(SchBaseTask::getPoint_code2, code) + .or() + .eq(SchBaseTask::getPoint_code3, code) + .or() + .eq(SchBaseTask::getPoint_code4, code))); + return list.size() > 0; + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.class b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.class new file mode 100644 index 0000000..97a0df7 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.class differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.java b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.java new file mode 100644 index 0000000..a49a721 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.java @@ -0,0 +1,42 @@ +package org.nl.wms.util.test.mapper; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.HashMap; +import java.util.List; + +/** + * @Author: lyd + * @Description: mapper接口 + * @Date: 2023/5/23 + */ +public interface TestMapper extends BaseMapper { + + List> getAll(); + + JSONObject getAll2(); + + List getAll3(); + + JSONArray getAll4(); + + JSONArray getAll5(); + + HashMap getAll6(); + + JSONObject getAll7(); + + JSONArray getAll8(); + + JSONArray getAll9(); + + JSONObject getAll10(HashMap map); + + JSONArray getAll11(JSONObject map); + + JSONArray getAll12(List list); + + void updateByObject(JSONObject object); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.xml b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.xml new file mode 100644 index 0000000..caac9be --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/org/nl/wms/util/test/mapper/TestMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + UPDATE sch_base_point + SET point_name = #{point_name} + WHERE point_code = #{point_code} + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/jquery.min.js b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/jquery.min.js new file mode 100644 index 0000000..aa1a0f9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 00;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'
'+(f?r.title[0]:r.title)+"
":"";return r.zIndex=s,t([r.shade?'
':"",'
'+(e&&2!=r.type?"":u)+'
'+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
'+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t'+r.btn[t]+"";return'
'+e+"
"}():"")+(r.resize?'':"")+"
"],u,i('
')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"http://layer.layui.com","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(e){s=e.find(".layui-layer-input"),s.focus(),"function"==typeof f&&f(e)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:'
    '+function(){var e=t.length,i=1,a="";if(e>0)for(a='
  • '+(t[0].content||"no content")+"
  • ";i'+(t[i].content||"no content")+"";return a}()+"
",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]'+(u[d].alt||
'+(u.length>1?'':"")+'
'+(u[d].alt||"")+""+s.imgIndex+"/"+u.length+"
",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window); \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/mobile/layer.js b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/mobile/layer.js new file mode 100644 index 0000000..f9cf693 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/mobile/layer.js @@ -0,0 +1,2 @@ +/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */ + ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'

'+(e?n.title[0]:n.title)+"

":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e=''+n.btn[0]+"",2===t&&(e=''+n.btn[1]+""+e),'
'+e+"
"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='

'+(n.content||"")+"

"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"
':"")+'
"+l+'
'+n.content+"
"+c+"
",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;odiv{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/icon-ext.png b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/icon-ext.png differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/icon.png b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/icon.png differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/layer.css b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/layer.css new file mode 100644 index 0000000..820b4a9 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/layer.css @@ -0,0 +1 @@ +.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-0.gif b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-0.gif differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-1.gif b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-1.gif differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-2.gif b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/layer/theme/default/loading-2.gif differ diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/login.css b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/login.css new file mode 100644 index 0000000..f831a49 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/login.css @@ -0,0 +1,59 @@ +*{margin: 0; padding: 0;} +body{font-family: Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif;} +::-webkit-input-placeholder{color: #ccc;} + +/* 视图盒子 */ +.view-box{position: relative; width: 100vw; height: 100vh; overflow: hidden;} +/* 背景 EAEFF3 */ +.bg-1{height: 50%; background: linear-gradient(to bottom right, #0466c5, #3496F5);} +.bg-2{height: 50%; background-color: #EAEFF3;} + +/* 渐变背景 */ +/*.bg-1{ + background-size: 500%; + background-image: linear-gradient(125deg,#0466c5,#3496F5,#0466c5,#3496F5,#0466c5,#2496F5); + animation: bganimation 30s infinite; +} +@keyframes bganimation{ + 0%{background-position: 0% 50%;} + 50%{background-position: 100% 50%;} + 100%{background-position: 0% 50%;} +} */ +/* 背景 */ +.bg-1{background: #101C34;} +.bg-2{background: #101C34;} +/* .bg-1{height: 100%; background-image: url(./login-bg.png); background-size: 100% 100%;} */ + + +/* 内容盒子 */ +.content-box{position: absolute; width: 100vw; height: 100vh; top: 0px;} + +/* 登录盒子 */ +/* .login-box{width: 400px; height: 400px; position: absolute; left: calc(50% - 200px); top: calc(50% - 200px); max-width: 90%; } */ +.login-box{width: 400px; margin: auto; max-width: 90%; height: 100%;} +.login-box{display: flex; align-items: center; text-align: center;} + +/* 表单 */ +.from-box{flex: 1; padding: 20px 50px; background-color: #FFF;} +.from-box{border-radius: 1px; box-shadow: 1px 1px 20px #666;} +.from-title{margin-top: 20px; margin-bottom: 30px; text-align: center;} + +/* 输入框 */ +.from-item{border: 0px #000 solid; margin-bottom: 15px;} +.s-input{width: 100%; line-height: 32px; height: 32px; text-indent: 1em; outline: 0; border: 1px #ccc solid; border-radius: 3px; transition: all 0.2s;} +.s-input{font-size: 12px;} +.s-input:focus{border-color: #409eff} + +/* 登录按钮 */ +.s-btn{ text-indent: 0; cursor: pointer; background-color: #409EFF; border-color: #409EFF; color: #FFF;} +.s-btn:hover{background-color: #50aEFF;} + +/* 重置按钮 */ +.reset-box{text-align: left; font-size: 12px;} +.reset-box a{text-decoration: none;} +.reset-box a:hover{text-decoration: underline;} + +/* loading框样式 */ +.ajax-layer-load.layui-layer-dialog{min-width: 0px !important; background-color: rgba(0,0,0,0.85);} +.ajax-layer-load.layui-layer-dialog .layui-layer-content{padding: 10px 20px 10px 40px; color: #FFF;} +.ajax-layer-load.layui-layer-dialog .layui-layer-content .layui-layer-ico{width: 20px; height: 20px; background-size: 20px 20px; top: 12px; } \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/login.js b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/login.js new file mode 100644 index 0000000..e474f43 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/statis/sa-res/login.js @@ -0,0 +1,65 @@ +// sa +var sa = {}; + +// 打开loading +sa.loading = function(msg) { + layer.closeAll(); // 开始前先把所有弹窗关了 + return layer.msg(msg, {icon: 16, shade: 0.3, time: 1000 * 20, skin: 'ajax-layer-load' }); +}; + +// 隐藏loading +sa.hideLoading = function() { + layer.closeAll(); +}; + + +// ----------------------------------- 登录事件 ----------------------------------- + +$('.login-btn').click(function(){ + sa.loading("正在登录..."); + // 开始登录 + setTimeout(function() { + $.ajax({ + url: "sso/doLogin", + type: "post", + data: { + name: $('[name=name]').val(), + pwd: $('[name=pwd]').val() + }, + dataType: 'json', + success: function(res){ + console.log('返回数据:', res); + sa.hideLoading(); + if(res.code == 200) { + layer.msg('登录成功', {anim: 0, icon: 6 }); + setTimeout(function() { + location.reload(); + }, 800) + } else { + layer.msg(res.msg, {anim: 6, icon: 2 }); + } + }, + error: function(xhr, type, errorThrown){ + sa.hideLoading(); + if(xhr.status == 0){ + return layer.alert('无法连接到服务器,请检查网络'); + } + return layer.alert("异常:" + JSON.stringify(xhr)); + } + }); + }, 400); +}); + +// 绑定回车事件 +$('[name=name],[name=pwd]').bind('keypress', function(event){ + if(event.keyCode == "13") { + $('.login-btn').click(); + } +}); + +// 输入框获取焦点 +$("[name=name]").focus(); + +// 打印信息 +var str = "This page is provided by Sa-Token, Please refer to: " + "https://sa-token.cc/"; +console.log(str); diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/email/email.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/email/email.ftl new file mode 100644 index 0000000..2f82fcb --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/email/email.ftl @@ -0,0 +1,48 @@ + + + + + + + +
+
+

尊敬的用户,您好:

+

您正在申请邮箱验证,您的验证码为:

+

${code}

+
+
+
+ Copyright ©${.now?string("yyyy")} EL-ADMIN 后台管理系统 All Rights Reserved. +
+ +
+
+ + diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/email/taskAlarm.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/email/taskAlarm.ftl new file mode 100644 index 0000000..b116dec --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/email/taskAlarm.ftl @@ -0,0 +1,69 @@ + + + + + + + +
+
+

任务信息:

+ + + + + + + + + + + + + + + + + +
任务名称Bean名称执行方法参数内容Cron表达式描述内容
${task.jobName}${task.beanName}${task.methodName}${(task.params)!""}${task.cronExpression}${(task.description)!""}
+
+
+

异常信息:

+
+                ${msg}
+            
+
+
+
+
+ Copyright ©${.now?string("yyyy")} EL-ADMIN 后台管理系统 All Rights Reserved. +
+ +
+ + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Controller.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Controller.ftl new file mode 100644 index 0000000..5962e5c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Controller.ftl @@ -0,0 +1,66 @@ +package ${package}.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import ${package}.service.I${className}Service; +import ${package}.service.dao.${className}; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author ${author} +* @date ${date} +**/ +@Slf4j +@RestController +@Api(tags = "${apiAlias}管理") +@RequestMapping("/api/${changeClassName}") +public class ${className}Controller { + + @Autowired + private I${className}Service ${changeClassName}Service; + + @GetMapping + @Log("查询${apiAlias}") + @ApiOperation("查询${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(${changeClassName}Service.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增${apiAlias}") + @ApiOperation("新增${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:add')") + public ResponseEntity create(@Validated @RequestBody ${className} entity){ + ${changeClassName}Service.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改${apiAlias}") + @ApiOperation("修改${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:edit')") + public ResponseEntity update(@Validated @RequestBody ${className} entity){ + ${changeClassName}Service.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除${apiAlias}") + @ApiOperation("删除${apiAlias}") + //@SaCheckPermission("@el.check('${changeClassName}:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + ${changeClassName}Service.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Dto.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Dto.ftl new file mode 100644 index 0000000..07f913f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Dto.ftl @@ -0,0 +1,34 @@ +package ${package}.service.dto; + +<#if hasTimestamp> +import java.sql.Timestamp; + +<#if hasBigDecimal> +import java.math.BigDecimal; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author ${author} +* @date ${date} +**/ +@Data +public class ${className}Dto implements Serializable { +<#if columns??> +<#list columns as column> + + <#if column.remark != ''> + /** ${column.remark} */ + + <#if column.columnKey = 'PRI'> + <#if !auto && pkColumnType = 'Long'> + /** 防止精度丢失 */ + @JsonSerialize(using= ToStringSerializer.class) + + + private ${column.columnType} ${column.changeColumnName}; + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Entity.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Entity.ftl new file mode 100644 index 0000000..93dfaa8 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Entity.ftl @@ -0,0 +1,46 @@ +package ${package}.service.dao; + +<#if hasPk> +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +<#if hasTimestamp> +import java.sql.Timestamp; + +<#if hasBigDecimal> +import java.math.BigDecimal; + +import java.io.Serializable; + +/** +* @description / +* @author ${author} +* @date ${date} +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("${tableName}") +public class ${className} implements Serializable { + + private static final long serialVersionUID = 1L; + +<#if columns??> +<#list columns as column> +<#if column.columnKey = 'PRI'> + @TableId(value = "${column.columnName}", type = <#if auto>IdType.AUTO<#else>IdType.NONE) + +<#if column.remark != ''> + @ApiModelProperty(value = "${column.remark}") +<#else> + @ApiModelProperty(value = "${column.changeColumnName}") + + private ${column.columnType} ${column.changeColumnName}; + + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Mapper.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Mapper.ftl new file mode 100644 index 0000000..0ab0952 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Mapper.ftl @@ -0,0 +1,12 @@ +package ${package}.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import ${package}.service.dao.${className}; + +/** +* @author ${author} +* @date ${date} +**/ +public interface ${className}Mapper extends BaseMapper<${className}> { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/MySQLMapper.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/MySQLMapper.ftl new file mode 100644 index 0000000..e4f0413 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/MySQLMapper.ftl @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/QueryCriteria.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/QueryCriteria.ftl new file mode 100644 index 0000000..d991085 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/QueryCriteria.ftl @@ -0,0 +1,12 @@ +package ${package}.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import ${package}.service.dao.${className}; + +/** +* @author ${author} +* @date ${date} +**/ +public class ${className}Query extends BaseQuery<${className}> { + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Repository.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Repository.ftl new file mode 100644 index 0000000..0ce13b2 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Repository.ftl @@ -0,0 +1,25 @@ + +package ${package}.repository; + +import ${package}.domain.${className}; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** +* @author ${author} +* @date ${date} +**/ +public interface ${className}Repository extends JpaRepository<${className}, ${pkColumnType}>, JpaSpecificationExecutor<${className}> { +<#if columns??> + <#list columns as column> + <#if column.columnKey = 'UNI'> + /** + * 根据 ${column.capitalColumnName} 查询 + * @param ${column.columnName} / + * @return / + */ + ${className} findBy${column.capitalColumnName}(${column.columnType} ${column.columnName}); + + + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Service.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Service.ftl new file mode 100644 index 0000000..04c592e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/Service.ftl @@ -0,0 +1,43 @@ +package ${package}.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import ${package}.service.dao.${className}; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author ${author} +* @date ${date} +**/ +public interface I${className}Service extends IService<${className}> { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage<${className}> + */ + IPage<${className}> queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(${className} entity); + + /** + * 编辑 + * @param entity / + */ + void update(${className} entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/ServiceImpl.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/ServiceImpl.ftl new file mode 100644 index 0000000..18c1c03 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/admin/ServiceImpl.ftl @@ -0,0 +1,80 @@ +package ${package}.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import ${package}.service.I${className}Service; +import ${package}.service.dao.mapper.${className}Mapper; +import ${package}.service.dao.${className}; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author ${author} +* @date ${date} +**/ +@Slf4j +@Service +public class ${className}ServiceImpl extends ServiceImpl<${className}Mapper, ${className}> implements I${className}Service { + + @Autowired + private ${className}Mapper ${changeClassName}Mapper; + + @Override + public IPage<${className}> queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper<${className}> lam = new LambdaQueryWrapper<>(); + IPage<${className}> pages = new Page<>(page.getPage() + 1, page.getSize()); + ${changeClassName}Mapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(${className} entity) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + entity.set${pkChangeColName ? cap_first }(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_id(currentUserId); + entity.setCreate_name(nickName); + entity.setCreate_time(now); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + ${changeClassName}Mapper.insert(entity); + } + + @Override + public void update(${className} entity) { + ${className} dto = ${changeClassName}Mapper.selectById(entity.get${pkChangeColName ? cap_first }()); + if (dto == null) throw new BadRequestException(LangProcess.msg("universal_error")); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + entity.setUpdate_id(currentUserId); + entity.setUpdate_name(nickName); + entity.setUpdate_time(now); + + ${changeClassName}Mapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + ${changeClassName}Mapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/front/api.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/front/api.ftl new file mode 100644 index 0000000..9587d0d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/front/api.ftl @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/${changeClassName}', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/${changeClassName}/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/${changeClassName}', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/generator/front/index.ftl b/lms/nladmin-system/nlsso-server/target/classes/template/generator/front/index.ftl new file mode 100644 index 0000000..ebd252c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/generator/front/index.ftl @@ -0,0 +1,184 @@ +<#--noinspection ALL--> + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/classes/template/sa-login.html b/lms/nladmin-system/nlsso-server/target/classes/template/sa-login.html new file mode 100644 index 0000000..2a65b8d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/classes/template/sa-login.html @@ -0,0 +1,45 @@ + + + + Sa-SSO-Server 认证中心-登录 + + + + + + +
+
+
+
+ +
+ +
+ This page is provided by Sa-Token-SSO +
+
+ + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/target/generated-sources/annotations/org/nl/config/redis/RedisConvertImpl.java b/lms/nladmin-system/nlsso-server/target/generated-sources/annotations/org/nl/config/redis/RedisConvertImpl.java new file mode 100644 index 0000000..05efc85 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/target/generated-sources/annotations/org/nl/config/redis/RedisConvertImpl.java @@ -0,0 +1,11 @@ +package org.nl.config.redis; + +import javax.annotation.Generated; + +@Generated( + value = "org.mapstruct.ap.MappingProcessor", + date = "2024-10-21T16:14:59+0800", + comments = "version: 1.3.1.Final, compiler: javac, environment: Java 1.8.0_411 (Oracle Corporation)" +) +public class RedisConvertImpl implements RedisConvert { +} diff --git a/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/ApplicationTest.class b/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/ApplicationTest.class new file mode 100644 index 0000000..4e17e92 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/ApplicationTest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/enums/GetEnumOnSqlTest.class b/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/enums/GetEnumOnSqlTest.class new file mode 100644 index 0000000..c001bac Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/enums/GetEnumOnSqlTest.class differ diff --git a/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/task/MapperTest.class b/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/task/MapperTest.class new file mode 100644 index 0000000..c192a96 Binary files /dev/null and b/lms/nladmin-system/nlsso-server/target/test-classes/org/nl/task/MapperTest.class differ diff --git a/lms/nladmin-ui/package.json b/lms/nladmin-ui/package.json index 0fe34f1..369898e 100644 --- a/lms/nladmin-ui/package.json +++ b/lms/nladmin-ui/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "scripts": { "dev": "vue-cli-service serve", + "dev2": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build:prod": "vue-cli-service build", "build:stage": "vue-cli-service build --mode staging", "preview": "node build/index.js --preview", @@ -73,6 +74,7 @@ "vue-easy-print": "0.0.8", "vue-echarts": "^5.0.0-beta.0", "vue-highlightjs": "^1.3.3", + "vue-i18n": "^8.27.0", "vue-image-crop-upload": "^2.5.0", "vue-print-nb": "^1.7.5", "vue-router": "3.0.2", diff --git a/lms/nladmin-ui/src/components/Breadcrumb/index.vue b/lms/nladmin-ui/src/components/Breadcrumb/index.vue index 204ea59..515a1ee 100644 --- a/lms/nladmin-ui/src/components/Breadcrumb/index.vue +++ b/lms/nladmin-ui/src/components/Breadcrumb/index.vue @@ -2,8 +2,8 @@ - {{ item.meta.title }} - {{ item.meta.title }} + {{ $t(item.meta.title) }} + {{ $t(item.meta.title) }} @@ -37,7 +37,7 @@ export default { const first = matched[0] if (!this.isDashboard(first)) { - matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched) + matched = [{ path: '/dashboard', meta: { title: this.$t('auto.common.home') }}].concat(matched) } this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) diff --git a/lms/nladmin-ui/src/components/Crud/CRUD.operation.vue b/lms/nladmin-ui/src/components/Crud/CRUD.operation.vue index 4c5cc02..541a137 100644 --- a/lms/nladmin-ui/src/components/Crud/CRUD.operation.vue +++ b/lms/nladmin-ui/src/components/Crud/CRUD.operation.vue @@ -12,7 +12,7 @@ icon="el-icon-plus" @click="crud.toAdd" > - 新增 + {{ $t('auto.common.Create') }} - 修改 + {{ $t('auto.common.Update') }} - 删除 + {{ $t('auto.common.Delete') }} 导出 + >{{ $t('auto.common.Export') }} @@ -86,7 +86,7 @@ :indeterminate="allColumnsSelectedIndeterminate" @change="handleCheckAllChange" > - 全选 + {{ $t('auto.common.SelectAll') }}