#
Junjie
2024-01-04 317d21981520b527d971929586505ddf0a1a1d71
#
11个文件已添加
4个文件已修改
747 ■■■■■ 已修改文件
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/controller/ApiLogController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/ApiLog.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/mapper/ApiLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/ApiLogService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/ApiService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/impl/ApiLogServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/impl/ApiServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/utils/IpTools.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WaitPakin.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/resources/mapper/openapi/ApiLogMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/config/AdminInterceptor.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/config/ControllerResAdvice.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/config/WebConfig.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/controller/ApiController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/controller/ApiLogController.java
New file
@@ -0,0 +1,106 @@
package com.zy.asrs.common.openapi.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.common.openapi.entity.ApiLog;
import com.zy.asrs.common.openapi.service.ApiLogService;
import com.zy.asrs.framework.annotations.ManagerAuth;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.domain.KeyValueVo;
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
public class ApiLogController extends BaseController {
    @Autowired
    private ApiLogService apiLogService;
    @RequestMapping(value = "/apiLog/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(apiLogService.getById(String.valueOf(id)));
    }
    @RequestMapping(value = "/apiLog/page/auth")
    @ManagerAuth
    public R page(@RequestParam(defaultValue = "1") Integer curr,
                  @RequestParam(defaultValue = "10") Integer limit,
                  @RequestParam(required = false) String condition,
                  @RequestParam(required = false) String timeRange,
                  @RequestParam Map<String, Object> param) {
        LambdaQueryWrapper<ApiLog> wrapper = new LambdaQueryWrapper<>();
        if (!Cools.isEmpty(condition)) {
            wrapper.like(ApiLog::getUuid, condition);
        }
        if (!Cools.isEmpty(timeRange)) {
            String[] range = timeRange.split(RANGE_TIME_LINK);
            wrapper.ge(ApiLog::getCreateTime, DateUtils.convert(range[0]));
            wrapper.le(ApiLog::getCreateTime, DateUtils.convert(range[1]));
        }
        return R.ok(apiLogService.page(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/apiLog/add/auth")
    @ManagerAuth
    public R add(ApiLog apiLog) {
        apiLogService.save(apiLog);
        return R.ok();
    }
    @RequestMapping(value = "/apiLog/update/auth")
    @ManagerAuth
    public R update(ApiLog apiLog){
        if (Cools.isEmpty(apiLog) || null==apiLog.getId()){
            return R.error();
        }
        apiLogService.updateById(apiLog);
        return R.ok();
    }
    @RequestMapping(value = "/apiLog/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            apiLogService.removeById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/apiLogQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        LambdaQueryWrapper<ApiLog> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(ApiLog::getUuid, condition);
        Page<ApiLog> page = apiLogService.page(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (ApiLog apiLog : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", apiLog.getId());
            map.put("value", apiLog.getUuid());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping("/apiLog/all/get/kv")
    @ManagerAuth
    public R getDataKV(@RequestParam(required = false) String condition) {
        List<KeyValueVo> vos = new ArrayList<>();
        LambdaQueryWrapper<ApiLog> wrapper = new LambdaQueryWrapper<>();
        if (!Cools.isEmpty(condition)) {
            wrapper.like(ApiLog::getUuid, condition);
        }
        apiLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(String.valueOf(item.getUuid()), item.getId())));
        return R.ok().add(vos);
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/ApiLog.java
New file
@@ -0,0 +1,200 @@
package com.zy.asrs.common.openapi.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.common.sys.entity.User;
import com.zy.asrs.common.sys.entity.Host;
import com.zy.asrs.common.sys.service.UserService;
import com.zy.asrs.common.sys.service.HostService;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("openapi_api_log")
public class ApiLog 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 uuid;
    /**
     * 名称空间
     */
    @ApiModelProperty(value= "名称空间")
    private String namespace;
    /**
     * 接口地址
     */
    @ApiModelProperty(value= "接口地址")
    private String url;
    /**
     * 平台密钥
     */
    @ApiModelProperty(value= "平台密钥")
    private String appkey;
    /**
     * 时间戳
     */
    @ApiModelProperty(value= "时间戳")
    private String timestamp;
    /**
     * 客户端IP
     */
    @ApiModelProperty(value= "客户端IP")
    private String clientIp;
    /**
     * 请求内容
     */
    @ApiModelProperty(value= "请求内容")
    private String request;
    /**
     * 响应内容
     */
    @ApiModelProperty(value= "响应内容")
    private String response;
    /**
     * 异常内容
     */
    @ApiModelProperty(value= "异常内容")
    private String err;
    /**
     * 结果 1: 成功  0: 失败
     */
    @ApiModelProperty(value= "结果 1: 成功  0: 失败  ")
    private Integer result;
    /**
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    /**
     * 添加时间
     */
    @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 ApiLog() {}
    public ApiLog(String uuid,String namespace,String url,String appkey,String timestamp,String clientIp,String request,String response,String err,Integer result,Integer status,Date createTime,Date updateTime,String memo) {
        this.uuid = uuid;
        this.namespace = namespace;
        this.url = url;
        this.appkey = appkey;
        this.timestamp = timestamp;
        this.clientIp = clientIp;
        this.request = request;
        this.response = response;
        this.err = err;
        this.result = result;
        this.status = status;
        this.createTime = createTime;
        this.updateTime = updateTime;
        this.memo = memo;
    }
//    ApiLog apiLog = new ApiLog(
//            null,    // 日志编号
//            null,    // 名称空间
//            null,    // 接口地址
//            null,    // 平台密钥
//            null,    // 时间戳
//            null,    // 客户端IP
//            null,    // 请求内容
//            null,    // 响应内容
//            null,    // 异常内容
//            null,    // 结果
//            null,    // 状态
//            null,    // 添加时间
//            null,    // 修改时间
//            null    // 备注
//    );
    public String getResult$(){
        if (null == this.result){ return null; }
        switch (this.result){
            case 1:
                return "成功";
            case 0:
                return "失败";
            default:
                return String.valueOf(this.result);
        }
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "正常";
            case 0:
                return "禁用";
            default:
                return String.valueOf(this.status);
        }
    }
    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);
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java
New file
@@ -0,0 +1,57 @@
package com.zy.asrs.common.openapi.entity.param;
import lombok.Data;
import java.util.List;
/**
 * Created by vincent on 2020/6/28
 */
@Data
public class CombParam {
    // 单据编号
    private String orderNo;
    // 托盘条码
    private String barcode;
    // 库位编号
    private String locno;
    //组托物料
    private List<CombMat> combMats;
    //仓库ID
    private Long hostId;
    @Data
    public static class CombMat {
        //料想码
        private String containerCode;
        //销售订单号
        private String csocode;
        //销售订单行号
        private String isoseq;
        // 物料编号
        private String matnr;
        // 序列码
        private String batch;
        // 物料数量
        private Double anfme;
        // 商品名称
        private String maktx;
        // 规格
        private String specs;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/mapper/ApiLogMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.common.openapi.mapper;
import com.zy.asrs.common.openapi.entity.ApiLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ApiLogMapper extends BaseMapper<ApiLog> {
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/ApiLogService.java
New file
@@ -0,0 +1,10 @@
package com.zy.asrs.common.openapi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.common.openapi.entity.ApiLog;
public interface ApiLogService extends IService<ApiLog> {
    void saveLog(String namespace, String url, String appkey, String ip, String request, String response, boolean success);
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/ApiService.java
@@ -1,6 +1,10 @@
package com.zy.asrs.common.openapi.service;
import com.zy.asrs.common.openapi.entity.param.CombParam;
import com.zy.asrs.common.openapi.entity.param.GenerateOrderPakInParam;
import com.zy.asrs.common.wms.entity.DocType;
import java.util.List;
public interface ApiService {
@@ -9,4 +13,6 @@
     */
    void generateOrderPakIn(GenerateOrderPakInParam param);
    List<DocType> getOrderType();
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/impl/ApiLogServiceImpl.java
New file
@@ -0,0 +1,42 @@
package com.zy.asrs.common.openapi.service.impl;
import com.zy.asrs.common.openapi.mapper.ApiLogMapper;
import com.zy.asrs.common.openapi.entity.ApiLog;
import com.zy.asrs.common.openapi.service.ApiLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service("apiLogService")
public class ApiLogServiceImpl extends ServiceImpl<ApiLogMapper, ApiLog> implements ApiLogService {
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Override
    public void saveLog(String namespace, String url, String appkey, String ip, String request, String response, boolean success) {
        Date now = new Date();
        ApiLog apiLog = new ApiLog(
                String.valueOf(snowflakeIdWorker.nextId()),    // 日志编号
                namespace,    // 名称空间
                url,    // 接口地址
                appkey,    // 平台密钥
                String.valueOf(now.getTime()),    // 时间戳
                ip,    // 客户端IP
                request,    // 请求内容
                response,
                null,    // 异常内容
                success?1:0 ,    // 结果
                1,    // 状态
                now,    // 添加时间
                null,    // 修改时间
                null    // 备注
        );
        if (!this.save(apiLog)) {
            log.error("接口调用日志保存失败!");
        }
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/service/impl/ApiServiceImpl.java
@@ -2,22 +2,19 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.common.domain.dto.DetlDto;
import com.zy.asrs.common.openapi.entity.param.CombParam;
import com.zy.asrs.common.openapi.entity.param.GenerateOrderPakInParam;
import com.zy.asrs.common.openapi.service.ApiService;
import com.zy.asrs.common.wms.entity.DocType;
import com.zy.asrs.common.wms.entity.Mat;
import com.zy.asrs.common.wms.entity.Order;
import com.zy.asrs.common.wms.entity.OrderDetl;
import com.zy.asrs.common.wms.service.DocTypeService;
import com.zy.asrs.common.wms.service.MatService;
import com.zy.asrs.common.wms.service.OrderDetlService;
import com.zy.asrs.common.wms.service.OrderService;
import com.zy.asrs.common.wms.entity.*;
import com.zy.asrs.common.wms.service.*;
import com.zy.asrs.framework.common.BaseRes;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
import com.zy.asrs.framework.exception.CoolException;
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.Date;
@@ -36,6 +33,8 @@
    private MatService matService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private WaitPakinService waitPakinService;
    @Override
    public void generateOrderPakIn(GenerateOrderPakInParam param) {
@@ -124,4 +123,10 @@
            }
        }
    }
    @Override
    public List<DocType> getOrderType() {
        List<DocType> list = docTypeService.list();
        return list;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/utils/IpTools.java
New file
@@ -0,0 +1,94 @@
package com.zy.asrs.common.utils;
import com.zy.asrs.framework.common.Cools;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
/**
 * Created by vincent on 2020/8/6
 */
@Slf4j
public class IpTools {
    public static String gainRealIp(HttpServletRequest request) {
        String ipAddress = "";
        try {
            if (request == null) {
                return ipAddress;
            }
            //排除本地测试
            if ("127.0.0.1".equals(request.getServerName()) || "localhost".equals(request.getServerName())) {
                ipAddress = "127.0.0.1";
                return ipAddress;
            }
            ipAddress = request.getRemoteAddr();
            if (Cools.isEmpty(ipAddress)) {
                ipAddress = request.getRemoteHost();
            } else {
                return ipAddress;
            }
            if (!Cools.isEmpty(ipAddress)) {
                return ipAddress;
            }
            // 获取真实ip,排除代理ip
            ipAddress = request.getHeader("Referer");
            // ipAddress = this.getRequest().getRemoteAddr();
            ipAddress = request.getHeader("X-Forwarded-For");
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                // 更换niginx代理
                // ipAddress = request.getRemoteAddr();
                ipAddress = request.getHeader("X-Real-IP");
                if (ipAddress != null && (ipAddress.equals("" + "") || ipAddress.endsWith("0:0:0:0:0:0:0:1"))) {
                    // 根据网卡取本机配置的IP
                    // linux下也可以获取本地的ip地址
                    Enumeration<?> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
                    InetAddress ip;
                    while (allNetInterfaces.hasMoreElements()) {
                        NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
                        Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
                        while (addresses.hasMoreElements()) {
                            ip = addresses.nextElement();
                            if (ip instanceof Inet4Address) {
                                // 获取真实的Ip地址
                                ipAddress = ip.getHostAddress();
                            }
                        }
                    }
                }
            }
            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割"***.***.***.***".length()=15
            if (ipAddress != null && ipAddress.length() > 15) {
                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
                }
            }
        } catch (Exception e) {
            log.warn("ip{},解析异常", ipAddress, e);
        }
        return ipAddress;
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WaitPakin.java
@@ -2,6 +2,8 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import com.zy.asrs.common.utils.Synchro;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -426,5 +428,8 @@
        return null;
    }
    public void sync(Object source) {
        Synchro.Copy(source, this);
    }
}
zy-asrs-common/src/main/resources/mapper/openapi/ApiLogMapper.xml
New file
@@ -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.common.openapi.mapper.ApiLogMapper">
</mapper>
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/config/AdminInterceptor.java
New file
@@ -0,0 +1,70 @@
package com.zy.asrs.openapi.config;
import com.zy.asrs.common.sys.entity.OperateLog;
import com.zy.asrs.common.sys.service.OperateLogService;
import com.zy.asrs.framework.annotations.AppAuth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
@Component
public class AdminInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private OperateLogService operateLogService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        cors(response);
        if (handler instanceof org.springframework.web.servlet.resource.ResourceHttpRequestHandler) {
            return true;
        }
        // 跨域设置
        // response.setHeader("Access-Control-Allow-Origin", "*");
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        if (method.isAnnotationPresent(AppAuth.class)){
            AppAuth annotation = method.getAnnotation(AppAuth.class);
            if (annotation.value().equals(AppAuth.Auth.CHECK)){
                request.setAttribute("appAuth", annotation.memo());
            }
        }
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) {
        Object obj = request.getAttribute("operateLog");
        if (obj instanceof OperateLog) {
            OperateLog operate = (OperateLog) obj;
            operate.setResponse(String.valueOf(response.getStatus()));
            operateLogService.save(operate);
        }
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
//        Object r = request.getAttribute("cool-response");
    }
    /**
     * 跨域
     */
    public static void cors(HttpServletResponse response){
        // 跨域设置
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token");
        response.setHeader("Access-Control-Expose-Headers", "*");
    }
}
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/config/ControllerResAdvice.java
New file
@@ -0,0 +1,81 @@
package com.zy.asrs.openapi.config;
import com.alibaba.fastjson.JSON;
import com.zy.asrs.common.openapi.service.ApiLogService;
import com.zy.asrs.common.utils.IpTools;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
/**
 * 返回值处理
 */
@Slf4j
@ControllerAdvice
public class ControllerResAdvice implements ResponseBodyAdvice<Object> {
    @Autowired
    private ApiLogService apiLogService;
    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }
    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        if (serverHttpRequest instanceof ServletServerHttpRequest) {
            HttpServletRequest request = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest();
            Object appAuth = request.getAttribute("appAuth");
            if (appAuth != null) {
                if (o instanceof R) {
                    String appkey = request.getHeader("appkey");
                    Object reqCache = request.getAttribute("cache");
                    if (!Cools.isEmpty(appkey)) {
                        // 保存接口日志
                        apiLogService.saveLog(
                                String.valueOf(appAuth),
                                request.getRequestURI(),
                                appkey,
                                IpTools.gainRealIp(request),
                                reqCache==null?"": JSON.toJSONString(reqCache),
                                JSON.toJSONString(o),
                                String.valueOf(((R) o).get("code")).equalsIgnoreCase("200")
                        );
                    }
                }
            }
        }
        return o;
    }
    public static String json(HttpServletRequest request) {
        try {
            BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8));
            StringBuilder sb = new StringBuilder();
            String inputStr;
            while ((inputStr = streamReader.readLine()) != null) {
                sb.append(inputStr);
            }
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/config/WebConfig.java
New file
@@ -0,0 +1,24 @@
package com.zy.asrs.openapi.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * Created by vincent on 2019-06-13
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private AdminInterceptor adminInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(adminInterceptor)
                .addPathPatterns("/**")
                ;
    }
}
zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/controller/ApiController.java
@@ -9,7 +9,7 @@
import com.zy.asrs.common.openapi.service.HostKeyService;
import com.zy.asrs.common.web.BaseController;
import com.zy.asrs.common.wms.entity.DocType;
import com.zy.asrs.common.wms.service.DocTypeService;
import com.zy.asrs.framework.annotations.AppAuth;
import com.zy.asrs.framework.common.BaseRes;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
@@ -30,11 +30,13 @@
    @Autowired
    private HostKeyService hostKeyService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private ApiService apiService;
    /**
     * 生成入库订单
     */
    @PostMapping("/generateOrderPakIn")
    @AppAuth(memo = "生成入库订单")
    public synchronized R generateOrderPakIn(@RequestHeader(required = false) String appkey,
                                           @RequestBody GenerateOrderPakInParam param) {
        HostKey hostKey = auth(appkey, param, true);
@@ -55,14 +57,18 @@
        return R.ok();
    }
    /**
     * 获取订单类型
     */
    @PostMapping("/getOrderType")
    public synchronized R getOrderType(@RequestHeader(required = false) String appkey) {
        auth(appkey, null, false);
        List<DocType> list = docTypeService.list();
        List<DocType> list = apiService.getOrderType();
        return R.ok().add(list);
    }
    private HostKey auth(String appkey, Object obj, boolean signCheck) {
        request.setAttribute("cache", obj);
        if (Cools.isEmpty(appkey)) {
            throw new CoolException("认证失败,请确认appKey无误!");
        }