skyouc
2 天以前 5807fc22aba974b4ca85a8049ecd983673b0ca28
1. 添加大屏接口
2. 任务站点确认修改
4个文件已修改
9个文件已添加
507 ■■■■■ 已修改文件
rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/WebMvcConfig.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/MonitorController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/Constants.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/MonitorService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/MonitorServiceImpl.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/utils/Http.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/MonitorController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MonitorService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MonitorServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseStockController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/WebMvcConfig.java
New file
@@ -0,0 +1,78 @@
package com.vincent.rsf.openApi.config;
import com.vincent.rsf.openApi.entity.constant.Constants;
import com.vincent.rsf.openApi.utils.Http;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.AsyncHandlerInterceptor;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * WebMvc配置, 拦截器、资源映射等都在此配置
 *
 * @author vincent
 * @since 2019-06-12 10:11:16
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getAsyncHandlerInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/swagger-resources/**", "/webjars/**","/erp/**", "/v2/**","/v3/**","/doc.html/**", "/swagger-ui.html/**");
    }
    @Bean
    public AsyncHandlerInterceptor getAsyncHandlerInterceptor() {
        return new AsyncHandlerInterceptor(){
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                Http.cors(response);
                return true;
            }
        };
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedHeaders("*")
                .exposedHeaders(Constants.TOKEN_HEADER_NAME)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH")
                .allowCredentials(true)
                .maxAge(3600);
    }
    public static void cors(HttpServletResponse response){
        // 跨域设置
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME);
    }
}
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/MonitorController.java
New file
@@ -0,0 +1,34 @@
package com.vincent.rsf.openApi.controller;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.service.MonitorService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
 * 大屏
 */
@RestController
@RequestMapping("/monitor")
public class MonitorController {
    @Autowired
    private MonitorService monitorService;
    /**
     * 获取出入库流水记录
     * @return
     */
    @PostMapping("/inOut/page")
    @ApiOperation("获取入出库流水记录")
    public CommonResponse getInOutHis(@RequestBody Map<String, Object> param) {
        return monitorService.getInOutHistories(param);
    }
}
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/Constants.java
New file
@@ -0,0 +1,134 @@
package com.vincent.rsf.openApi.entity.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 = "Request success";
    /**
     * 默认失败信息
     */
    public static final String RESULT_ERROR_MSG = "Internal server error!";
    /**
     * 无权限错误码
     */
    public static final int UNAUTHORIZED_CODE = 403;
    /**
     * 无权限提示信息
     */
    public static final String UNAUTHORIZED_MSG = "No access right";
    /**
     * 未认证错误码
     */
    public static final int UNAUTHENTICATED_CODE = 401;
    /**
     * 未认证提示信息
     */
    public static final String UNAUTHENTICATED_MSG = "Please log in first";
    /**
     * 登录过期错误码
     */
    public static final int TOKEN_EXPIRED_CODE = 401;
    /**
     * 登录过期提示信息
     */
    public static final String TOKEN_EXPIRED_MSG = "Login expired";
    /**
     * 非法token错误码
     */
    public static final int BAD_CREDENTIALS_CODE = 401;
    /**
     * 非法token提示信息
     */
    public static final String BAD_CREDENTIALS_MSG = "Please log out and log in again";
    /**
     * 表示升序的值
     */
    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";
    /**
     * 库存出库
     */
    public static final String TASK_TYPE_OUT_STOCK = "outStock";
    /**
     * 库存盘点出库
     */
    public static final String TASK_TYPE_OUT_CHECK = "check";
    /**
     * 单据出库
     */
    public static final String TASK_TYPE_ORDER_OUT_STOCK = "OrderOutStock";
    /**
     * 波次出库
     */
    public static final String TASK_TYPE_WAVE_OUT_STOCK = "WaveOutStock";
    /**
     * 拣料出库
     */
    public static final String TASK_TYPE_OUT_PICK = "pick";
    /**
     * 排序默认值
     */
    public static final Integer TASK_SORT_DEFAULT_VALUE =  49;
    /**
     * 排序最大值
     */
    public static final Integer TASK_SORT_MAX_VALUE =  999;
    /**
     * 排序最小值
     */
    public static final Integer TASK_SORT_MIN_VALUE =  0;
}
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
@@ -7,10 +7,8 @@
    public static String callBack = "/rsf-server/wcs/receive/ex/msg";
    //订单信息查询
    public static String QUERY_ORDER_AND_DETLS = "/rsf-server/erp/query/order";
    //订单信息修改/添加
    public static String MODIFY_ORDER_DETLS = "/rsf-server/order/sync/orders/update";
