Browse Source

1、接口访问校验调整;
2、单证审核逻辑调整;

zk 2 years ago
parent
commit
ea9f85ca76

+ 26 - 5
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -385,7 +385,7 @@ public class AuthServiceImpl implements IAuthService {
         REnterpriseVo enterprise = systemService.queryEntDetails(driver.getEntId());
 
         /**生成token**/
-        String token = EncryUtil.encryV1(Global.PRI_KEY, String.valueOf(driver.getId()));
+        String token = generateToken(loginBase, driver.getId());
         if (StringUtils.isBlank(token)) {
             return HttpResult.error(HttpStatus.CODE_10301, "生成密钥失败,请联系系统管理员!");
         }
@@ -441,7 +441,7 @@ public class AuthServiceImpl implements IAuthService {
         }
 
         /**生成token**/
-        String token = EncryUtil.encryV1(Global.PRI_KEY, String.valueOf(user.getId()));
+        String token = generateToken(loginBase, user.getId());
         if (StringUtils.isBlank(token)) {
             return HttpResult.error(HttpStatus.CODE_10301, "生成密钥失败,请联系系统管理员!");
         }
@@ -470,6 +470,24 @@ public class AuthServiceImpl implements IAuthService {
         return HttpResult.ok(loginRes);
     }
 
+    /**
+     * @param loginBase {}
+     * @param userId 用户ID
+     * @desc 生成token
+     * @author zk
+     * @date 2023/8/18
+     **/
+    private String generateToken(LoginBase loginBase, Long userId) {
+        Map<String, Object> info = new HashMap();
+        info.put("userId", userId);
+        info.put("account", loginBase.getAccount());
+        info.put("clientType", loginBase.getClientType());
+        info.put("systemType", loginBase.getSystemType());
+        info.put("timestamp", System.currentTimeMillis());
+        String token = EncryUtil.encryV1(Global.PRI_KEY, JSON.toJSONString(info));
+        return token;
+    }
+
     static class AsyncProcess1 implements Runnable {
         private final LoginBase loginBase;
 
@@ -540,8 +558,10 @@ public class AuthServiceImpl implements IAuthService {
             loginUserInfo.setEntId(enterprise != null ? enterprise.getId() : null);
             loginUserInfo.setEntName(enterprise != null ? enterprise.getFirmName() : null);
             loginUserInfo.setClientType(loginBase.getClientType());
+            loginUserInfo.setTimestamp(System.currentTimeMillis());
+            int expireTime = ClientTypeEnum.expireTime(loginBase.getClientType());
             String key = Global.getFullUserLoginKey(loginUserInfo.getSystemType(), loginUserInfo.getId(), loginBase.getClientType());
-            RedissonUtils.putString(key, JSON.toJSONString(loginUserInfo), Global.APP_TOKEN_EXPIRE);
+            RedissonUtils.putString(key, JSON.toJSONString(loginUserInfo), expireTime);
         }
 
         /**
@@ -566,9 +586,10 @@ public class AuthServiceImpl implements IAuthService {
             loginUserInfo.setIsMain(user.getIsMain());
             loginUserInfo.setEntId(user.getEntId());
             loginUserInfo.setEntName(enterprise != null ? enterprise.getFirmName() : null);
+            loginUserInfo.setTimestamp(System.currentTimeMillis());
+            int expireTime = ClientTypeEnum.expireTime(loginBase.getClientType());
             String key = Global.getFullUserLoginKey(loginUserInfo.getSystemType(), loginUserInfo.getId(), loginBase.getClientType());
-            RedissonUtils.putString(key, JSON.toJSONString(loginUserInfo),
-                    loginBase.getClientType().equals(ClientTypeEnum.pc.getValue()) ? Global.PC_TOKEN_EXPIRE : Global.APP_TOKEN_EXPIRE);
+            RedissonUtils.putString(key, JSON.toJSONString(loginUserInfo), expireTime);
 
             //存缓存请求地址
             SaveMenusToCache(user);

+ 55 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java

@@ -0,0 +1,55 @@
+package com.sckw.core.filter;
+
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.config.CustomConfig;
+import jakarta.annotation.PostConstruct;
+import jakarta.servlet.*;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @desc 过滤器
+ * @author zk
+ * @date 2023/8/18
+ */
+public class RequestCheckFilter implements Filter {
+
+    private static final List<String> EXCLUDEPATH = new ArrayList<>();
+
+    @Autowired
+    CustomConfig customConfig;
+
+    /**
+     * @desc: 初始化放行路径
+     * @author: czh
+     */
+    @PostConstruct
+    private void initExcludePath() {
+        String links = customConfig.getLinks();
+        if (StringUtils.isNotBlank(links)) {
+            EXCLUDEPATH.addAll(Arrays.asList(links.split(Global.COMMA)));
+        }
+    }
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
+                         FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        String requestUri = request.getRequestURI();
+        /*1、不用token的接口直接放行*/
+        if (EXCLUDEPATH.contains(requestUri)) {
+            filterChain.doFilter(servletRequest, servletResponse);
+            return;
+        }
+
+
+
+
+    }
+}

+ 39 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckInterceptor.java

@@ -0,0 +1,39 @@
+package com.sckw.core.filter;
+
+import com.sckw.core.model.auth.context.LoginEnterpriseHolder;
+import com.sckw.core.web.context.LoginUserHolder;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.lang.Nullable;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+/**
+ * @desc 拦截器
+ * @author zk
+ * @date 2023/8/18
+ */
+public class RequestCheckInterceptor implements HandlerInterceptor {
+
+    /**
+     * @desc 请求处理之前执行
+     * @author zk
+     * @date 2023/8/18
+     **/
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+
+        return true;
+    }
+
+
+    /**
+     * @desc preHandle成功后执行
+     * @author zk
+     * @date 2023/8/18
+     **/
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
+        LoginUserHolder.remove();
+        LoginEnterpriseHolder.remove();
+    }
+}

