浏览代码

Merge branch 'master' of lhm/kmall-haikong into master

lhm 3 年之前
父节点
当前提交
40ea336a2a

+ 122 - 0
kmall-admin/src/main/java/com/kmall/admin/config/datasource/DataSourceConfig.java

@@ -0,0 +1,122 @@
+package com.kmall.admin.config.datasource;
+
+import com.alibaba.druid.filter.Filter;
+import com.alibaba.druid.filter.stat.StatFilter;
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.wall.WallConfig;
+import com.alibaba.druid.wall.WallFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.core.env.Environment;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author lhm
+ * @createDate 2021-12-15
+ */
+@Configuration
+@PropertySource(value = {"classpath:conf/db.properties"})
+public class DataSourceConfig {
+
+    @Autowired
+    private Environment environment;
+
+    @Bean
+    public DataSourceProperties dataSourceProperties() {
+        DataSourceProperties dataSourceProperties = new DataSourceProperties();
+        String env = environment.getProperty("jdbc.env");
+        String url = environment.getProperty(String.format("jdbc.%s.url", env));
+        String username = environment.getProperty(String.format("jdbc.%s.username", env));
+        String password = environment.getProperty(String.format("jdbc.%s.password", env));
+        String initialSize = environment.getProperty("jdbc.initialSize");
+        String maxActive = environment.getProperty("jdbc.maxActive");
+        String minPoolSize = environment.getProperty("jdbc.minPoolSize");
+        String maxIdleTime = environment.getProperty("jdbc.maxIdleTime");
+        String idleConnectionTestPeriod = environment.getProperty("jdbc.idleConnectionTestPeriod");
+        String driver = environment.getProperty("jdbc.driver");
+        String idleTimeout = environment.getProperty("jdbc.idleTimeout");
+        String maxLifetime = environment.getProperty("jdbc.maxLifetime");
+        String connectionTimeout = environment.getProperty("jdbc.connectionTimeout");
+        String maximumPoolSize = environment.getProperty("jdbc.maximumPoolSize");
+        String validationTimeout = environment.getProperty("jdbc.validationTimeout");
+
+        dataSourceProperties.setEnv(env);
+        dataSourceProperties.setUrl(url);
+        dataSourceProperties.setUsername(username);
+        dataSourceProperties.setPassword(password);
+        // 通用配置
+        dataSourceProperties.setInitialSize(StringUtils.isEmpty(initialSize) ? 5 : Integer.parseInt(initialSize));
+        dataSourceProperties.setMaxActive(StringUtils.isEmpty(maxActive) ? 30 : Integer.parseInt(maxActive));
+        dataSourceProperties.setMinPoolSize(StringUtils.isEmpty(minPoolSize) ? 2 : Integer.parseInt(minPoolSize));
+        dataSourceProperties.setMaxIdleTime(StringUtils.isEmpty(maxIdleTime) ? 30000 : Integer.parseInt(maxIdleTime));
+        dataSourceProperties.setIdleConnectionTestPeriod(StringUtils.isEmpty(idleConnectionTestPeriod) ? 100 : Integer.parseInt(idleConnectionTestPeriod));
+        dataSourceProperties.setDriver(driver);
+        dataSourceProperties.setIdleTimeout(StringUtils.isEmpty(idleTimeout) ? 400000L : Long.parseLong(idleTimeout));
+        dataSourceProperties.setMaxLifetime(StringUtils.isEmpty(maxLifetime) ? 500000L : Long.parseLong(maxLifetime));
+        dataSourceProperties.setConnectionTimeout(StringUtils.isEmpty(connectionTimeout) ? 5000L : Long.parseLong(connectionTimeout));
+        dataSourceProperties.setMaximumPoolSize(StringUtils.isEmpty(maximumPoolSize) ? 5 : Integer.parseInt(maximumPoolSize));
+        dataSourceProperties.setValidationTimeout(StringUtils.isEmpty(validationTimeout) ? 30L : Long.parseLong(validationTimeout));
+
+        return dataSourceProperties;
+    }
+
+    @Bean(initMethod = "init", destroyMethod = "close")
+    public DruidDataSource dataSource(DataSourceProperties dataSourceProperties,
+                                      StatFilter statFilter,
+                                      WallFilter wallFilter) {
+        DruidDataSource druidDataSource = new DruidDataSource();
+        druidDataSource.setUrl(dataSourceProperties.getUrl());
+        druidDataSource.setUsername(dataSourceProperties.getUsername());
+        druidDataSource.setPassword(dataSourceProperties.getPassword());
+        druidDataSource.setInitialSize(dataSourceProperties.getInitialSize());
+        druidDataSource.setMaxActive(dataSourceProperties.getMaxActive());
+        List<Filter> filters = new ArrayList<>();
+        filters.add(statFilter);
+        filters.add(wallFilter);
+        druidDataSource.setProxyFilters(filters);
+        druidDataSource.setConnectionInitSqls(Collections.singleton("set names utf8mb4;"));
+        // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+        druidDataSource.setTimeBetweenEvictionRunsMillis(60000);
+        // 配置一个连接在池中最小生存的时间,单位是毫秒
+        druidDataSource.setMinEvictableIdleTimeMillis(300000);
+        // 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
+        druidDataSource.setTestWhileIdle(true);
+        // 指定每个连接上PSCache的大小
+        druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
+        return druidDataSource;
+    }
+
+    @Bean
+    public StatFilter statFilter() {
+        StatFilter statFilter = new StatFilter();
+        statFilter.setSlowSqlMillis(1000);
+        statFilter.setLogSlowSql(true);
+        statFilter.setMergeSql(true);
+        return statFilter;
+    }
+
+    @Bean
+    public WallFilter wallFilter(WallConfig wallConfig) {
+        WallFilter wallFilter = new WallFilter();
+        wallFilter.setDbType("mysql");
+        wallFilter.setConfig(wallConfig);
+        return wallFilter;
+    }
+
+    /**
+     * 过滤永真条件 防止注入
+     */
+    @Bean
+    public WallConfig wallConfig() {
+        WallConfig wallConfig = new WallConfig();
+        wallConfig.setMultiStatementAllow(true);
+        return wallConfig;
+    }
+
+}