@@ -18,5 +16,8 @@
    //删除单据信息
    public static String ORDER_DEL = "/rsf-server/order/sync/orders/delete";
    //获取出入库流水
    public static String IN_OUT_HISTORIES = "/rsf-server/monitor/inOut/page";
}
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/MonitorService.java
New file
@@ -0,0 +1,15 @@
package com.vincent.rsf.openApi.service;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import java.util.Map;
public interface MonitorService {
    /**
     * 获取出入库历史
     * @param param
     * @return
     */
    CommonResponse getInOutHistories(Map<String, Object> param);
}
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/MonitorServiceImpl.java
New file
@@ -0,0 +1,71 @@
package com.vincent.rsf.openApi.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.cfg.CoercionAction;
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.openApi.config.PlatformProperties;
import com.vincent.rsf.openApi.entity.constant.WmsConstant;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.service.MonitorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.*;
@Slf4j
@Service
public class MonitorServiceImpl implements MonitorService {
    @Autowired
    private PlatformProperties.WmsApi wmsApi;
    @Autowired
    private RestTemplate restTemplate;
    /**
     * 获取出入库历史
     * @param params
     * @return
     */
    @Override
    public CommonResponse getInOutHistories(Map<String, Object> params) {
        if (Objects.isNull(params)) {
            throw new CoolException("订单号不能为空!!");
        }
        /**WMS基础配置链接*/
        String wmsUrl = wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.IN_OUT_HISTORIES;
        log.info("修改订单信息及状态: {}, 请求参数: {}", wmsUrl, JSONObject.toJSONString(params));
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        headers.add("api-version", "v2.0");
        HttpEntity httpEntity = new HttpEntity(params, headers);
        ResponseEntity<String> exchange = restTemplate.exchange(wmsUrl, HttpMethod.POST, httpEntity, String.class);
        log.info("订单修改返回结果: {}", exchange);
        if (Objects.isNull(exchange.getBody())) {
            throw new CoolException("查询失败!!");
        } else {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.coercionConfigDefaults().setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
            try {
                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
                if (result.getCode() == 200) {
                    return result;
                } else {
                    throw new CoolException("查询失败!!");
                }
            } catch (JsonProcessingException e) {
                throw new CoolException(e.getMessage());
            }
        }
    }
}
rsf-open-api/src/main/java/com/vincent/rsf/openApi/utils/Http.java
New file
@@ -0,0 +1,42 @@
package com.vincent.rsf.openApi.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.openApi.entity.constant.Constants;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
 * Created by vincent on 2019-08-01
 */
