From 6bb923951c3ce0dc71dd395fe6eb539a13e861b7 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 29 一月 2024 10:45:46 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtSubject.java              |   31 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/HostServiceImpl.java        |   12 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/Test.java                             |   16 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/JwtUtil.java                           |  143 ++++++++++
 zy-asrs-wcs/src/main/resources/application.yml                                         |    2 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/constant/Constants.java               |   93 ++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/HostService.java                 |    8 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java |  112 ++++++++
 zy-asrs-wcs/pom.xml                                                                    |   11 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java                             |  224 ++++++++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/mapper/HostMapper.java                   |   12 
 zy-asrs-wcs/src/main/resources/mapper/sys/HostMapper.xml                               |    5 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Host.java                         |  125 ++++++++
 13 files changed, 793 insertions(+), 1 deletions(-)

diff --git a/zy-asrs-wcs/pom.xml b/zy-asrs-wcs/pom.xml
index 5b6c1a6..986a53d 100644
--- a/zy-asrs-wcs/pom.xml
+++ b/zy-asrs-wcs/pom.xml
@@ -38,6 +38,17 @@
             <artifactId>spring-boot-starter-security</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.11.2</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.11.2</version>
+        </dependency>
+
         <!-- okHttp3 -->
         <dependency>
             <groupId>com.squareup.okhttp3</groupId>
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/Test.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/Test.java
index 8e9f9da..fd8862b 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/Test.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/Test.java
@@ -1,7 +1,23 @@
 package com.zy.asrs.wcs.common;
 
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wcs.sys.service.HostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 /**
  * Created by vincent on 1/27/2024
  */