+ 12 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ClientTypeEnum.java

@@ -1,5 +1,7 @@
 package com.sckw.core.model.enums;
 
+import com.sckw.core.model.constant.Global;
+
 /**
  * @Description 客户端类型枚举
  * @Author dengyinghui
@@ -43,4 +45,14 @@ public enum ClientTypeEnum {
     public void setValue(String value) {
         this.value = value;
     }
+
+    public static int expireTime(String clientType) {
+        if (clientType.equals(pc.getValue())) {
+            return Global.PC_TOKEN_EXPIRE;
+        } else if (clientType.equals(ios.getValue()) || clientType.equals(android.getValue())) {
+            return Global.APP_TOKEN_EXPIRE;
+        } else {
+            return Global.COMMON_EXPIRE;
+        }
+    }
 }

+ 7 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java

@@ -122,7 +122,7 @@ public class PasswordUtils {
 
     public static void main(String[] args) {
 
-        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("123456"));
+        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("18581845668"));
         String md5 = PasswordUtils.md5("18581845668");
         System.out.println(password);
         System.out.println(md5);
@@ -130,5 +130,11 @@ public class PasswordUtils {
 //        System.out.println(PasswordUtils.md5("czh"));
 //        System.out.println(PasswordUtils.entryptPassword(PasswordUtils.md5("czh")));
         System.out.println(validatePassword(md5, "86e07d48c04c8a4bd9fe9dc819c608c43efda576b215995e9f138809"));
+
+
+        byte[] salt = Digests.generateSalt(SALT_SIZE);
+        byte[] hashPassword = Digests.sha1(md5.getBytes(), salt, HASH_INTERATIONS);
+        System.out.println(Encodes.encodeHex(salt));
+        System.out.println(Encodes.encodeHex(hashPassword));
     }
 }

+ 5 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/LoginUserInfo.java

@@ -55,6 +55,11 @@ public class LoginUserInfo {
      */
     private String entName;
 
+    /**
+     * 时间戳
+     */
+    private Long timestamp;
+
 
     public LoginUserInfo() {
     }

+ 35 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/request/RequestReadUtils.java