+ 158 - 0
kmall-admin/src/main/java/com/kmall/admin/config/datasource/DataSourceProperties.java

@@ -0,0 +1,158 @@
+package com.kmall.admin.config.datasource;
+
+/**
+ * @author lhm
+ * @createDate 2021-12-15
+ */
+public class DataSourceProperties {
+
+    private String env;
+
+    private String url;
+
+    private String username;
+
+    private String password;
+
+    private Integer initialSize;
+
+    private Integer maxActive;
+
+    private Integer minPoolSize;
+
+    private Integer maxIdleTime;
+
+    private Integer idleConnectionTestPeriod;
+
+    private String driver;
+
+    private Long idleTimeout;
+
+    private Long maxLifetime;
+
+    private Long connectionTimeout;
+
+    private Integer maximumPoolSize;
+
+    private Long validationTimeout;
+
+    public String getEnv() {
+        return env;
+    }
+
+    public void setEnv(String env) {
+        this.env = env;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public Integer getInitialSize() {
+        return initialSize;
+    }
+
+    public void setInitialSize(Integer initialSize) {
+        this.initialSize = initialSize;
+    }
+
+    public Integer getMaxActive() {
+        return maxActive;
+    }
+
+    public void setMaxActive(Integer maxActive) {
+        this.maxActive = maxActive;
+    }
+
+    public Integer getMinPoolSize() {
+        return minPoolSize;
+    }
+
+    public void setMinPoolSize(Integer minPoolSize) {
+        this.minPoolSize = minPoolSize;
+    }
+
+    public Integer getMaxIdleTime() {
+        return maxIdleTime;
+    }
+
+    public void setMaxIdleTime(Integer maxIdleTime) {
+        this.maxIdleTime = maxIdleTime;
+    }
+
+    public Integer getIdleConnectionTestPeriod() {
+        return idleConnectionTestPeriod;
+    }
+
+    public void setIdleConnectionTestPeriod(Integer idleConnectionTestPeriod) {
+        this.idleConnectionTestPeriod = idleConnectionTestPeriod;
+    }
+
+    public String getDriver() {
+        return driver;
+    }
+
+    public void setDriver(String driver) {
+        this.driver = driver;
+    }
+
+    public Long getIdleTimeout() {
+        return idleTimeout;
+    }
+
+    public void setIdleTimeout(Long idleTimeout) {
+        this.idleTimeout = idleTimeout;
+    }
+
+    public Long getMaxLifetime() {
+        return maxLifetime;
+    }
+
+    public void setMaxLifetime(Long maxLifetime) {
+        this.maxLifetime = maxLifetime;
+    }
+
+    public Long getConnectionTimeout() {
+        return connectionTimeout;
+    }
+
+    public void setConnectionTimeout(Long connectionTimeout) {
+        this.connectionTimeout = connectionTimeout;
+    }
+
+    public Integer getMaximumPoolSize() {
+        return maximumPoolSize;
+    }
+
+    public void setMaximumPoolSize(Integer maximumPoolSize) {
+        this.maximumPoolSize = maximumPoolSize;
+    }
+
+    public Long getValidationTimeout() {
+        return validationTimeout;
+    }
+
+    public void setValidationTimeout(Long validationTimeout) {
+        this.validationTimeout = validationTimeout;
+    }
+}

+ 53 - 7
kmall-admin/src/main/java/com/kmall/admin/haikong/config/HaiKongConfig.java

@@ -5,6 +5,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.core.env.Environment;
+import org.springframework.util.StringUtils;
 
 /**
  * 海控配置类
@@ -22,14 +23,59 @@ public class HaiKongConfig {
     public HaiKongProperties haiKongProperties() {
         HaiKongProperties haiKongProperties = new HaiKongProperties();
 
-        haiKongProperties.setMemberUrl(environment.getProperty("haikong.member.url"));
-        haiKongProperties.setMemberAppId(environment.getProperty("haikong.member.appId"));
-        haiKongProperties.setMemberAppSecret(environment.getProperty("haikong.member.appSecret"));
+        String env = environment.getProperty("haikong.env");
         haiKongProperties.setRetry(Integer.parseInt(environment.getProperty("haikong.retry")));
-        haiKongProperties.setVmcconnectUrl(environment.getProperty("haikong.vmcconnect.url"));
-        haiKongProperties.setVmcconnectAppId(environment.getProperty("haikong.vmcconnect.appId"));
-        haiKongProperties.setVmcconnectSecretKey(environment.getProperty("haikong.vmcconnect.secretKey"));
-        haiKongProperties.setRequestRetry(Integer.parseInt(environment.getProperty("haikong.vmcconnect.requestRetry")));
+
+        haiKongProperties.setMemberUrl(environment.getProperty(String.format("haikong.%s.member.url", env)));
+        haiKongProperties.setMemberAppId(environment.getProperty(String.format("haikong.%s.member.appId", env)));
+        haiKongProperties.setMemberAppSecret(environment.getProperty(String.format("haikong.%s.member.appSecret", env)));
+
+        haiKongProperties.setVmcconnectUrl(environment.getProperty(String.format("haikong.%s.vmcconnect.url", env)));
+        haiKongProperties.setVmcconnectAppId(environment.getProperty(String.format("haikong.%s.vmcconnect.appId", env)));
+        haiKongProperties.setVmcconnectSecretKey(environment.getProperty(String.format("haikong.%s.vmcconnect.secretKey", env)));
+        haiKongProperties.setRequestRetry(Integer.parseInt(environment.getProperty(String.format("haikong.%s.vmcconnect.requestRetry", env))));
+
+        String wareAppId = environment.getProperty(String.format("haikong.%s.ware.appId", env));
+        String wareAppSecret = environment.getProperty(String.format("haikong.%s.ware.appSecret", env));
+        String wareCode = environment.getProperty(String.format("haikong.%s.ware.code", env));
+        String companyCode = environment.getProperty(String.format("haikong.%s.ware.companyCode", env));
+        String wareCustomerId = environment.getProperty(String.format("haikong.%s.ware.customerId", env));
+        String wareShopCode = environment.getProperty(String.format("haikong.%s.ware.shopCode", env));
+        String wareSignMethod = environment.getProperty(String.format("haikong.%s.ware.signMethod", env));
+        String wareUrl = environment.getProperty(String.format("haikong.%s.ware.url", env));
+
+        if (!StringUtils.isEmpty(wareAppId)) {
+            haiKongProperties.setWareAppId(wareAppId);
+        }
+
+        if (!StringUtils.isEmpty(wareAppSecret)) {
+            haiKongProperties.setWareAppSecret(wareAppSecret);
+        }
+
+        if (!StringUtils.isEmpty(wareCode)) {
+            haiKongProperties.setWareCode(wareCode);
+        }
+
+        if (!StringUtils.isEmpty(companyCode)) {
+            haiKongProperties.setWareCompanyCode(companyCode);
+        }
+
+        if (!StringUtils.isEmpty(wareCustomerId)) {
+            haiKongProperties.setWareCustomerId(wareCustomerId);
+        }
+
+        if (!StringUtils.isEmpty(wareShopCode)) {
+            haiKongProperties.setWareShopCode(wareShopCode);
+        }
+
+        if (!StringUtils.isEmpty(wareSignMethod)) {
+            haiKongProperties.setWareSignMethod(wareSignMethod);
+        }
+
+        if (!StringUtils.isEmpty(wareUrl)) {
+            haiKongProperties.setWareUrl(wareUrl);
+        }
+
         return haiKongProperties;
     }
 

+ 11 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java

@@ -27,6 +27,17 @@ public class Constants {
 
     /* --------------------------------------------------系统常量----------------------------------------------- */
 
+    /* --------------------------------------------------环境常量----------------------------------------------- */
+
+    public static final String DEV = "dev";
+
+    public static final String TEST = "test";
+
+    public static final String PRE = "pre";
+
+    public static final String PROD = "prod";
+
+    /* --------------------------------------------------环境常量----------------------------------------------- */
 
     /* --------------------------------------------------支付宝常量----------------------------------------------- */
 

+ 45 - 41
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -39,6 +39,7 @@ import com.kmall.manager.manager.redis.JedisUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -135,6 +136,8 @@ public class GoodsServiceImpl implements GoodsService {
 
     @Autowired
     private HaiKongWarehouseTemplate haiKongWarehouseTemplate;
+    @Autowired
+    private Environment environment;
 
     @Override
     public GoodsEntity queryObject(Integer id) {
@@ -1554,6 +1557,8 @@ public class GoodsServiceImpl implements GoodsService {
             return null;
         }
 
+        String env = environment.getProperty("haikong.env");
+
         /*
         * 2. 查询海仓仓库系统,判断库存是否足够
         * */
@@ -1566,50 +1571,49 @@ public class GoodsServiceImpl implements GoodsService {
         String stockNum = goods.getStockNum();
         Integer sellVolume = Objects.isNull(goods.getSellVolume()) ? 1 : goods.getSellVolume();
         if (org.springframework.util.StringUtils.isEmpty(redisCacheWareQuantity)) {
-
-            /* -----------------↓--------------生产请打开注释-------------------↓------------ */
-//            WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO();
-//            List<Criteria> criteriaList = new ArrayList<>();
-//            Criteria criteria = new Criteria();
-//            criteria.setItemId(goods.getWarehouseSysGoodId());
-//            criteria.setItemCode(goods.getSku());
-//            criteria.setOwnerCode(goods.getConsignorSn());
-//            criteria.setInventoryType(Constants.InventoryType.ZP.getType());
-//            criteria.setWarehouseCode(goods.getWarehouseSn());
-//            criteriaList.add(criteria);
-//            wareQueryStockParamDTO.setCriteriaList(criteriaList);
-//            String queryWarehouseStockResponse = null;
-//            try {
-//                queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
-//            } catch (Exception e) {
-//                log.error("sku:【{}】,调用海控仓库系统查询库存出现异常!", sku, e);
-//                throw new ServiceException(String.format("sku:【%s】,调用海控仓库系统查询库存出现异常!", sku));
-//            }
-//            log.info("调用海控仓库系统,请求参数,门店:{}、商品条码:{}、商品编码:{},响应数据:{}", storeId, prodBarcode, sku, queryWarehouseStockResponse);
-//            if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
-//                log.error("调用库存系统接口出现错误!返回结果为空!");
-//                throw new ServiceException("调用库存系统接口出现错误!");
-//            }
-//            WareQueryStockResponseDTO wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
-            /* -----------------↑--------------生产请打开注释------------------↑------------- */
-
-            /* -----------------↓--------------测试数据,生产请注释-------------------↓------------ */
-            WareQueryStockResponseDTO wareQueryStockResponseDTO = new WareQueryStockResponseDTO();
-            wareQueryStockResponseDTO.setCode("0");
-            wareQueryStockResponseDTO.setFlag("success");
-            wareQueryStockResponseDTO.setMessage("");
-            WareQueryStockResponseDTO.WareQueryStockResponseItemDTO wareQueryStockResponseItemDTO = new WareQueryStockResponseDTO.WareQueryStockResponseItemDTO();
-            wareQueryStockResponseItemDTO.setQuantity(3);
-            wareQueryStockResponseItemDTO.setItemCode(sku);
-            wareQueryStockResponseItemDTO.setProduceCode(prodBarcode);
-            List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> wareQueryStockResponseItemDTOS = new ArrayList<>();
-            wareQueryStockResponseItemDTOS.add(wareQueryStockResponseItemDTO);
-            wareQueryStockResponseDTO.setItems(wareQueryStockResponseItemDTOS);
-            /* -----------------↑--------------测试数据,生产请注释------------------↑------------- */
+            WareQueryStockResponseDTO wareQueryStockResponseDTO = null;
+            String queryWarehouseStockResponse = null;
+            // 环境配置
+            if (!org.springframework.util.StringUtils.isEmpty(env) && Constants.PROD.equals(env)) {
+                WareQueryStockParamDTO wareQueryStockParamDTO = new WareQueryStockParamDTO();
+                List<Criteria> criteriaList = new ArrayList<>();
+                Criteria criteria = new Criteria();
+                criteria.setItemId(goods.getWarehouseSysGoodId());
+                criteria.setItemCode(goods.getSku());
+                criteria.setOwnerCode(goods.getConsignorSn());
+                criteria.setInventoryType(Constants.InventoryType.ZP.getType());
+                criteria.setWarehouseCode(goods.getWarehouseSn());
+                criteriaList.add(criteria);
+                wareQueryStockParamDTO.setCriteriaList(criteriaList);
+                try {
+                    queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(wareQueryStockParamDTO);
+                } catch (Exception e) {
+                    log.error("sku:【{}】,调用海控仓库系统查询库存出现异常!", sku, e);
+                    throw new ServiceException(String.format("sku:【%s】,调用海控仓库系统查询库存出现异常!", sku));
+                }
+                log.info("调用海控仓库系统,请求参数,门店:{}、商品条码:{}、商品编码:{},响应数据:{}", storeId, prodBarcode, sku, queryWarehouseStockResponse);
+                if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
+                    log.error("调用库存系统接口出现错误!返回结果为空!");
+                    throw new ServiceException("调用库存系统接口出现错误!");
+                }
+                wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
+            } else {
+                wareQueryStockResponseDTO = new WareQueryStockResponseDTO();
+                wareQueryStockResponseDTO.setCode("0");
+                wareQueryStockResponseDTO.setFlag("success");
+                wareQueryStockResponseDTO.setMessage("");
+                WareQueryStockResponseDTO.WareQueryStockResponseItemDTO wareQueryStockResponseItemDTO = new WareQueryStockResponseDTO.WareQueryStockResponseItemDTO();
+                wareQueryStockResponseItemDTO.setQuantity(3);
+                wareQueryStockResponseItemDTO.setItemCode(sku);
+                wareQueryStockResponseItemDTO.setProduceCode(prodBarcode);
+                List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> wareQueryStockResponseItemDTOS = new ArrayList<>();
+                wareQueryStockResponseItemDTOS.add(wareQueryStockResponseItemDTO);
+                wareQueryStockResponseDTO.setItems(wareQueryStockResponseItemDTOS);
+            }
 
 
             if (Objects.isNull(wareQueryStockResponseDTO)) {
-//            log.error("解析一步达库存系统响应数据出现错误!请求响应结果:{}", queryWarehouseStockResponse);
+                log.error("解析一步达库存系统响应数据出现错误!请求响应结果:{}", queryWarehouseStockResponse);
                 throw new ServiceException("解析一步达库存系统响应数据出现错误!");
             }
 

+ 35 - 27
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -91,6 +91,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -307,6 +308,9 @@ public class OrderServiceImpl implements OrderService {
     private AliCusDeclareBiz aliCusDeclareBiz;
 
     @Autowired
+    private Environment environment;
+
+    @Autowired
     private HaiKongSendOrderInfoRecordService haiKongSendOrderInfoRecordService;
 
     @Autowired
@@ -2500,36 +2504,37 @@ public class OrderServiceImpl implements OrderService {
             StoreEntity store = storeService.queryObject(order.getStore_id().intValue());
 
             processRecordEntity.setPaymentStartTime(new Date());
+
+            String env = environment.getProperty("haikong.env");
             // 判断是微信的支付码还是支付宝的支付码
-            if (parCode.startsWith("28")) {
-                // 支付宝支付
-                try {
-                    AliPay(user, parCode, order, processRecordEntity, orderWXPayRecordCurrent, store);
-                } catch (Exception e) {
-                    LOGGER.error("支付宝支付出现异常!订单号:【{}】", order.getOrder_sn(), e);
-                    throw e;
+            if (!org.springframework.util.StringUtils.isEmpty(env) && Constants.PROD.equals(env)) {
+                if (parCode.startsWith("28")) {
+                    // 支付宝支付
+                    try {
+                        AliPay(user, parCode, order, processRecordEntity, orderWXPayRecordCurrent, store);
+                    } catch (Exception e) {
+                        LOGGER.error("支付宝支付出现异常!订单号:【{}】", order.getOrder_sn(), e);
+                        throw e;
+                    }
+                } else {
+                    // 微信支付
+                    try {
+                        wxPay(user, parCode, resultObj, order, processRecordEntity, orderWXPayRecordCurrent, store);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        throw e;
+                    }
                 }
             } else {
-                // 微信支付
-                try {
-                    wxPay(user, parCode, resultObj, order, processRecordEntity, orderWXPayRecordCurrent, store);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    throw e;
-                }
+                OrderEntity orderEntity = queryObject(order.getId());
+                orderEntity.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_201.getItem()));
+                orderEntity.setPayStatus(Integer.parseInt(Dict.payStatus.item_2.getItem()));
+                orderEntity.setPayTime(new Date());
+                orderDao.update(orderEntity);
             }
 
             processRecordEntity.setPaymentStartTime(new Date());
 
-
-            // TODO 到时候要注释掉,测试用而已
-            OrderEntity orderEntity = queryObject(order.getId());
-            orderEntity.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_201.getItem()));
-            orderEntity.setPayStatus(Integer.parseInt(Dict.payStatus.item_2.getItem()));
-            orderEntity.setPayTime(new Date());
-            orderDao.update(orderEntity);
-
-
             resultObj.put("shopName", store.getStoreName()); // 根据门店编号查询
             resultObj.put("userName", user.getUsername());
 
@@ -2749,10 +2754,13 @@ public class OrderServiceImpl implements OrderService {
 
             JedisUtil.del(Constants.WAREHOUSE_STOCK_MAP_KEY + "_" + storeId);
 
-            // TODO 推单测试用
-//            order.setPayApp("wxpay");
-//            order.setRequest("1111111111111111111");
-//            order.setResponse("2222222222222222222");
+
+            if (org.springframework.util.StringUtils.isEmpty(env) && Constants.TEST.equals(env)) {
+                order.setPayApp("wxpay");
+                order.setRequest("1111111111111111111");
+                order.setResponse("2222222222222222222");
+            }
+
             // 推单
             sendOrderInfoToVmcShop(order, orderGoodsVoList);
 

+ 8 - 8
kmall-admin/src/main/resources/conf/cuspay/cuspay-wx.properties

@@ -7,13 +7,13 @@ wx.payment.query.url=https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdec
 
 # \u5546\u6237\u4FE1\u606F
 # \u5E73\u53F0\u7F16\u53F7
-merchant.plat-sn=146001
+merchant.plat-sn=44048600Y8
 # \u5E73\u53F0\u4E2D\u6587\u540D
-merchant.plat-name=\u4E2D\u7F51\u5546\u57CE
+merchant.plat-name=\u73E0\u6D77\u6D77\u63A7\u79D1\u6280\u6709\u9650\u516C\u53F8
 # \u5546\u6237\u6D77\u5173\u5907\u6848\u7F16\u53F7
-merchant.customs-code=4403160Z3Y
+merchant.customs-code=44048600Y8
 # \u5546\u6237\u6D77\u5173\u5907\u6848\u540D\u79F0
-merchant.customs-name=\u4E2D\u7F51\u79D1\u6280\uFF08\u6DF1\u5733\uFF09\u6709\u9650\u516C\u53F8
+merchant.customs-name=\u73E0\u6D77\u6D77\u63A7\u79D1\u6280\u6709\u9650\u516C\u53F8
 
 
 # \u5B9A\u65F6\u5668\u62A5\u5173\u4E00\u6B21\u533A\u7684\u6570\u636E
@@ -22,11 +22,11 @@ db.wx.declare.count=2
 
 # ccnet\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6\u7684\u503C
 # \u4E2D\u7F51\u5FAE\u4FE1\u516C\u4F17ID
-cus.play.wx.app-id=wxb6b30b1b14ee502a
+cus.play.wx.app-id=wxd3e627dd62d6ff32
 # \u5FAE\u4FE1\u652F\u4ED8\u5546\u6237\u53F7
-cus.play.wx.mch-id=1501125641
-# \u6D77\u5173
-cus.play.wx.customs=SHENZHEN
+cus.play.wx.mch-id=1574349031
+# \u6D77\u5173\uFF0C\u5E7F\u5DDE\uFF08\u603B\u7F72\u7248\uFF09
+cus.play.wx.customs=GUANGZHOU_ZS
 
 # ccnet dev\u914D\u7F6E\u6587\u4EF6\u7684\u503C
 #cus.play.wx.app-id=wx24013b34e349db3c

+ 47 - 9
kmall-admin/src/main/resources/conf/fastdfs.properties

@@ -35,35 +35,73 @@
 #
 ##############\u751F\u4EA7\u73AF\u5883################
 ##\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
+#connect_timeout=30
+##
+###\u7F51\u7EDC\u8D85\u65F6\u65F6\u95F4
+#network_timeout=60
+#
+##\u6587\u4EF6\u8DEF\u5F84
+#base_path=/data/files/
+#
+##tracker server\u662FFastDFS\u6587\u4EF6\u7CFB\u7EDF\u7684\u534F\u8C03\u8005,\u5176\u4E3B\u8981\u4F5C\u7528\u662F\u8D1F\u8F7D\u5747\u8861\u548C\u8C03\u5EA6\u3002
+##Tracker server\u5728\u5185\u5B58\u4E2D\u8BB0\u5F55\u5206\u7EC4\u548CStorage server\u7684\u72B6\u6001\u7B49\u4FE1\u606F\uFF0C\u4E0D\u8BB0\u5F55\u6587\u4EF6\u7D22\u5F15\u4FE1\u606F
+#tracker_server=120.76.26.84:22122
+#
+#log_level=info
+#
+#use_connection_pool = false
+#
+#connection_pool_max_idle_time = 3600
+#
+#load_fdfs_parameters_from_tracker=false
+#
+#use_storage_id = false
+#
+#storage_ids_filename = storage_ids.conf
+#
+##HTTP \u670D\u52A1\u5668\u5730\u5740
+#http.tracket_nginx_addr=120.76.26.84
+#
+##HTTP \u670D\u52A1\u5668\u7AEF\u53E3\u53F7
+#http.tracker_server_port=80
+#
+##\u6587\u4EF6\u4F5C\u8005
+#file.author=kmall-pt
+
+
+
+
+##############\u9884\u53D1\u5E03\u73AF\u5883################
+##\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
 connect_timeout=30
 #
 ##\u7F51\u7EDC\u8D85\u65F6\u65F6\u95F4
 network_timeout=60
 
 #\u6587\u4EF6\u8DEF\u5F84
-base_path=/data/files/
+base_path=/home/logs/
 
 #tracker server\u662FFastDFS\u6587\u4EF6\u7CFB\u7EDF\u7684\u534F\u8C03\u8005,\u5176\u4E3B\u8981\u4F5C\u7528\u662F\u8D1F\u8F7D\u5747\u8861\u548C\u8C03\u5EA6\u3002
 #Tracker server\u5728\u5185\u5B58\u4E2D\u8BB0\u5F55\u5206\u7EC4\u548CStorage server\u7684\u72B6\u6001\u7B49\u4FE1\u606F\uFF0C\u4E0D\u8BB0\u5F55\u6587\u4EF6\u7D22\u5F15\u4FE1\u606F
-tracker_server=120.76.26.84:22122
+tracker_server=14.29.226.8:22122
 
 log_level=info
 
-use_connection_pool = false
+use_connection_pool=false
 
-connection_pool_max_idle_time = 3600
+connection_pool_max_idle_time=3600
 
 load_fdfs_parameters_from_tracker=false
 
-use_storage_id = false
+use_storage_id=false
 
-storage_ids_filename = storage_ids.conf
+storage_ids_filename=storage_ids.conf
 
 #HTTP \u670D\u52A1\u5668\u5730\u5740
-http.tracket_nginx_addr=120.76.26.84
+http.tracket_nginx_addr=14.29.226.8
 
 #HTTP \u670D\u52A1\u5668\u7AEF\u53E3\u53F7
-http.tracker_server_port=80
+http.tracker_server_port=88
 
 #\u6587\u4EF6\u4F5C\u8005
-file.author=kmall-pt
+file.author=kmall-haikong

+ 3 - 1
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -1450,7 +1450,9 @@ function openWebSocket() {
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
         //kmall测试环境
-        webSocket = new WebSocket("ws://183.62.225.124:3080/ws/server/"+storeId);
+        // webSocket = new WebSocket("ws://183.62.225.124:3080/ws/server/"+storeId);
+        // 预发布环境
+        webSocket = new WebSocket("ws://14.29.226.8:8080/ws/server/"+storeId);
         //kmall正式环境
         // webSocket = new WebSocket("ws://8.135.102.238:8080/ws/server/"+storeId);
         //kmall本地环境

+ 14 - 13
kmall-framework/src/test/resources/applicationContext-test.xml

@@ -87,7 +87,8 @@
         &lt;!&ndash;<property name="transactionIsolation" value="TRANSACTION_REPEATABLE_READ"/>&ndash;&gt;
     </bean>-->
 
-    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
+    <!-- 2021-12-15改为配置类:com.kmall.admin.config.datasource.DataSourceConfig-->
+    <!--<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
           init-method="init" destroy-method="close">
         <property name="url">
             <value>${jdbc.url}</value>
@@ -107,35 +108,35 @@
         <property name="proxyFilters">
             <list>
                 <ref bean="stat-filter"/>
-                <!--过滤永真条件 防止注入-->
+                &lt;!&ndash;过滤永真条件 防止注入&ndash;&gt;
                 <ref bean="wall-filter"/>
             </list>
         </property>
         <property name="connectionInitSqls" value="set names utf8mb4;"/>
-        <!--&lt;!&ndash; 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 &ndash;&gt;-->
+        &lt;!&ndash;&lt;!&ndash; 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 &ndash;&gt;&ndash;&gt;
         <property name="timeBetweenEvictionRunsMillis" value="60000" />
-        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
+        &lt;!&ndash; 配置一个连接在池中最小生存的时间,单位是毫秒 &ndash;&gt;
         <property name="minEvictableIdleTimeMillis" value="300000" />
-        <!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 -->
+        &lt;!&ndash; 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 &ndash;&gt;
         <property name="testWhileIdle" value="true" />
-        <!-- 指定每个连接上PSCache的大小   -->
+        &lt;!&ndash; 指定每个连接上PSCache的大小   &ndash;&gt;
         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
-    </bean>
+    </bean>-->
 
-    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
+    <!--<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
         <property name="slowSqlMillis" value="1000"/>
         <property name="logSlowSql" value="true"/>
         <property name="mergeSql" value="true"/>
-    </bean>
+    </bean>-->
 
-    <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
+    <!--<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
         <property name="dbType" value="mysql"/>
         <property name="config" ref="wall-filter-config"/>
-    </bean>
+    </bean>-->
 
-    <bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig">
+    <!--<bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig">
         <property name="multiStatementAllow" value="true"/>
-    </bean>
+    </bean>-->
 
     <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>
     <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">

+ 16 - 15
kmall-manager/src/main/resources/conf/db.properties

@@ -1,22 +1,23 @@
 ########## \u6570\u636E\u5E93\u914D\u7F6E ##########
-
-####========== \u5F00\u53D1\u73AF\u5883 ==========
-jdbc.url=jdbc:mysql://14.29.226.8:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-jdbc.username=root
-jdbc.password=G$Debpk^pn
+# \u73AF\u5883\u914D\u7F6E\uFF1A[dev, prod, pre, test]
+jdbc.env=dev
 ####========== \u6D4B\u8BD5\u73AF\u5883 ==========
-#jdbc.url=jdbc:mysql://192.168.1.202:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-#jdbc.username=root
-#jdbc.password=t2GlpD6z
+jdbc.test.url=jdbc:mysql://14.29.226.8:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+jdbc.test.username=root
+jdbc.test.password=G$Debpk^pn
+####========== \u5F00\u53D1\u73AF\u5883 ==========
+jdbc.dev.url=jdbc:mysql://192.168.1.202:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+jdbc.dev.username=root
+jdbc.dev.password=t2GlpD6z
 ####========== \u751F\u4EA7\u73AF\u5883 ==========
 # \u5F85\u5B9A
-#jdbc.url=jdbc:mysql://:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-#jdbc.username=kmall_cw
-#jdbc.password=eb6zHJg%x3
-#\u672C\u5730\u6D4B\u8BD5\u5E93
-#jdbc.url=jdbc:mysql://192.168.1.202:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-#jdbc.username=root
-#jdbc.password=t2GlpD6z
+jdbc.prod.url=jdbc:mysql://:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+jdbc.prod.username=kmall_cw
+jdbc.prod.password=eb6zHJg%x3
+# \u9884\u53D1\u5E03\u5E93
+jdbc.pre.url=jdbc:mysql://120.76.84.45:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+jdbc.pre.username=root
+jdbc.pre.password=Qq123!..
 
 
 # \u901A\u7528\u914D\u7F6E

+ 1 - 1
kmall-manager/src/main/resources/conf/express-kdn.properties

@@ -1,7 +1,7 @@
 ########## \u5FEB\u9012-\u5FEB\u9012\u9E1F\u914D\u7F6E ##########
 
 # [dev, prod]
-express.kdn.env=prod
+express.kdn.env=dev
 
 #========== \u5F00\u53D1\u73AF\u5883 ==========
 #\u7535\u5546ID

+ 33 - 22
kmall-manager/src/main/resources/conf/haikong.properties

@@ -1,26 +1,37 @@
 # \u683C\u529B\u5730\u4EA7\u4F1A\u5458\u7CFB\u7EDF
-#### \u6D4B\u8BD5\u73AF\u5883
-haikong.member.url=https://test-ump.greedc.com
-haikong.member.appId=mianshuitestzhanxiao
-haikong.member.appSecret=mianshuitestzhanxiao1029
+
+# \u73AF\u5883\uFF1A[test, prod]
+haikong.env=test
 haikong.retry=3
-haikong.ware.url=http://yjapi.highstore.cn:8202/esbcenter/api/esb
-haikong.ware.appId=GREE
-haikong.ware.appSecret=GREE1001
-haikong.ware.customerId=GREE1001
-haikong.ware.shopCode=wxe186e23f5a8f0dbf
-haikong.ware.companyCode=44048600Y8
-haikong.ware.code=20
-haikong.ware.signMethod=md5
 
-#\u514D\u7A0Emall\u7CFB\u7EDF
-haikong.vmcconnect.url=https://testmall.greedc.com/openapi/vmcconnect/json
-haikong.vmcconnect.appId=5
-haikong.vmcconnect.secretKey=GXfc6ZtDlnxHxmmAHvfRfqvrqgfwRiJX
-haikong.vmcconnect.requestRetry=2
-#### \u751F\u4EA7\u73AF\u5883
-#haikong.member.url=https://ump.greedc.com
-#haikong.member.appId=
-#haikong.member.appSecret=
-#haikong.ware.url=
+#### \u4F1A\u5458\u7CFB\u7EDF\u6D4B\u8BD5\u73AF\u5883
+haikong.test.member.url=https://test-ump.greedc.com
+haikong.test.member.appId=mianshuitestzhanxiao
+haikong.test.member.appSecret=mianshuitestzhanxiao1029
+
+#### \u4F1A\u5458\u7CFB\u7EDF\u751F\u4EA7\u73AF\u5883
+haikong.prod.member.url=https://ump.greedc.com
+haikong.prod.member.appId=
+haikong.prod.member.appSecret=
+
+#### \u4ED3\u5E93\u751F\u4EA7\u7CFB\u7EDF\uFF0C\u53EA\u6709\u751F\u4EA7
+haikong.prod.ware.url=http://yjapi.highstore.cn:8202/esbcenter/api/esb
+haikong.prod.ware.appId=GREE
+haikong.prod.ware.appSecret=GREE1001
+haikong.prod.ware.customerId=GREE1001
+haikong.prod.ware.shopCode=wxe186e23f5a8f0dbf
+haikong.prod.ware.companyCode=44048600Y8
+haikong.prod.ware.code=20
+haikong.prod.ware.signMethod=md5
+
+#### \u514D\u7A0Emall\u6D4B\u8BD5\u73AF\u5883
+haikong.test.vmcconnect.url=https://testmall.greedc.com/openapi/vmcconnect/json
+haikong.test.vmcconnect.appId=5
+haikong.test.vmcconnect.secretKey=GXfc6ZtDlnxHxmmAHvfRfqvrqgfwRiJX
+haikong.test.vmcconnect.requestRetry=2
 
+#### \u514D\u7A0Emall\u751F\u4EA7\u73AF\u5883
+haikong.prod.vmcconnect.url=https://mall.greedc.com/openapi/vmcconnect/json
+haikong.prod.vmcconnect.appId=5
+haikong.prod.vmcconnect.secretKey=GXfc6ZtDlnxHxmmAHvfRfqvrqgfwRiJX
+haikong.prod.vmcconnect.requestRetry=2

+ 5 - 3
kmall-manager/src/main/resources/conf/redis.properties

@@ -1,4 +1,4 @@
-########## redis \u914D\u7F6E ##########
+########## redis \u914D\u7F6E ##########1
 
 # [dev, prod]
 redis.env=dev
@@ -6,10 +6,12 @@ redis.env=dev
 # \u5F00\u53D1\u73AF\u5883
 redis.dev.keyPrefix=platform
 # \u6D4B\u8BD5redis\uFF0C\u6709\u5BC6\u7801
-redis.dev.host=183.62.225.124
+#redis.dev.host=183.62.225.124
+# \u9884\u53D1\u5E03\u73AF\u5883
+redis.dev.host=14.29.226.8
 #redis.dev.host=127.0.0.1
 redis.dev.port=6379
-redis.dev.password=Abc-123#*.-
+redis.dev.password=fdsjk337sdb
 redis.dev.pool.maxIdle=200
 redis.dev.pool.maxWait=1000
 redis.dev.pool.maxTotal=10000

+ 1 - 1
kmall-manager/src/main/resources/conf/wx-mp.properties

@@ -16,7 +16,7 @@ wx.dev.paySignKey=Zx1245uytDLliom12345622222222222
 #\u4EA4\u6613\u7C7B\u578B
 wx.dev.tradeType=JSAPI
 #\u8BC1\u4E66\u540D\u79F0\uFF0C\u5BF9\u5E94\u4E0D\u540C\u7684\u5546\u6237\u53F7
-wx.dev.certName=/cert/apiclient_cert.p12
+wx.dev.certName=/app/project/kmall_pt/cert/apiclient_cert.p12
 #\u652F\u4ED8\u56DE\u8C03\u5730\u5740
 wx.dev.notifyUrl=http://qhdswl.f3322.net:9001/platform-framework/api/pay/notify
 #\u83B7\u53D6code\u7684\u8BF7\u6C42\u5730\u5740

+ 12 - 12
kmall-manager/src/main/resources/spring/spring-jdbc.xml

@@ -37,7 +37,7 @@
         &lt;!&ndash;<property name="transactionIsolation" value="TRANSACTION_REPEATABLE_READ"/>&ndash;&gt;
     </bean>-->
 
-    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
+    <!--<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
           init-method="init" destroy-method="close">
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}"/>
@@ -50,31 +50,31 @@
                 <ref bean="wall-filter"/>
             </list>
         </property>
-        <!--&lt;!&ndash; 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 &ndash;&gt;-->
+        &lt;!&ndash;&lt;!&ndash; 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 &ndash;&gt;&ndash;&gt;
         <property name="timeBetweenEvictionRunsMillis" value="60000" />
-        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
+        &lt;!&ndash; 配置一个连接在池中最小生存的时间,单位是毫秒 &ndash;&gt;
         <property name="minEvictableIdleTimeMillis" value="300000" />
-        <!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 -->
+        &lt;!&ndash; 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 &ndash;&gt;
         <property name="testWhileIdle" value="true" />
-        <!-- 指定每个连接上PSCache的大小   -->
+        &lt;!&ndash; 指定每个连接上PSCache的大小   &ndash;&gt;
         <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
-    </bean>
+    </bean>-->
 
     <!-- 慢sql日志 -->
-    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
+    <!--<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
         <property name="slowSqlMillis" value="1000"/>
         <property name="logSlowSql" value="true"/>
         <property name="mergeSql" value="true"/>
-    </bean>
+    </bean>-->
 
-    <bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
+    <!--<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
         <property name="dbType" value="mysql"/>
         <property name="config" ref="wall-filter-config"/>
-    </bean>
+    </bean>-->
 
-    <bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig">
+    <!--<bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig">
         <property name="multiStatementAllow" value="true"/>
-    </bean>
+    </bean>-->
 
     <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>
     <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">

+ 1 - 1
sql/init/other_table.sql

@@ -1353,7 +1353,7 @@ CREATE TABLE `mall_merch_user`  (
   `tstm` datetime(0) DEFAULT NULL COMMENT '时间戳',
   `is_load_goods` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '门店商品是否有修改,  0:否 1:是',
   PRIMARY KEY (`id`) USING BTREE,
-  INDEX `idx_user_id`(`user_id`) USING BTREE
+  INDEX `idx_user_id`(`user_id`) USING BTREE,
   INDEX `idx_store_id`(`store_id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 77671 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户商户关联表' ROW_FORMAT = Compact;