public class Http {
    public static void response(HttpServletResponse response, String baseRes){
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json; charset=utf-8");
        try (PrintWriter out = response.getWriter()) {
            R r = R.parse(baseRes);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("total", "0");
            jsonObject.put("record", "");
            r.add(jsonObject);
            out.print(JSON.toJSONString(r));
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void cors(HttpServletResponse response){
        // 跨域设置
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/MonitorController.java
New file
@@ -0,0 +1,85 @@
package com.vincent.rsf.server.api.controller.pda;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.api.service.MonitorService;
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.common.utils.FieldsUtils;
import com.vincent.rsf.server.manager.controller.params.WarehouseStockParam;
import com.vincent.rsf.server.manager.entity.ViewStockManage;
import com.vincent.rsf.server.manager.enums.ViewStockType;
import com.vincent.rsf.server.manager.service.WarehouseStockService;
import com.vincent.rsf.server.system.controller.BaseController;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.List;
import java.util.Map;
import java.util.Objects;
/**
 * 大屏
 */
@RestController
@RequestMapping("/monitor")
public class MonitorController extends BaseController {
    @Autowired
    private MonitorService monitorService;
    @Autowired
    private WarehouseStockService warehouseStockService;
    /**
     * 获取出入库流水记录
     * @return
     */
    @PostMapping("/inOut/page")
    @ApiOperation("获取入出库流水记录")
    public R getInOutHis(@RequestBody Map<String, Object> param) {
        if (Objects.isNull(param)) {
            return R.error("参数不能为空!!");
        }
        BaseParam baseParam = buildParam(param, BaseParam.class);
        PageParam<ViewStockManage, BaseParam> pageParam = new PageParam<>(baseParam, ViewStockManage.class);
        WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class);
        String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType();
        ViewStockManage stock = stockParam.getStock();
        QueryWrapper<ViewStockManage> wrapper = new QueryWrapper<>();
        if (type.equals(ViewStockType.VIEW_STOCK_TYPE_SUPPLIER.val)) {
            wrapper.groupBy("splr_id");
        } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_BATCH.val)) {
            wrapper.groupBy("batch");
        } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_WAREHOUSE.val)) {
            wrapper.groupBy("warehouse");
        } else if (type.equals(ViewStockType.VIEW_STOCK_TYPE_FIELDSINDEX.val)) {
            wrapper.groupBy("fields_index");
        } else {
            wrapper.groupBy("matnr_id");
        }
        FieldsUtils.setFieldsFilters(wrapper, pageParam, ViewStockManage.class);
        IPage<ViewStockManage> pageResult = warehouseStockService.pageByStock(pageParam, wrapper);
        List<ViewStockManage> records = pageResult.getRecords();
        for (ViewStockManage record : records) {
            if (!Objects.isNull(record.getFieldsIndex())) {
                Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
                record.setExtendFields(fields);
            }
        }
        pageResult.setRecords(records);
        return R.ok(pageResult);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/MonitorService.java
New file
@@ -0,0 +1,10 @@
package com.vincent.rsf.server.api.service;
import com.vincent.rsf.framework.common.R;
import java.util.Map;
public interface MonitorService {
    R getInOutHistories(Map<String, Object> param);
}
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MonitorServiceImpl.java
New file
@@ -0,0 +1,17 @@
package com.vincent.rsf.server.api.service.impl;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.api.service.MonitorService;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class MonitorServiceImpl implements MonitorService {
    @Override
    public R getInOutHistories(Map<String, Object> param) {
        return R.ok();
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
@@ -53,6 +53,7 @@
            "/swagger-ui/**",
            "/ws/**",
            "/wcs/**",
            "/monitor/**",
            "/mcp/**"
    };
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseStockController.java
@@ -11,7 +11,6 @@
import com.vincent.rsf.server.manager.controller.params.WarehouseStockParam;
import com.vincent.rsf.server.manager.entity.StockItem;
import com.vincent.rsf.server.manager.entity.ViewStockManage;
import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
import com.vincent.rsf.server.manager.enums.ViewStockType;
import com.vincent.rsf.server.manager.service.WarehouseStockService;
import com.vincent.rsf.server.system.controller.BaseController;
@@ -36,8 +35,7 @@
    @Autowired
    private WarehouseStockService warehouseStockService;
    @PreAuthorize("hasAuthority('manager:locItem:list')")
//    @PreAuthorize("hasAuthority('manager:locItem:list')")
    @PostMapping("/page")
    public R page(@RequestBody Map<String, Object> param) {
        if (Objects.isNull(param)) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -347,6 +347,17 @@
            if (!this.save(task)) {
                throw new CoolException("任务保存失败!!");
            }
            BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, deviceSite.getSite()));
            if (Objects.isNull(station) || station.getUseStatus() != LocStsType.LOC_STS_TYPE_O.type) {
                throw new CoolException("站点不存在或站点不处于空库状态!!");
            }
            station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
            if (basStationService.updateById(station)) {
                 throw new CoolException("站点状态更新失败!!");
             }
            if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, task.getTargLoc())
                    .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, pakin.getBarcode()))) {
                throw new CoolException("库位预约失败!!");