@@ -0,0 +1,35 @@
+package com.sckw.core.web.request;
+
+import jakarta.servlet.http.HttpServletRequest;
+import java.io.*;
+
+/**
+ * @desc
+ * @author zk
+ * @date 2020/08/19
+ */
+public class RequestReadUtils {
+    private static final int BUFFER_SIZE = 1024 * 8;
+
+    public static String read(HttpServletRequest request) throws IOException {
+        BufferedReader bufferedReader = request.getReader();
+        StringWriter writer = new StringWriter();
+        write(bufferedReader,writer);
+        return writer.getBuffer().toString();
+    }
+
+    public static long write(Reader reader, Writer writer) throws IOException {
+        return write(reader, writer, BUFFER_SIZE);
+    }
+
+    public static long write(Reader reader, Writer writer, int bufferSize) throws IOException {
+        int read;
+        long total = 0;
+        char[] buf = new char[bufferSize];
+        while( ( read = reader.read(buf) ) != -1 ) {
+            writer.write(buf, 0, read);
+            total += read;
+        }
+        return total;
+    }
+}

+ 107 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/request/RequestUtil.java

@@ -0,0 +1,107 @@
+package com.sckw.core.web.request;
+
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+import java.util.Enumeration;
+import java.util.Map;
+
+/**
+ * @desc 请求校验
+ * @author zk
+ * @date 2020/08/19
+ */
+public class RequestUtil {
+
+    /**
+     * 获取参数值
+     * @param request 请求
+     * @param key 键
+     * @throws Exception
+     */
+    public static String getParam(HttpServletRequest request, String key) throws Exception{
+        String value = request.getHeader(key);
+        if (StringUtils.isBlank(value)){
+            value = request.getParameter(key);
+        }
+        return value;
+    }
+
+    /**
+     * @description 获取请求参数
+     * @author zk
+     * @date 2020/8/17 18:24
+     * @param
+     * @return
+     **/
+    public static Map<String, Object> getParams(HttpServletRequest request){
+        Enumeration<?> pNames = request.getParameterNames();
+        Map<String, Object> params = CollectionUtils.createHashMap();
+        while (pNames.hasMoreElements()) {
+            String pName = (String) pNames.nextElement();
+            Object pValue = request.getParameter(pName);
+            params.put(pName, pValue);
+        }
+        return params;
+    }
+
+    /**
+     * @description 获取请求参数
+     * @author zk
+     * @date 2020/8/17 18:24
+     * @param
+     * @return
+
+    public static Object getBodyParams(HttpServletRequest request){
+        Object params;
+        try {
+            RequestWrapper requestWrapper = new RequestWrapper(request);
+            String reqBody = requestWrapper.getBodyString(request);
+            params = JSONObject.parse(reqBody);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return params;
+    }**/
+
+    /**
+     * @Description 获取 Nginx代理后的真实ip
+     * @author jiangwei
+     * @date 2019/9/11 10:46
+     */
+    public static String getClientIp(HttpServletRequest request) {
+        String ip = request.getHeader("X-Forwarded-For");
+        String unKnown = "unKnown";
+        if (StringUtils.isNotBlank(ip) && !unKnown.equalsIgnoreCase(ip)) {
+            //多次反向代理后会有多个ip值,第一个ip才是真实ip
+            int index = ip.indexOf(",");
+            if (index != -1) {
+                return ip.substring(0, index);
+            } else {
+
+                return ip;
+            }
+        }
+        ip = request.getHeader("X-Real-IP");
+        if (StringUtils.isNotBlank(ip) && !unKnown.equalsIgnoreCase(ip)) {
+            return ip;
+        }
+        return request.getRemoteAddr();
+    }
+
+
+    /**
+     * 拦截器中,通过@Autowired注入失效,需要通过以下方式获取service对象
+     * @param clazz  对象class类
+     * @param request http request
+     * @param <T>  对象类别
+     * @return 返回一个对象
+     */
+    public static <T> T getObject(Class<T> clazz, HttpServletRequest request) {
+        BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
+        return factory.getBean(clazz);
+    }
+}

+ 27 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/ResponseUtil.java