+@RestController
 public class Test {
+
+    @Autowired
+    private HostService hostService;
+
+    @GetMapping("/test")
+    public R gs() {
+        return R.ok().add(hostService.list());
+    }
+
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/constant/Constants.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/constant/Constants.java
new file mode 100644
index 0000000..acc9941
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/constant/Constants.java
@@ -0,0 +1,93 @@
+package com.zy.asrs.wcs.common.constant;
+
+/**
+ * 绯荤粺甯搁噺
+ * Created by vincent on 2019-10-29 15:55
+ */
+public class Constants {
+    /**
+     * 榛樿鎴愬姛鐮�
+     */
+    public static final int RESULT_OK_CODE = 0;
+
+    /**
+     * 榛樿澶辫触鐮�
+     */
+    public static final int RESULT_ERROR_CODE = 1;
+
+    /**
+     * 榛樿鎴愬姛淇℃伅
+     */
+    public static final String RESULT_OK_MSG = "鎿嶄綔鎴愬姛";
+
+    /**
+     * 榛樿澶辫触淇℃伅
+     */
+    public static final String RESULT_ERROR_MSG = "鎿嶄綔澶辫触";
+
+    /**
+     * 鏃犳潈闄愰敊璇爜
+     */
+    public static final int UNAUTHORIZED_CODE = 403;
+
+    /**
+     * 鏃犳潈闄愭彁绀轰俊鎭�
+     */
+    public static final String UNAUTHORIZED_MSG = "娌℃湁璁块棶鏉冮檺";
+
+    /**
+     * 鏈璇侀敊璇爜
+     */
+    public static final int UNAUTHENTICATED_CODE = 401;
+
+    /**
+     * 鏈璇佹彁绀轰俊鎭�
+     */
+    public static final String UNAUTHENTICATED_MSG = "璇峰厛鐧诲綍";
+
+    /**
+     * 鐧诲綍杩囨湡閿欒鐮�
+     */
+    public static final int TOKEN_EXPIRED_CODE = 401;
+
+    /**
+     * 鐧诲綍杩囨湡鎻愮ず淇℃伅
+     */
+    public static final String TOKEN_EXPIRED_MSG = "鐧诲綍宸茶繃鏈�";
+
+    /**
+     * 闈炴硶token閿欒鐮�
+     */
+    public static final int BAD_CREDENTIALS_CODE = 401;
+
+    /**
+     * 闈炴硶token鎻愮ず淇℃伅
+     */
+    public static final String BAD_CREDENTIALS_MSG = "璇烽��鍑洪噸鏂扮櫥褰�";
+
+    /**
+     * 琛ㄧず鍗囧簭鐨勫��
+     */
+    public static final String ORDER_ASC_VALUE = "asc";
+
+    /**
+     * 琛ㄧず闄嶅簭鐨勫��
+     */
+    public static final String ORDER_DESC_VALUE = "desc";
+
+    /**
+     * token閫氳繃header浼犻�掔殑鍚嶇О
+     */
+    public static final String TOKEN_HEADER_NAME = "Authorization";
+
+    /**
+     * token閫氳繃鍙傛暟浼犻�掔殑鍚嶇О
+     */
+    public static final String TOKEN_PARAM_NAME = "access_token";
+
+    /**
+     * token璁よ瘉绫诲瀷
+     */
+    public static final String TOKEN_TYPE = "Bearer";
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java
new file mode 100644
index 0000000..3673b38
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtAuthenticationFilter.java
@@ -0,0 +1,112 @@
+//package com.zy.asrs.wcs.common.security;
+//
+//import com.core.common.Cools;
+//import com.zy.acs.manager.common.config.ConfigProperties;
+//import com.zy.acs.manager.common.constant.Constants;
+//import com.zy.acs.manager.common.utils.CommonUtil;
+//import com.zy.acs.manager.common.utils.JwtUtil;
+//import com.zy.acs.manager.system.entity.LoginRecord;
+//import com.zy.acs.manager.system.entity.Menu;
+//import com.zy.acs.manager.system.entity.User;
+//import com.zy.acs.manager.system.service.LoginRecordService;
+//import com.zy.acs.manager.system.service.UserService;
+//import io.jsonwebtoken.Claims;
+//import io.jsonwebtoken.ExpiredJwtException;
+//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+//import org.springframework.security.core.context.SecurityContextHolder;
+//import org.springframework.security.core.userdetails.UsernameNotFoundException;
+//import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.filter.OncePerRequestFilter;
+//
+//import javax.annotation.Resource;
+//import javax.servlet.FilterChain;
+//import javax.servlet.ServletException;
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//import java.io.IOException;
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.stream.Collectors;
+//
+///**
+// * 澶勭悊鎼哄甫token鐨勮姹傝繃婊ゅ櫒
+// *
+// */
+//@Component
+//public class JwtAuthenticationFilter extends OncePerRequestFilter {
+//
+//    public static final ArrayList<String> WHITE_KEY = new ArrayList<String>(){
+//        private static final long serialVersionUID = 1L;
+//        {
+//            add("xltys1995");
+//        }
+//    };
+//
+//    @Resource
+//    private ConfigProperties configProperties;
+//    @Resource
+//    private UserService userService;
+//    @Resource
+//    private LoginRecordService loginRecordService;
+//
+//    @Override
+//    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
+//        String access_token = JwtUtil.getAccessToken(request);
+//        for (String filterPath : SecurityConfig.FILTER_PATH) {
+//            AntPathRequestMatcher antPathMatcher = new AntPathRequestMatcher(filterPath);
+//            if (antPathMatcher.matches(request)) {
+//                access_token = "";
+//            }
+//        }
+//        if (!Cools.isEmpty(access_token)) {
+//            try {
+//                User user;
+//                if (WHITE_KEY.contains(access_token)) {
+//                    user = userService.getByUsername("openapi", 2);
+//                    if (user == null) {
+//                        throw new UsernameNotFoundException("Username not found");
+//                    }
+//                    List<Menu> authorities = user.getAuthorities().stream()
+//                            .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
+//                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
+//                            user, null, authorities);
+//                    SecurityContextHolder.getContext().setAuthentication(authentication);
+//                } else {
+//                    // 瑙f瀽token
+//                    Claims claims = JwtUtil.parseToken(access_token, configProperties.getTokenKey());
+//                    JwtSubject jwtSubject = JwtUtil.getJwtSubject(claims);
+//                    user = userService.getByUsername(jwtSubject.getUsername(), jwtSubject.getTenantId());
+//                    if (user == null) {
+//                        throw new UsernameNotFoundException("Username not found");
+//                    }
+//                    List<Menu> authorities = user.getAuthorities().stream()
+//                            .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
+//                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
+//                            user, null, authorities);
+//                    SecurityContextHolder.getContext().setAuthentication(authentication);
+//                    // token灏嗚杩囨湡绛惧彂鏂皌oken, 闃叉绐佺劧閫�鍑虹櫥褰�
+//                    long expiration = (claims.getExpiration().getTime() - new Date().getTime()) / 1000 / 60;
+//                    if (expiration < configProperties.getTokenRefreshTime()) {
+//                        String token = JwtUtil.buildToken(jwtSubject, configProperties.getTokenExpireTime(),
+//                                configProperties.getTokenKey());
+//                        response.addHeader(Constants.TOKEN_HEADER_NAME, token);
+//                        loginRecordService.saveAsync(user.getUsername(), LoginRecord.TYPE_REFRESH, null,
+//                                user.getTenantId(), request);
+//                    }
+//                }
+//            } catch (ExpiredJwtException e) {
+//                CommonUtil.responseError(response, Constants.TOKEN_EXPIRED_CODE, Constants.TOKEN_EXPIRED_MSG,
+//                        e.getMessage());
+//                return;
+//            } catch (Exception e) {
+//                CommonUtil.responseError(response, Constants.BAD_CREDENTIALS_CODE, Constants.BAD_CREDENTIALS_MSG,
+//                        e.toString());
+//                return;
+//            }
+//        }
+//        chain.doFilter(request, response);
+//    }
+//
+//}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtSubject.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtSubject.java
new file mode 100644
index 0000000..ca9742b
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/security/JwtSubject.java
@@ -0,0 +1,31 @@
+package com.zy.asrs.wcs.common.security;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * Jwt杞戒綋
+ *
+ * @author vincent
+ * @since 2021-09-03 00:11:12
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class JwtSubject implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 璐﹀彿
+     */
+    private String username;
+
+    /**
+     * 绉熸埛id
+     */
+    private Integer tenantId;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Host.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Host.java
new file mode 100644
index 0000000..e87c78b
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Host.java
@@ -0,0 +1,125 @@
+package com.zy.asrs.wcs.sys.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zy.asrs.framework.common.Cools;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Data
+@TableName("sys_host")
+public class Host implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍚嶇О
+     */
+    @ApiModelProperty(value= "鍚嶇О")
+    private String name;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public Host() {}
+
+    public Host(String name,Integer status,Integer deleted,Date createTime,Date updateTime,String memo) {
+        this.name = name;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    Host host = new Host(
+//            null,    // 鍚嶇О[闈炵┖]
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/mapper/HostMapper.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/mapper/HostMapper.java
new file mode 100644
index 0000000..e64fd86
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/mapper/HostMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wcs.sys.mapper;
+
+import com.zy.asrs.wcs.sys.entity.Host;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface HostMapper extends BaseMapper<Host> {
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/HostService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/HostService.java
new file mode 100644
index 0000000..c51578d
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/HostService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wcs.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wcs.sys.entity.Host;
+
+public interface HostService extends IService<Host> {
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/HostServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/HostServiceImpl.java
new file mode 100644
index 0000000..5f6a32f
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/HostServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wcs.sys.service.impl;
+
+import com.zy.asrs.wcs.sys.mapper.HostMapper;
+import com.zy.asrs.wcs.sys.entity.Host;
+import com.zy.asrs.wcs.sys.service.HostService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("hostService")
+public class HostServiceImpl extends ServiceImpl<HostMapper, Host> implements HostService {
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/JwtUtil.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/JwtUtil.java
new file mode 100644
index 0000000..cc8bc3b
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/JwtUtil.java
@@ -0,0 +1,143 @@
+package com.zy.asrs.wcs.utils;
+
+
+import com.alibaba.fastjson.JSON;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.wcs.common.constant.Constants;
+import com.zy.asrs.wcs.common.security.JwtSubject;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.io.Decoders;
+import io.jsonwebtoken.io.Encoders;
+import io.jsonwebtoken.security.Keys;
+
+import javax.servlet.http.HttpServletRequest;
+import java.security.Key;
+import java.util.Date;
+
+/**
+ * JWT宸ュ叿绫�
+ *
+ * @author vincent
+ * @since 2018-01-21 16:30:59
+ */
+public class JwtUtil {
+
+    /**
+     * 鑾峰彇璇锋眰涓殑access_token
+     *
+     * @param request HttpServletRequest
+     * @return String
+     */
+    public static String getAccessToken(HttpServletRequest request) {
+        String access_token = request.getHeader(Constants.TOKEN_HEADER_NAME);
+        if (!Cools.isEmpty(access_token)) {
+            if (access_token.startsWith(Constants.TOKEN_TYPE)) {
+                access_token = Utils.removePrefix(access_token, Constants.TOKEN_TYPE).trim();
+            }
+        } else {
+            access_token = request.getParameter(Constants.TOKEN_PARAM_NAME);
+        }
+        return access_token;
+    }
+
+
+    /**
+     * 鐢熸垚token
+     *
+     * @param subject          杞戒綋
+     * @param expire           杩囨湡鏃堕棿
+     * @param base64EncodedKey base64缂栫爜鐨凨ey
+     * @return token
+     */
+    public static String buildToken(JwtSubject subject, Long expire, String base64EncodedKey) {
+        return buildToken(JSON.toJSONString(subject), expire, decodeKey(base64EncodedKey));
+    }
+
+    /**
+     * 鐢熸垚token
+     *
+     * @param subject 杞戒綋
+     * @param expire  杩囨湡鏃堕棿
+     * @param key     瀵嗛挜
+     * @return token
+     */
+    public static String buildToken(String subject, Long expire, Key key) {
+        Date expireDate = new Date(new Date().getTime() + 1000 * expire);
+        return Jwts.builder()
+                .setSubject(subject)
+                .setExpiration(expireDate)
+                .setIssuedAt(new Date())
+                .signWith(key)
+                .compact();
+    }
+
+    /**
+     * 瑙f瀽token
+     *
+     * @param token            token
+     * @param base64EncodedKey base64缂栫爜鐨凨ey
+     * @return Claims
+     */
+    public static Claims parseToken(String token, String base64EncodedKey) {
+        return parseToken(token, decodeKey(base64EncodedKey));
+    }
+
+    /**
+     * 瑙f瀽token
+     *
+     * @param token token
+     * @param key   瀵嗛挜
+     * @return Claims
+     */
+    public static Claims parseToken(String token, Key key) {
+        return Jwts.parserBuilder()
+                .setSigningKey(key)
+                .build()
+                .parseClaimsJws(token)
+                .getBody();
+    }
+
+    /**
+     * 鑾峰彇JwtSubject
+     *
+     * @param claims Claims
+     * @return JwtSubject
+     */
+    public static JwtSubject getJwtSubject(Claims claims) {
+        return JSON.parseObject(claims.getSubject(), JwtSubject.class);
+    }
+
+    /**
+     * 鐢熸垚Key
+     *
+     * @return Key
+     */
+    public static Key randomKey() {
+        return Keys.secretKeyFor(SignatureAlgorithm.HS256);
+    }
+
+    /**
+     * base64缂栫爜key
+     *
+     * @return String
+     */
+    public static String encodeKey(Key key) {
+        return Encoders.BASE64.encode(key.getEncoded());
+    }
+
+    /**
+     * base64缂栫爜Key
+     *
+     * @param base64EncodedKey base64缂栫爜鐨刱ey
+     * @return Key
+     */
+    public static Key decodeKey(String base64EncodedKey) {
+        if (Cools.isEmpty(base64EncodedKey)) {
+            return null;
+        }
+        return Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64EncodedKey));
+    }
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java
new file mode 100644
index 0000000..9db68ff
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java
@@ -0,0 +1,224 @@
+package com.zy.asrs.wcs.utils;
+
+
+import com.zy.asrs.framework.common.Cools;
+
+import java.util.Optional;
+
+/**
+ * Created by vincent on 2023/3/14
+ */
+public class Utils {
+
+    /**
+     * 鏁扮粍鍊掑簭
+     * @param bytes
+     * @param <T>
+     */
+    public static <T> byte[] reverse(byte[] bytes) {
+        if (bytes == null) return null;
+        for (int start = 0, end = bytes.length - 1; start < end; start++, end--) {
+            byte temp = bytes[end];
+            bytes[end] = bytes[start];
+            bytes[start] = temp;
+        }
+        return bytes;
+    }
+
+    /**
+     * 鎴彇鏁扮粍
+     * @param bytes 鍘熸暟缁�
+     * @param pos   瀹氫綅锛堟埅鍙栧悗鍖呭惈瀹氫綅鐐规暟鎹級
+     * @param len   闀垮害
+     * @return new arr
+     */
+    public static byte[] slice(byte[] bytes, int pos, int len) {
+        if (bytes == null || bytes.length == 0 || len == 0) {
+            return new byte[0];
+        }
+        if (pos + len > bytes.length) {
+            throw new RuntimeException("com.zy.acs.common.utils ArrayIndexOutOfBoundsException\n" +
+                    "鍘熸暟缁� bytes 闀垮害涓� " + bytes.length + "锛屾埅鍙栭暱搴﹁秴杩囧師鏁扮粍锛�");
+        }
+        byte[] arr = new byte[len];
+        System.arraycopy(bytes, pos, arr, 0, len);
+        return arr;
+    }
+
+    public static byte[] sliceWithReverse(byte[] bytes, int pos, int len) {
+        byte[] slice = slice(bytes, pos, len);
+        reverse(slice);
+        return slice;
+    }
+
+    public static byte[] merge(Object... objects) {
+        int len = 0;
+        for (Object object : objects) {
+            if (object instanceof byte[]) {
+                byte[] bytes = (byte[]) object;
+                len += bytes.length;
+            }
+            if (object instanceof Byte) {
+                len++;
+            }
+        }
+        byte[] arr = new byte[len];
+        int idx = 0;
+        for (Object object : objects) {
+            if (object instanceof byte[]) {
+                byte[] bytes = (byte[]) object;
+                System.arraycopy(bytes, 0, arr, idx, bytes.length);
+                idx += bytes.length;
+            }
+            if (object instanceof Byte) {
+                byte[] bytes = new byte[] {(Byte) object};
+                System.arraycopy(bytes, 0, arr, idx, bytes.length);
+                idx += bytes.length;
+            }
+        }
+        return arr;
+    }
+
+    public static <T> String join(T[] array, String seq) {
+        StringBuilder sb = new StringBuilder();
+        if (array != null) {
+            for (int i = 0; i < array.length; i++) {
+                sb.append(array[i]);
+                if (i < array.length - 1) {
+                    sb.append(seq);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    public static String zeroFill(String msg, Integer len) {
+        len = Optional.ofNullable(len).orElse(16);
+        if (msg.length() == len){
+            return msg;
+        } else if (msg.length() > len){
+            return msg.substring(0, 16);
+        } else {
+            StringBuilder msgBuilder = new StringBuilder(msg);
+            for (int i = 0; i<len-msg.length(); i++){
+                msgBuilder.insert(0,"0");
+            }
+            return msgBuilder.toString();
+        }
+    }
+
+    public static String removePrefix(String str, String prefix) {
+        if (!Cools.isEmpty(str) && !Cools.isEmpty(prefix)) {
+            if (str.startsWith(prefix)) {
+                return str.substring(prefix.length());
+            } else {
+                return str;
+            }
+        } else {
+            return str;
+        }
+    }
+
+    public static String removeSuffix(String str, String suffix) {
+        if (!Cools.isEmpty(str) && !Cools.isEmpty(suffix)) {
+            if (str.endsWith(suffix)) {
+                return str.substring(0, str.indexOf(suffix));
+            } else {
+                return str;
+            }
+        } else {
+            return str;
+        }
+    }
+
+    /**
+     * 澶ч┘宄� 杞� symbol灏忛┘宄�
+     */
+    public static String toSymbolCase(String str, char symbol) {
+        if (str == null) {
+            return null;
+        } else {
+            int length = str.length();
+            StringBuilder sb = new StringBuilder();
+
+            for(int i = 0; i < length; ++i) {
+                char c = str.charAt(i);
+                if (Character.isUpperCase(c)) {
+                    Character preChar = i > 0 ? str.charAt(i - 1) : null;
+                    Character nextChar = i < str.length() - 1 ? str.charAt(i + 1) : null;
+                    if (null != preChar) {
+                        if (symbol == preChar) {
+                            if (null == nextChar || Character.isLowerCase(nextChar)) {
+                                c = Character.toLowerCase(c);
+                            }
+                        } else if (Character.isLowerCase(preChar)) {
+                            sb.append(symbol);
+                            if (null == nextChar || Character.isLowerCase(nextChar)) {
+                                c = Character.toLowerCase(c);
+                            }
+                        } else if (null == nextChar || Character.isLowerCase(nextChar)) {
+                            sb.append(symbol);
+                            c = Character.toLowerCase(c);
+                        }
+                    } else if (null == nextChar || Character.isLowerCase(nextChar)) {
+                        c = Character.toLowerCase(c);
+                    }
+                }
+
+                sb.append(c);
+            }
+
+            return sb.toString();
+        }
+    }
+
+    public static String toCamelCase(CharSequence name) {
+        if (null == name) {
+            return null;
+        } else {
+            String name2 = name.toString();
+            if (name2.contains("_")) {
+                int length = name2.length();
+                StringBuilder sb = new StringBuilder(length);
+                boolean upperCase = false;
+
+                for(int i = 0; i < length; ++i) {
+                    char c = name2.charAt(i);
+                    if (c == '_') {
+                        upperCase = true;
+                    } else if (upperCase) {
+                        sb.append(Character.toUpperCase(c));
+                        upperCase = false;
+                    } else {
+                        sb.append(Character.toLowerCase(c));
+                    }
+                }
+
+                return sb.toString();
+            } else {
+                return name2;
+            }
+        }
+    }
+
+    public static String sub(String str, Integer maxLen) {
+        if (str.length() > maxLen) {
+            return str.substring(0, maxLen);
+        }
+        return str;
+    }
+
+    public static String generateSeqNum(String lastSeqNum) {
+        if (Cools.isEmpty(lastSeqNum)) {
+            return zeroFill("1", 4);
+        } else {
+            int i = Integer.parseInt(lastSeqNum);
+            if (i >= 9999) {
+                return zeroFill("1", 4);
+            } else {
+                return zeroFill(String.valueOf(i+1), 4);
+            }
+        }
+    }
+
+}
diff --git a/zy-asrs-wcs/src/main/resources/application.yml b/zy-asrs-wcs/src/main/resources/application.yml
index 08e1c35..0d44a3a 100644
--- a/zy-asrs-wcs/src/main/resources/application.yml
+++ b/zy-asrs-wcs/src/main/resources/application.yml
@@ -10,7 +10,7 @@
     enabled: false
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/zy_acs?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/asrs?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: xltys1995
 #    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
diff --git a/zy-asrs-wcs/src/main/resources/mapper/sys/HostMapper.xml b/zy-asrs-wcs/src/main/resources/mapper/sys/HostMapper.xml
new file mode 100644
index 0000000..93847ab
--- /dev/null
+++ b/zy-asrs-wcs/src/main/resources/mapper/sys/HostMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.wcs.sys.mapper.HostMapper">
+
+</mapper>

--
Gitblit v1.9.1