@@ -0,0 +1,27 @@
+package com.sckw.core.web.response;
+
+import com.alibaba.fastjson.JSON;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+
+/**
+ * @desc 响应
+ * @author zk
+ * @date 2020/08/19
+ */
+public class ResponseUtil {
+
+    /**
+     * 相应输出
+     * @param response 响应
+     * @param httpResult 相应内容
+     * @throws Exception
+     */
+    public static void writer(HttpServletResponse response, HttpResult httpResult) throws Exception{
+        response.setCharacterEncoding("utf-8");
+        PrintWriter printWriter = response.getWriter();
+        printWriter.write(JSON.toJSONString(httpResult));
+        printWriter.flush();
+        printWriter.close();
+    }
+}

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -84,7 +84,7 @@ public class KwfTruckController {
         }
 
         Long id = null;
-        List<Map<String, Object>> trucks = truckService.findList(new HashMap(){{ put("truckNo", truckNo); }});
+        List<Map<String, Object>> trucks = truckService.findList(new HashMap(){{ put("wholeTruckNo", truckNo); }});
         if (com.sckw.core.utils.CollectionUtils.isEmpty(trucks)) {
             return HttpResult.ok();
         } else {

+ 2 - 2
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverMapper.xml

@@ -12,7 +12,7 @@
         left join kwf_driver_qualification drq on drq.driver_id = dr.id and drq.del_flag = 0
         left join kwf_truck_report trr on trr.ent_id = dre.ent_id and trr.driver_id = dr.id
         left join kwf_truck tr on tr.id = trr.truck_id
-        left join kwf_fleet_driver flr on flr.id = dr.id and flr.del_flag = 0
+        left join kwf_fleet_driver flr on flr.driver_id = dr.id and flr.del_flag = 0
         left join kwf_fleet fl on fl.id = flr.fleet_id and fl.del_flag = 0
         where dr.del_flag = 0 and dre.del_flag = 0
         <if test="entId != null and entId != ''">
@@ -65,7 +65,7 @@
         left join kwf_driver_qualification drq on drq.driver_id = dr.id and drq.del_flag = 0
         left join kwf_truck_report trr on trr.ent_id = dre.ent_id and trr.driver_id = dr.id
         left join kwf_truck tr on tr.id = trr.truck_id
-        left join kwf_fleet_driver flr on flr.id = dr.id and flr.del_flag = 0
+        left join kwf_fleet_driver flr on flr.driver_id = dr.id and flr.del_flag = 0
         left join kwf_fleet fl on fl.id = flr.fleet_id and fl.del_flag = 0
         where dr.del_flag = 0 and dre.del_flag = 0
         <if test="entId != null and entId != ''">

+ 4 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -1469,6 +1469,10 @@ public class KwtWaybillOrderService {
      * @date 2023/7/27
      **/
     public BigDecimal deficitPrice(BigDecimal loadAmount, BigDecimal deficitAmount, BigDecimal loss, BigDecimal goodsPrice) {
+        //亏吨<=0
+        if (deficitAmount.compareTo(new BigDecimal(Global.AMOUNT)) <= 0) {
+            return new BigDecimal(Global.AMOUNT);
+        }
         //承运订单亏吨扣款=(承运订单亏吨量 -(承运订单装货量 * 承运订单合理损耗))* 扣亏货值
         loss = loss == null ? new BigDecimal(Global.AMOUNT) : loss;
         goodsPrice = goodsPrice == null ? new BigDecimal(Global.AMOUNT) : goodsPrice;

+ 1 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -153,7 +153,7 @@
         count(case when wo.status = 8 then 1 end) totalComplete,
         count(case when wo.status not in (1, 9, 10, 11) then 1 end) totalTake,
         count(case when wo.status not in (3, 4, 5, 6) then 1 end) totalExecute,
-        count(DISTINCT case when lo.status not in (0, 1, 2, 3) then lo.id end) totalUnfinished,
+        count(DISTINCT case when lo.status in (0, 1, 2, 3) then lo.id end) totalUnfinished,
         IFNULL(SUM(wo.entrust_amount), 0.0) entrustAmount, IFNULL(SUM(wo.load_amount), 0.0) loadAmount,
         IFNULL(SUM(wo.unload_amount), 0.0) unloadAmount, IFNULL(SUM(wo.deficit_amount), 0.0) deficitAmount,
         MIN(wot1.operate_time) loadTime, MAX(wot2.operate_time) unloadTime