Explorar el Código

Merge remote-tracking branch 'upsteam/master'

zhh hace 3 años
padre
commit
181ecf6ce0
Se han modificado 49 ficheros con 774 adiciones y 632 borrados
  1. 122 0
      kmall-admin/src/main/java/com/kmall/admin/config/datasource/DataSourceConfig.java
  2. 158 0
      kmall-admin/src/main/java/com/kmall/admin/config/datasource/DataSourceProperties.java
  3. 4 3
      kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongSendOrderInfoDetailRecordDao.java
  4. 3 3
      kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongSendOrderInfoRecordDao.java
  5. 1 4
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesScoreDao.java
  6. 0 18
      kmall-admin/src/main/java/com/kmall/admin/dto/ScoreReductionDTO.java
  7. 3 3
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberOrderSyncResendEntity.java
  8. 0 17
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkActivitiesScoreEntity.java
  9. 3 3
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysLoginController.java
  10. 53 7
      kmall-admin/src/main/java/com/kmall/admin/haikong/config/HaiKongConfig.java
  11. 13 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java
  12. 3 3
      kmall-admin/src/main/java/com/kmall/admin/haikong/dto/OrderInfoItemDTO.java
  13. 2 3
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java
  14. 1 2
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberScoreChangeResendTask.java
  15. 3 4
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberSysAccessTokenRefreshTask.java
  16. 9 8
      kmall-admin/src/main/java/com/kmall/admin/haikong/task/SendOrderInfoTask.java
  17. 47 1
      kmall-admin/src/main/java/com/kmall/admin/haikong/utils/Response.java
  18. 45 289
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  19. 82 53
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  20. 5 20
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesScoreServiceImpl.java
  21. 1 9
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesScoreService.java
  22. 0 1
      kmall-admin/src/main/resources/XmlTemplate/ScoreReductionDTOList.xml
  23. 23 11
      kmall-admin/src/main/resources/conf/cuspay/cuspay-wx.properties
  24. 46 8
      kmall-admin/src/main/resources/conf/fastdfs.properties
  25. 1 0
      kmall-admin/src/main/resources/logback.xml
  26. 0 4
      kmall-admin/src/main/resources/mybatis/mapper/haikong/HaikongSendOrderInfoRecordDao.xml
  27. 7 27
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesScoreDao.xml
  28. 2 8
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkactivitiesscore.html
  29. 2 2
      kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html
  30. 1 1
      kmall-admin/src/main/webapp/js/mk/mkactivitiesscore.js
  31. 6 4
      kmall-admin/src/main/webapp/js/sale/sale.js
  32. 2 2
      kmall-admin/src/main/webapp/login.html
  33. BIN
      kmall-admin/src/main/webapp/statics/file/activities_score.xlsx
  34. 2 2
      kmall-admin/src/main/webapp/userLogin.html
  35. 14 13
      kmall-framework/src/test/resources/applicationContext-test.xml
  36. 1 0
      kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusDevProperties.java
  37. 1 0
      kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusProdProperties.java
  38. 1 0
      kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusProperties.java
  39. 1 0
      kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusPropertiesBuilder.java
  40. 1 0
      kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusPropertiesConfiguration.java
  41. 1 1
      kmall-manager/src/main/resources/conf/cus.properties
  42. 16 16
      kmall-manager/src/main/resources/conf/db.properties
  43. 1 1
      kmall-manager/src/main/resources/conf/express-kdn.properties
  44. 33 22
      kmall-manager/src/main/resources/conf/haikong.properties
  45. 9 5
      kmall-manager/src/main/resources/conf/redis.properties
  46. 10 10
      kmall-manager/src/main/resources/conf/wx-mp.properties
  47. 12 12
      kmall-manager/src/main/resources/spring/spring-jdbc.xml
  48. 4 4
      sql/init/other_table.sql
  49. 19 28
      切换环境需要修改的.md

+ 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;
+    }
+}

+ 4 - 3
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongSendOrderInfoDetailRecordDao.java

@@ -2,6 +2,7 @@ package com.kmall.admin.dao.haikong;
 
 
 import com.kmall.admin.entity.haikong.HaiKongSendOrderInfoDetailRecordEntity;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -15,9 +16,9 @@ import java.util.Map;
  */
 public interface HaiKongSendOrderInfoDetailRecordDao {
 
-    HaiKongSendOrderInfoDetailRecordEntity queryObject(Integer id);
+    HaiKongSendOrderInfoDetailRecordEntity queryObject(@Param("id") Integer id);
 
-    List<HaiKongSendOrderInfoDetailRecordEntity> queryListByOrderId(String orderId);
+    List<HaiKongSendOrderInfoDetailRecordEntity> queryListByOrderId(@Param("orderId") String orderId);
 
     List<HaiKongSendOrderInfoDetailRecordEntity> queryList(Map<String, Object> params);
 
@@ -27,7 +28,7 @@ public interface HaiKongSendOrderInfoDetailRecordDao {
 
     int update(HaiKongSendOrderInfoDetailRecordEntity entity);
 
-    int delete(Integer id);
+    int delete(@Param("id") Integer id);
 
     int deleteBatch(List<Integer> idList);
 

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/dao/haikong/HaiKongSendOrderInfoRecordDao.java

@@ -16,9 +16,9 @@ import java.util.Map;
  */
 public interface HaiKongSendOrderInfoRecordDao {
 
-    HaiKongSendOrderInfoRecordEntity queryObjectByOuterOrderNo(String outerOrderNo);
+    HaiKongSendOrderInfoRecordEntity queryObjectByOuterOrderNo(@Param("outerOrderNo") String outerOrderNo);
 
-    HaiKongSendOrderInfoRecordEntity queryObject(Integer id);
+    HaiKongSendOrderInfoRecordEntity queryObject(@Param("id") Integer id);
 
     List<HaiKongSendOrderInfoRecordEntity> queryListByResendStatus();
 
@@ -30,7 +30,7 @@ public interface HaiKongSendOrderInfoRecordDao {
 
     int update(HaiKongSendOrderInfoRecordEntity entity);
 
-    int delete(Integer id);
+    int delete(@Param("id") Integer id);
 
     int deleteBatch(List<Integer> idList);
 

+ 1 - 4
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesScoreDao.java

@@ -19,10 +19,7 @@ public interface MkActivitiesScoreDao extends BaseDao<MkActivitiesScoreEntity> {
 
     MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(@Param("prodBarcode") String prodBarcode,
                                                                             @Param("sku") String sku,
-                                                                            @Param("storeId") Integer storeId,
-                                                                            @Param("nowTime") Date nowTime);
-
-    List<MkActivitiesScoreEntity> queryDetailByTime(@Param("date") Date date);
+                                                                            @Param("storeId") Integer storeId);
 
     /**
      * 查询积分抵扣活动信息

+ 0 - 18
kmall-admin/src/main/java/com/kmall/admin/dto/ScoreReductionDTO.java

@@ -16,8 +16,6 @@ public class ScoreReductionDTO implements Serializable {
     private String prodBarcode;
     private String sku;
     private Integer storeId;
-    private Date deadline;
-    private String deadlineStr;
     private String reject;
 
     public String getProdBarcode() {
@@ -44,22 +42,6 @@ public class ScoreReductionDTO implements Serializable {
         this.storeId = storeId;
     }
 
-    public Date getDeadline() {
-        return deadline;
-    }
-
-    public void setDeadline(Date deadline) {
-        this.deadline = deadline;
-    }
-
-    public String getDeadlineStr() {
-        return deadlineStr;
-    }
-
-    public void setDeadlineStr(String deadlineStr) {
-        this.deadlineStr = deadlineStr;
-    }
-
     public String getReject() {
         return reject;
     }

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/HaiKongMemberOrderSyncResendEntity.java

@@ -44,7 +44,7 @@ public class HaiKongMemberOrderSyncResendEntity {
     /**
      * 会员系统订单id,请求成功后返回
      */
-    private Long memberSysOrderId;
+    private String memberSysOrderId;
 
     /**
      * 重发状态,0:等待重发 1:重发成功 2:重发失败 3:无需重发
@@ -138,11 +138,11 @@ public class HaiKongMemberOrderSyncResendEntity {
         this.createTime = createTime;
     }
 
-    public Long getMemberSysOrderId() {
+    public String getMemberSysOrderId() {
         return memberSysOrderId;
     }
 
-    public void setMemberSysOrderId(Long memberSysOrderId) {
+    public void setMemberSysOrderId(String memberSysOrderId) {
         this.memberSysOrderId = memberSysOrderId;
     }
 

+ 0 - 17
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkActivitiesScoreEntity.java

@@ -36,10 +36,6 @@ public class MkActivitiesScoreEntity implements Serializable {
      */
     private Long mkaId;
     /**
-     * 截止日期
-     */
-    private Date deadline;
-    /**
      * 是否参与,0:参与 1:不参与
      */
     private String reject;
@@ -125,19 +121,6 @@ public class MkActivitiesScoreEntity implements Serializable {
     public Long getMkaId() {
         return mkaId;
     }
-    /**
-     * 设置:截止日期
-     */
-    public void setDeadline(Date deadline) {
-        this.deadline = deadline;
-    }
-
-    /**
-     * 获取:截止日期
-     */
-    public Date getDeadline() {
-        return deadline;
-    }
 
     public String getReject() {
         return reject;

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysLoginController.java

@@ -84,9 +84,9 @@ public class SysLoginController {
         LOGGER.info("获取验证码:"+kaptcha);
         System.out.println(kaptcha);
         JedisUtil.del(Constants.KAPTCHA_SESSION_KEY);
-        if (!captcha.equalsIgnoreCase(kaptcha)) {
-            return R.error("验证码不正确");
-        }
+//        if (!captcha.equalsIgnoreCase(kaptcha)) {
+//            return R.error("验证码不正确");
+//        }
 
         try {
             Subject subject = ShiroUtils.getSubject();

+ 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;
     }
 

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

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

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/OrderInfoItemDTO.java

@@ -37,7 +37,7 @@ public class OrderInfoItemDTO implements Serializable {
     private Integer nums;
 
     @JsonProperty("is_tax")
-    private Boolean tax;
+    private String tax;
 
     @JsonProperty("tax_price")
     private BigDecimal taxPrice;
@@ -122,11 +122,11 @@ public class OrderInfoItemDTO implements Serializable {
         this.nums = nums;
     }
 
-    public Boolean getTax() {
+    public String getTax() {
         return tax;
     }
 
-    public void setTax(Boolean tax) {
+    public void setTax(String tax) {
         this.tax = tax;
     }
 

+ 2 - 3
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberOrderSyncResendTask.java

@@ -40,8 +40,7 @@ public class MemberOrderSyncResendTask {
     @Autowired
     private HaiKongMemberOrderSyncResendService haiKongMemberOrderSyncResendService;
 
-    //    @Scheduled(cron = "0 55 0/2 * * ?")
-//    @Scheduled(cron = "0/20 0/2 * * * ?")
+    @Scheduled(cron = "0 0/2 * * * ?")
     public void resend() {
         // 查询等待发送和发送失败的记录
         List<HaiKongMemberOrderSyncResendEntity> haiKongMemberOrderSyncResendEntities = haiKongMemberOrderSyncResendService.queryListByResendStatus();
@@ -58,7 +57,7 @@ public class MemberOrderSyncResendTask {
             log.info("【重发】请求会员消费订单同步接口!请求体:{}", body);
             try {
                 String responseJson = haiKongMemberTemplate.changeMemberScore(body);
-                Response<Long> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<Long>>() {});
+                Response<String> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<String>>() {});
                 if (Objects.nonNull(response) && response.getSuccess()) {
                     haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData());
                     haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());

+ 1 - 2
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberScoreChangeResendTask.java

@@ -39,8 +39,7 @@ public class MemberScoreChangeResendTask {
     @Autowired
     private HaiKongMemberScoreChangeRecordService haiKongMemberScoreChangeRecordService;
 
-    //    @Scheduled(cron = "0 55 0/2 * * ?")
-    //@Scheduled(cron = "0/20 0/2 * * * ?")
+    @Scheduled(cron = "0 0/2 * * * ?")
     public void resend() {
         // 查询等待发送和发送失败的记录
         List<HaiKongMemberScoreChangeRecordEntity> haiKongMemberScoreChangeRecordEntities = haiKongMemberScoreChangeRecordService.queryListByResendStatus();

+ 3 - 4
kmall-admin/src/main/java/com/kmall/admin/haikong/task/MemberSysAccessTokenRefreshTask.java

@@ -32,8 +32,7 @@ public class MemberSysAccessTokenRefreshTask {
     private HaiKongMemberTemplate haiKongMemberTemplate;
 
 
-//    @Scheduled(cron = "0 55 0/2 * * ?")
-    @Scheduled(cron = "0 0/2 * * * ?")
+    @Scheduled(cron = "0/30 * * * * ?")
     public void refresh() {
         String refreshToken = JedisUtil.get(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY);
         String accessToken = JedisUtil.get(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
@@ -51,7 +50,7 @@ public class MemberSysAccessTokenRefreshTask {
             } catch (Exception e) {
                 log.error(e.getMessage() + "====>", e);
             }
-        } else {
+        } else if (StringUtils.isEmpty(accessToken) && !StringUtils.isEmpty(refreshToken)) {
             try {
                 String refreshAccessTokenJson = haiKongMemberTemplate.refreshAccessToken(refreshToken);
                 handleResponse(refreshAccessTokenJson, a);
@@ -74,7 +73,7 @@ public class MemberSysAccessTokenRefreshTask {
         if (Objects.nonNull(response) && response.getSuccess()) {
             AccessTokenDTO accessTokenDTO = response.getData();
             JedisUtil.del(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
-            JedisUtil.set(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY, JacksonUtil.toJson(accessTokenDTO), (60 * 60 * 2) - (60 * 2));
+            JedisUtil.set(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY, JacksonUtil.toJson(accessTokenDTO), (60 * 60 * 2) - (60 * 10));
             if (a) {
                 JedisUtil.del(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY);
                 JedisUtil.set(Constants.MEMBER_SYS_REFRESH_TOKEN_REDIS_KEY, Optional.ofNullable(accessTokenDTO.getRefreshToken()).orElse(""), (60 * 60 * 24 * 7));

+ 9 - 8
kmall-admin/src/main/java/com/kmall/admin/haikong/task/SendOrderInfoTask.java

@@ -15,6 +15,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -43,7 +44,7 @@ public class SendOrderInfoTask {
     @Autowired
     private VmcShopTemplate vmcShopTemplate;
 
-    //    @Scheduled(cron = "0/20 0/2 * * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void resend() {
         // 查询等待发送和发送失败的记录
         List<HaiKongSendOrderInfoRecordEntity> haiKongSendOrderInfoRecordEntities = haiKongSendOrderInfoRecordService.queryListByResendStatus();
@@ -71,7 +72,7 @@ public class SendOrderInfoTask {
             List<OrderInfoItemDTO> dtoList = detailRecordEntities.stream().map(detailRecord -> {
                 OrderInfoItemDTO orderInfoItemDTO = new OrderInfoItemDTO();
                 BeanUtils.copyProperties(detailRecord, orderInfoItemDTO);
-                orderInfoItemDTO.setTax(Boolean.getBoolean(detailRecord.getIsTax()));
+                orderInfoItemDTO.setTax(detailRecord.getIsTax());
                 return orderInfoItemDTO;
             }).collect(Collectors.toList());
 
@@ -81,23 +82,23 @@ public class SendOrderInfoTask {
             sendOrderToVmcShopDTO.setOrderInfo(orderInfoDTO);
 
             String body = JacksonUtil.toJson(sendOrderToVmcShopDTO);
-            log.info("【重发】请求会员消费订单同步接口!请求体:{}", body);
+            log.info("【重发】请求免税mall创建订单接口!请求体:{}", body);
             try {
                 String responseJson = vmcShopTemplate.sendOrder(body);
-                Response<Long> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<Long>>() {});
-                if (Objects.nonNull(response) && response.getSuccess()) {
+                Response<String> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<String>>() {});
+                if (Objects.nonNull(response) && !"failure".equals(response.getResult())) {
                     haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
                     successList.add(haiKongSendOrderInfoRecordEntity);
-                    log.info("【重发】请求会员消费订单同步接口成功!响应数据:{}", responseJson);
+                    log.info("【重发】请求免税mall创建订单接口成功!响应数据:{}", responseJson);
                 } else {
                     haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
                     failedList.add(haiKongSendOrderInfoRecordEntity);
-                    log.error("【重发】请求会员消费订单同步接口失败!响应:{}", responseJson);
+                    log.error("【重发】请求免税mall创建订单接口失败!响应:{}", responseJson);
                 }
             } catch (Exception e) {
                 haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
                 failedList.add(haiKongSendOrderInfoRecordEntity);
-                log.error("【重发】请求会员消费订单同步接口失败!异常:", e);
+                log.error("【重发】请求免税mall创建订单接口失败!异常:", e);
             }
         });
 

+ 47 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/Response.java

@@ -25,6 +25,14 @@ public class Response<T> {
 
     private Integer totalCount;
 
+    private Integer code;
+
+    private String result;
+
+    private String message;
+
+    private String ext;
+
     public Boolean getSuccess() {
         return success;
     }
@@ -81,6 +89,38 @@ public class Response<T> {
         this.totalCount = totalCount;
     }
 
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getExt() {
+        return ext;
+    }
+
+    public void setExt(String ext) {
+        this.ext = ext;
+    }
+
     @Override
     public String toString() {
         return "Response{" +
@@ -91,6 +131,10 @@ public class Response<T> {
                 ", pageSize=" + pageSize +
                 ", pageNo=" + pageNo +
                 ", totalCount=" + totalCount +
+                ", code=" + code +
+                ", result='" + result + '\'' +
+                ", message='" + message + '\'' +
+                ", ext='" + ext + '\'' +
                 '}';
     }
 
@@ -101,7 +145,9 @@ public class Response<T> {
         /**
          * 无效的refresh_token
          */
-        INVALID_REFRESH(1005, "无效的refresh_token");
+        INVALID_REFRESH(1005, "无效的refresh_token"),
+        PRODUCT_NON_EXISTS(10500, "商品不存在"),
+        ;
 
         /**
          * 错误码

+ 45 - 289
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("解析一步达库存系统响应数据出现错误!");
             }
 
@@ -1668,260 +1672,12 @@ public class GoodsServiceImpl implements GoodsService {
         /**
          * 1.首先根据商品条码跟门店id查询是否有库存,没库存直接返回
          */
-
         goods.setDiscountedPrice(new BigDecimal(0));
         BigDecimal retailPrice = goods.getRetailPrice();
 
-
         goods.setActualPaymentAmount(retailPrice.setScale(2,RoundingMode.HALF_UP));
 
         Map<String,Object> skuActivitiesMap = new HashMap<>();
-
-        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
-        /**
-         * 2.查询当前时间,该门店是否有活动,如果有活动,查询开启了哪些营销方式
-         * 参数: 当前时间  门店id
-         */
-        List<MkActivitiesEntity> mkActivitiesEntityList = mkActivitiesService.queryByNow(storeId,format.format(new Date()));
-
-        if(mkActivitiesEntityList == null || mkActivitiesEntityList.size() == 0){
-            // 计算税费
-            GoodsEntity goodsEntity = goodsDao.queryByBarcodeAndSku(prodBarcode, goods.getGoodsSn());
-            BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity,goods.getActualPaymentAmount(),this).setScale(3,RoundingMode.HALF_UP);
-            goods.setGoodstaxes(tax.toString());
-            skuActivitiesMap.put("goods",goods);
-            return skuActivitiesMap;
-        }
-
-
-
-        // 遍历活动集合,查询有哪些活动是开启的
-        boolean daily = false,coupon = false,combinationPrice = false
-                ,discount = false,fullGift = false,fullReduction = false
-                ,getOneFree = false,promotion = false,halfPrice = false;
-
-        List<String> topicList = new ArrayList<>(); // 记录有哪些营销活动的topic
-        Map<String,String> mkaIdMap = new HashMap<>(); // 记录topic跟mkaId的关系
-        // 将所有的营销活动新增到list中
-        for(MkActivitiesEntity mkActivitiesEntity : mkActivitiesEntityList){
-            topicList.add(mkActivitiesEntity.getMkaTopic());
-            String mkaId = mkaIdMap.putIfAbsent(mkActivitiesEntity.getMkaTopic(), mkActivitiesEntity.getMkaId()+"");
-            if(StringUtils.isNotEmpty(mkaId)){
-//                mkaId = "'"+mkaId + "','" + mkActivitiesEntity.getMkaId()+"'";
-                mkaId += String.format(",%s",mkActivitiesEntity.getMkaId());
-                mkaIdMap.put(mkActivitiesEntity.getMkaTopic(),mkaId);
-            }
-        }
-        // 判断有哪些营销活动
-        if(topicList.contains("zhjsp")) // 组合价
-            combinationPrice = true;
-        if(topicList.contains("dz")) // 打折
-            discount = true;
-        if(topicList.contains("mz")) //满赠
-            fullGift = true;
-        if(topicList.contains("mj"))  // 满减
-            fullReduction = true;
-        if(topicList.contains("mysy")) // 买一送一
-            getOneFree = true;
-        if(topicList.contains("rchd")) // 日常活动
-            daily = true;
-        if(topicList.contains("yhq")) // 优惠券
-            coupon = true;
-        if(topicList.contains("lscx")) // 临时促销
-            promotion = true;
-        if(topicList.contains("drjbj"))
-            halfPrice = true;
-
-
-        // 获取未优惠前的商品价格
-        retailPrice = goods.getRetailPrice();
-
-
-        // 根据条码查询商品品牌名称 mall_brand  mall_product_store_rela  mall_goods
-        String brandName = goods.getBrand();
-
-        /**
-         * 优先级:临时促销 》买一送一=满赠 》 组合价=日常活动 》 打折=满减 》 优惠券
-         */
-
-        /**
-         * 组合价的做法就是将参与组合的条码带到收银端
-         * 现根据营销活动id跟条形码,查询有哪些参与该条码组合的商品
-         *
-         *
-         * TODO
-         */
-        if(combinationPrice){
-            String mkaId = mkaIdMap.get("zhjsp");
-            Map<String,Object> param = new HashMap<>();
-            param.put("mkaId",mkaId);
-            param.put("prodBarcode",prodBarcode);
-            List<MkActivitiesCombinationPriceEntity> combinationPriceList = combinationPriceService.queryList(param);
-            if(combinationPriceList != null && combinationPriceList.size() > 0) {
-                Map<String, List<MkActivitiesCombinationPriceEntity>> collect =
-                        combinationPriceList.stream().collect(Collectors.groupingBy(MkActivitiesCombinationPriceEntity::getCombinationType));
-
-                skuActivitiesMap.put("zhjsp",collect);
-            }
-        }
-
-
-
-        format = new SimpleDateFormat("yyyy-MM-dd");
-        String nowTime = format.format(new Date());
-        /**
-         * 满减可能是跟着条码,也可能跟着品牌
-         * 根据商品品牌跟商品条码去查询是否有优惠金额
-         *
-         * 满足金额   购买商品条码   赠品条码
-         *
-         */
-        Map<String,Object> fullReductionMap = new HashMap<>();
-        if(fullReduction){
-            String mkaId = mkaIdMap.get("mj");
-            MkActivitiesFullReductionEntity fullReductionEntity = fullReductionService.queryByCodeOrBrand(mkaId,prodBarcode,brandName,nowTime);
-            if(fullReductionEntity != null) {
-                if(!StringUtils.isNullOrEmpty(fullReductionEntity.getProductBrand())){
-                    // 跟着品牌走
-                    fullReductionMap.put(brandName,fullReductionEntity);
-                }else{
-                    // 跟着条码走
-                    fullReductionMap.put(fullReductionEntity.getBarcode(), fullReductionEntity);
-                }
-                skuActivitiesMap.put("mj",fullReductionMap);
-            }
-        }
-
-        /**
-         * 满赠可能是跟着条码,也可能跟着品牌
-         * 根据商品品牌跟商品条码去查询是否有满赠
-         * 1.先扫买的商品,然后查询出赠送的商品条码
-         * 2.先扫赠的商品,然后查询出符合条件的商品条码或者品牌
-         * 满足的金额   购买的商品条码或者品牌   赠送的商品条码
-         * TODO
-         */
-        Map<String,Object> fullGiftMap = new HashMap<>();
-        if(fullGift){
-            String mkaId = mkaIdMap.get("mz");
-            MkActivitiesFullGiftEntity giftEntity = fullGiftService.queryByCodeOrBrand(mkaId,prodBarcode,brandName,nowTime);
-            if(giftEntity != null) {
-                if(giftEntity.getProductBrand() != null){
-                    // 跟着品牌走
-                    fullGiftMap.put(brandName,giftEntity);
-                }else{
-                    // 跟着条码走
-                    fullGiftMap.put(giftEntity.getBarcode(), giftEntity);
-                }
-                skuActivitiesMap.put("mz",fullGiftMap);
-            }
-        }
-
-        /**
-         * 买一送一可能是跟着条码,也可能跟着品牌
-         * 根据商品品牌跟商品条码去查询是否有送的商品
-         * 有两个场景
-         * 1.先扫买的商品,然后查询出赠送的商品条码
-         * 2.先扫赠的商品,然后查询出符合条件的商品条码或者品牌
-         * 所以就需要一个map
-         * key为购买的商品条码或者商品品牌  value为赠送的商品条码
-         * 但是品牌是根据条码查询的,所以最终map里面的结构是
-         * key 商品条码 value 赠品条码
-         */
-        if(getOneFree){
-            String mkaId = mkaIdMap.get("mysy");
-            MkActivitiesGetOneFreeGoodsEntity getOneFreeGoodsEntity = getOneFreeGoodsService.queryByCodeOrBrand(mkaId,prodBarcode,brandName);
-            if(getOneFreeGoodsEntity != null){
-                if("无".equals(getOneFreeGoodsEntity.getProductBrand())){
-                    getOneFreeGoodsEntity.setBrand(false);
-                    skuActivitiesMap.put("mysy",getOneFreeGoodsEntity);
-                }else{
-                    getOneFreeGoodsEntity.setBrand(true);
-                    skuActivitiesMap.put("mysy",getOneFreeGoodsEntity);
-                }
-
-            }
-        }
-
-
-        // 第二份半价
-        if(halfPrice){
-            String mkaId = mkaIdMap.get("drjbj");
-            MkActivitiesHalfPriceEntity activitiesHalfPriceEntity = halfPriceService.queryByCodeOrBrand(mkaId,prodBarcode);
-            if(activitiesHalfPriceEntity != null){
-                skuActivitiesMap.put("drjbj",activitiesHalfPriceEntity);
-
-            }
-
-        }
-
-
-        // --------------------------------------------------------------------------------------
-
-        /**
-         * 优惠券跟着条形码走,一般是设置一个标识,然后最后输入优惠券码后,减扣对应的标识,所以返回一个map数组
-         */
-
-        if(coupon){
-            String mkaId = mkaIdMap.get("yhq");
-            MkActivitiesCouponEntity couponEntity =  couponService.queryByBarCode(mkaId,prodBarcode,nowTime);
-            if(couponEntity != null){ // 优惠券码,优惠金额
-                Map<String,Object> returnMap = new HashMap<>();
-                returnMap.put(couponEntity.getCouponSn() , couponEntity.getCouponPrice());
-                skuActivitiesMap.put("yhq",returnMap);
-            }
-        }
-
-
-        /**
-         * 打折的价格是与条形码对应的,所以需要根据条形码和营销方式id去查询活动价格
-         */
-
-        if(discount){
-            String mkaId = mkaIdMap.get("dz");
-            MkActivitiesDiscountEntity discountEntity =  discountService.queryByBarCode(mkaId,prodBarcode);
-            // TODO 可能会直接替代产品价格
-            if (discountEntity != null) {
-                goods.setActualPaymentAmount(discountEntity.getActivityPrice());
-                goods.setRetailPrice(discountEntity.getActivityPrice());
-
-                goods.setActivity("打折");
-            }
-        }
-
-
-        /**
-         * 日常活动跟着条形码走,优先级比临时促销低,但是高于正常价格
-         */
-        if(daily){
-            String mkaId = mkaIdMap.get("rchd");
-            MkDailyActivitiesEntity dailyActivitiesEntity = dailyActivitiesService.queryByBarCode(mkaId,prodBarcode);
-            if(dailyActivitiesEntity != null){
-                goods.setActualPaymentAmount(dailyActivitiesEntity.getActivityPrice());
-                goods.setRetailPrice(dailyActivitiesEntity.getActivityPrice());
-
-                goods.setActivity("日常活动");
-
-            }
-        }
-
-
-        /**
-         * 临时促销跟着条形码走,优先级应该最高,所以排到了最下面
-         */
-        if(promotion){
-            String mkaId = mkaIdMap.get("lscx");
-            MkActivitiesPromotionEntity promotionEntity = promotionService.queryByBarCode(mkaId,prodBarcode);
-            // 如果该商品存在临时促销,直接替换活动价格
-            if(promotionEntity != null){
-                goods.setActualPaymentAmount(promotionEntity.getActivityPrice());
-                goods.setRetailPrice(promotionEntity.getActivityPrice());
-
-                goods.setActivity("临时促销");
-
-            }
-        }
-
         // 计算税费
         GoodsEntity goodsEntity = goodsDao.queryByBarcodeAndSku(prodBarcode, goods.getGoodsSn());
         BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity,goods.getActualPaymentAmount(),this).setScale(3,RoundingMode.HALF_UP);

+ 82 - 53
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
@@ -638,6 +642,9 @@ public class OrderServiceImpl implements OrderService {
         mailInfo.setShopTel(storeEntity.getTelephoneNumber());
         AddressEntity addressEntity = addressDao.queryStoreAddress(storeEntity.getId(),Dict.addressStatus.item_1.getItem());
         // 发货人
+        if (Objects.isNull(addressEntity)) {
+            throw new ServiceException("请先配置发货地址!");
+        }
         mailInfo.setSenderTel(addressEntity.getTelNumber());
         mailInfo.setSenderName(addressEntity.getSenderName());
         mailInfo.setSenderProvince(addressEntity.getProvinceName());
@@ -2171,10 +2178,20 @@ public class OrderServiceImpl implements OrderService {
                 queryGoodsVo.setSellVolume((Integer) map.get("sellVolume"));
                 queryGoodsVo.setRetailPrice(new BigDecimal(String.valueOf(map.get("retailPrice"))));
                 queryGoodsVo.setGoodsTaxes(new BigDecimal(String.valueOf(map.get("goodstaxes"))));
-                queryGoodsVo.setDisCountedPrice(new BigDecimal(String.valueOf(map.get("discountedPrice"))));
+                Object discountedPriceObj = map.get("discountedPrice");
+                BigDecimal discountedPrice = BigDecimal.ZERO;
+                if (Objects.nonNull(discountedPriceObj)) {
+                    discountedPrice = new BigDecimal(String.valueOf(discountedPriceObj));
+                }
+                queryGoodsVo.setDisCountedPrice(discountedPrice);
                 queryGoodsVo.setTotalPrice(new BigDecimal(String.valueOf(map.get("actualPaymentAmount"))));
                 queryGoodsVo.setActivity((String) map.get("activity"));
-                queryGoodsVo.setDeductionScore((Integer) map.get("deductionScore"));
+                Object deductionScoreObj = map.get("deductionScore");
+                Integer deductionScore = 0;
+                if (Objects.nonNull(deductionScoreObj)) {
+                    deductionScore = (Integer) deductionScoreObj;
+                }
+                queryGoodsVo.setDeductionScore(deductionScore);
                 Object deductionPriceObj = map.get("deductionPrice");
                 BigDecimal deductionPrice = BigDecimal.ZERO;
                 if (Objects.nonNull(deductionPriceObj)) {
@@ -2278,11 +2295,9 @@ public class OrderServiceImpl implements OrderService {
             ListUtils listUtils = BeanUtils.instantiate(ListUtils.class);
             listUtils.copyList(goodsEntityList, queryGoodsVOList);
 
-            // 商品总重量
-            BigDecimal weight = new BigDecimal(0);
             //生成商户订单号
             SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
-            String orderSn = "ZWCW" + format.format(new Date()) + CommonUtil.generateOrderNumber();
+            String orderSn = "ZMHK" + format.format(new Date()) + CommonUtil.generateOrderNumber();
             // 检查库存和更新库存
             for (QueryGoodsVO goodsDto : queryGoodsVOList) {
                 // 要购买的数量
@@ -2500,36 +2515,39 @@ 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")) {
+                    // 支付宝支付
+                    throw new ServiceException("目前暂不支持支付宝付款!请使用微信进行支付!");
+                    /*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 +2767,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);
 
@@ -2800,9 +2821,9 @@ public class OrderServiceImpl implements OrderService {
 
             String response = vmcShopTemplate.sendOrder(body);
 
-            com.kmall.admin.haikong.utils.R<String> r = JacksonUtil.fromListJson(response, new TypeReference<com.kmall.admin.haikong.utils.R<String>>() {});
+            Response<String> r = JacksonUtil.fromListJson(response, new TypeReference<Response<String>>() {});
 
-            if (Objects.nonNull(r) && r.getCode() == 0) {
+            if (Objects.nonNull(r) && !"failure".equals(r.getResult())) {
                 pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_0.getStatus());
                 haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
                 LOGGER.info("推送订单到免税mall成功!响应结果:{}", response);
@@ -2856,7 +2877,11 @@ public class OrderServiceImpl implements OrderService {
      */
     private SeaportInfoDTO wrapSeaportInfo(OrderVo order) {
         SeaportInfoDTO seaportInfoDTO = new SeaportInfoDTO();
-        seaportInfoDTO.setSeaportCode("4600");
+        String value = sysConfigDao.queryByKey(Constants.CUSTOMS_PORT_CODE);
+        if (org.springframework.util.StringUtils.isEmpty(value)) {
+            throw new ServiceException("未配置海关口岸代码!配置方式:【系统管理】->【系统参数】");
+        }
+        seaportInfoDTO.setSeaportCode(value);
         seaportInfoDTO.setPlatform("1");
         seaportInfoDTO.setIdentityCard(order.getIdCard());
         seaportInfoDTO.setIdentityName(order.getPay_name());
@@ -2896,7 +2921,7 @@ public class OrderServiceImpl implements OrderService {
         orderInfoItemDTO.setItemcode(orderGoodsVo.getSku());
         orderInfoItemDTO.setAmount(orderGoodsVo.getActualPaymentAmount());
         orderInfoItemDTO.setNums(orderGoodsVo.getNumber());
-        orderInfoItemDTO.setTax(true);
+        orderInfoItemDTO.setTax("true");
         orderInfoItemDTO.setTaxPrice(orderGoodsVo.getTaxPrice());
         return orderInfoItemDTO;
     }
@@ -3224,7 +3249,7 @@ public class OrderServiceImpl implements OrderService {
             // 发送请求
             String memberOrderSyncResponseJson = haiKongMemberTemplate.memberOrderSync(body);
             LOGGER.info("请求会员系统同步消费订单接口!响应:{}", memberOrderSyncResponseJson);
-            Response<Long> response = JacksonUtil.fromListJson(memberOrderSyncResponseJson, new TypeReference<Response<Long>>() {});
+            Response<String> response = JacksonUtil.fromListJson(memberOrderSyncResponseJson, new TypeReference<Response<String>>() {});
             if (Objects.nonNull(response) && response.getSuccess()) {
                 haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData());
                 haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
@@ -4668,11 +4693,13 @@ public class OrderServiceImpl implements OrderService {
                 .filter(m -> Constants.RejectStatus.ALLOW.getCode().equals(m.getReject()))
                 .map(MkActivitiesScoreEntity::getSku)
                 .collect(Collectors.toList());
+        LOGGER.info("参与积分抵扣的sku集合:{}", scoreDeductionAllowSkuList);
         // 不参与积分抵扣的sku集合,如果该list不为空,则默认其余的sku参与积分抵扣
         List<String> scoreDeductionRejectSkuList = mkActivitiesScoreEntities.stream()
                 .filter(m -> Constants.RejectStatus.REJECT.getCode().equals(m.getReject()))
                 .map(MkActivitiesScoreEntity::getSku)
                 .collect(Collectors.toList());
+        LOGGER.info("不参与积分抵扣的sku集合:{}", scoreDeductionRejectSkuList);
 
         if (!CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && !CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
             LOGGER.error("积分抵扣表中既有参与又有不参与!与需求不符!");
@@ -4688,12 +4715,7 @@ public class OrderServiceImpl implements OrderService {
         for (GoodsDetailsDto goodsDetailsDto : goodsDetailsDtos) {
             String sku = goodsDetailsDto.getGoodsSn();
             if (!promotionSkuList.contains(sku)) {
-                if (CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && !CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
-                    if (!scoreDeductionRejectSkuList.contains(sku)) {
-                        BigDecimal skuActualPaymentAmount = goodsDetailsDto.getActualPaymentAmount();
-                        skuTotalPrice = skuTotalPrice.add(skuActualPaymentAmount);
-                    }
-                } else if (!CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
+                if (!CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
                     if (scoreDeductionAllowSkuList.contains(sku)) {
                         BigDecimal skuActualPaymentAmount = goodsDetailsDto.getActualPaymentAmount();
                         skuTotalPrice = skuTotalPrice.add(skuActualPaymentAmount);
@@ -4720,21 +4742,28 @@ public class OrderServiceImpl implements OrderService {
                 // 过滤掉参与过限时特价并且与积分抵扣互斥的sku,以及未参加积分抵扣活动的sku
                 goodsDetailsDtos = goodsDetailsDtos.stream().filter(goodsDetailsDto -> {
                     String sku = goodsDetailsDto.getSku();
+
+                    // 满赠商品不参与积分分摊计算
+                    if (Constants.ActivityTopicEnum.MZ.getTopicName().equals(goodsDetailsDto.getActivity())) {
+                        return false;
+                    }
+                    // 如果临时促销中定义了该sku不参与,那么根据优先级不管该商品在积分抵扣中如何设置,都认定为不参与
                     if (!promotionSkuList.contains(sku)) {
                         // 如果导入的商品都为不参与,则其余的商品都默认参与积分抵扣活动
-                        if (CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && !CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
-                            if (!scoreDeductionRejectSkuList.contains(sku)) {
-                                return true;
-                            }
+                        if (CollectionUtils.isEmpty(scoreDeductionAllowSkuList) &&
+                                !CollectionUtils.isEmpty(scoreDeductionRejectSkuList) &&
+                                !scoreDeductionRejectSkuList.contains(sku)) {
+                            return true;
+                        }
                         // 如果导入的商品都为参与,则默认其余商品不参与
-                        } else if (!CollectionUtils.isEmpty(scoreDeductionAllowSkuList) && CollectionUtils.isEmpty(scoreDeductionRejectSkuList)) {
-                            if (scoreDeductionAllowSkuList.contains(sku)) {
-                                return true;
-                            }
+                        if (!CollectionUtils.isEmpty(scoreDeductionAllowSkuList) &&
+                                CollectionUtils.isEmpty(scoreDeductionRejectSkuList) &&
+                                scoreDeductionAllowSkuList.contains(sku)) {
+                            return true;
                         }
                     }
-                    // 满赠商品不参与积分分摊计算
-                    return !Constants.ActivityTopicEnum.MZ.getTopicName().equals(goodsDetailsDto.getActivity());
+                    // 临时促销中有这个sku,说明不参与积分抵扣
+                    return false;
                 }).collect(Collectors.toList());
                 // 系统设置的最大抵扣比例(最多能抵扣订单金额的比例),在系统管理的系统参数中设置,KEY为 HAIKONG_MEMBER_MAX_SCORE_RATIO
                 String scoreRatioStr = sysConfigDao.queryByKey(Constants.HAIKONG_MEMBER_MAX_SCORE_RATIO);

+ 5 - 20
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesScoreServiceImpl.java

@@ -112,16 +112,13 @@ public class MkActivitiesScoreServiceImpl implements MkActivitiesScoreService {
                 builder.put("sku", "商品SKU");
                 builder.put("prodBarcode", "商品条码");
                 builder.put("reject", "是否参与");
-                builder.put("deadlineStr", "截止日期");
 
                 R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
                 if (Integer.valueOf(r.get("code").toString()) != 0) {
                     throw new RRException(r.get("msg").toString());
                 }
 
-                Date nowTime = new Date();
-
-                MkActivitiesScoreEntity mkActivitiesScoreEntity = queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(scoreReductionDTO.getProdBarcode(), scoreReductionDTO.getSku(), scoreReductionDTO.getStoreId(), nowTime);
+                MkActivitiesScoreEntity mkActivitiesScoreEntity = queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(scoreReductionDTO.getProdBarcode(), scoreReductionDTO.getSku(), scoreReductionDTO.getStoreId());
 
                 if (Objects.nonNull(mkActivitiesScoreEntity)) {
                     throw new RRException("该商品已经参与本次活动,商品{"+mkActivitiesScoreEntity.getProdBarcode()+"},sku,{"+mkActivitiesScoreEntity.getSku()+"}", 500);
@@ -130,8 +127,8 @@ public class MkActivitiesScoreServiceImpl implements MkActivitiesScoreService {
                 MkActivitiesScoreEntity scoreEntity = new MkActivitiesScoreEntity();
                 BeanUtils.copyProperties(scoreReductionDTO, scoreEntity);
                 Date updateTime = new Date();
-                DateTime dateTime = DateUtil.parseDate(scoreReductionDTO.getDeadlineStr());
-                scoreEntity.setDeadline(dateTime);
+//                DateTime dateTime = DateUtil.parseDate(scoreReductionDTO.getDeadlineStr());
+//                scoreEntity.setDeadline(dateTime);
                 scoreEntity.setMkaId(Long.parseLong(mkaId));
                 scoreEntity.setCreaterSn("0");
                 scoreEntity.setCreateTime(updateTime);
@@ -153,12 +150,11 @@ public class MkActivitiesScoreServiceImpl implements MkActivitiesScoreService {
      * @param prodBarcode 条码
      * @param sku         sku
      * @param storeId     门店id
-     * @param nowTime     当前时间
      * @return 实体
      */
     @Override
-    public MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(String prodBarcode, String sku, Integer storeId, Date nowTime) {
-        return mkActivitiesScoreDao.queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(prodBarcode, sku, storeId, nowTime);
+    public MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(String prodBarcode, String sku, Integer storeId) {
+        return mkActivitiesScoreDao.queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(prodBarcode, sku, storeId);
     }
 
     /**
@@ -173,17 +169,6 @@ public class MkActivitiesScoreServiceImpl implements MkActivitiesScoreService {
     }
 
     /**
-     * 查询当前时间的参与积分抵扣的sku
-     *
-     * @param date 当前时间
-     * @return sku
-     */
-    @Override
-    public List<MkActivitiesScoreEntity> queryDetailByTime(Date date) {
-        return mkActivitiesScoreDao.queryDetailByTime(date);
-    }
-
-    /**
      * 查询积分抵扣活动信息
      *
      * @param mkaIdList 活动id集合

+ 1 - 9
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesScoreService.java

@@ -86,10 +86,9 @@ public interface MkActivitiesScoreService {
      * @param prodBarcode   条码
      * @param sku           sku
      * @param storeId       storeId
-     * @param nowTime       当前时间
      * @return              实体
      */
-    MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(String prodBarcode, String sku, Integer storeId, Date nowTime);
+    MkActivitiesScoreEntity queryEntityByProdBarcodeAndSkuAndStoreIdAndTime(String prodBarcode, String sku, Integer storeId);
 
     /**
      * 批量新增
@@ -98,13 +97,6 @@ public interface MkActivitiesScoreService {
     void saveBatch(List<MkActivitiesScoreEntity> mkActivitiesScoreEntities);
 
     /**
-     * 查询当前时间的参与积分抵扣的sku
-     * @param date  当前时间
-     * @return      sku
-     */
-    List<MkActivitiesScoreEntity> queryDetailByTime(Date date);
-
-    /**
      * 查询积分抵扣活动信息
      * @param mkaIdList 活动id集合
      * @return          活动

+ 0 - 1
kmall-admin/src/main/resources/XmlTemplate/ScoreReductionDTOList.xml

@@ -9,7 +9,6 @@
                 <mapping row="1" col="1">ScoreReductionDTO.prodBarcode</mapping>
                 <mapping row="1" col="2">ScoreReductionDTO.sku</mapping>
                 <mapping row="1" col="3">ScoreReductionDTO.reject</mapping>
-                <mapping row="1" col="4">ScoreReductionDTO.deadlineStr</mapping>
             </section>
             <loopbreakcondition>
                 <rowcheck offset="0">

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

@@ -5,28 +5,40 @@
 wx.payment.declare.url=https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder
 wx.payment.query.url=https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclarequery
 
-# \u5546\u6237\u4FE1\u606F
+# \u6D77\u63A7\u5546\u6237\u4FE1\u606F   \u751F\u4EA7\u914D\u7F6E
 # \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
+# appid
+cus.play.wx.app-id=wxd3e627dd62d6ff32
+# \u5FAE\u4FE1\u652F\u4ED8\u5546\u6237\u53F7
+cus.play.wx.mch-id=1574349031
+# \u6D77\u5173\uFF0C\u5E7F\u5DDE\uFF08\u603B\u7F72\uFF09
+cus.play.wx.customs=GUANGZHOU_ZS
 
 
 # \u5B9A\u65F6\u5668\u62A5\u5173\u4E00\u6B21\u533A\u7684\u6570\u636E
 db.wx.declare.limit=20
 db.wx.declare.count=2
 
-# ccnet\u9ED8\u8BA4\u914D\u7F6E\u6587\u4EF6\u7684\u503C
+
+
+# \u4E2D\u7F51\u751F\u4EA7\uFF08\u6D4B\u8BD5\u7528\uFF09\uFF0C\u5982\u679C\u8981\u6D4B\u8BD5\u4ED8\u6B3E\uFF0C\u6253\u5F00\u4E0B\u9762\u7684\u6CE8\u91CA
 # \u4E2D\u7F51\u5FAE\u4FE1\u516C\u4F17ID
-cus.play.wx.app-id=wxb6b30b1b14ee502a
-# \u5FAE\u4FE1\u652F\u4ED8\u5546\u6237\u53F7
-cus.play.wx.mch-id=1501125641
-# \u6D77\u5173
-cus.play.wx.customs=SHENZHEN
+#cus.play.wx.app-id=wxb6b30b1b14ee502a
+## \u5FAE\u4FE1\u652F\u4ED8\u5546\u6237\u53F7
+#cus.play.wx.mch-id=1501125641
+## \u6D77\u5173\uFF0C\u6DF1\u5733
+#cus.play.wx.customs=SHENZHEN
+#merchant.plat-sn=146001
+#merchant.customs-code=4403160Z3Y
+#merchant.plat-name=\u4E2D\u7F51\u5546\u57CE
+#merchant.customs-name=\u4E2D\u7F51\u79D1\u6280\uFF08\u6DF1\u5733\uFF09\u6709\u9650\u516C\u53F8
 
 # ccnet dev\u914D\u7F6E\u6587\u4EF6\u7684\u503C
 #cus.play.wx.app-id=wx24013b34e349db3c

+ 46 - 8
kmall-admin/src/main/resources/conf/fastdfs.properties

@@ -33,6 +33,44 @@
 #file.author=kmall-pt
 
 #
+##############\u6D4B\u8BD5\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
+
+
+
+
 ##############\u751F\u4EA7\u73AF\u5883################
 ##\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
 connect_timeout=30
@@ -41,29 +79,29 @@ connect_timeout=30
 network_timeout=60
 
 #\u6587\u4EF6\u8DEF\u5F84
-base_path=/data/files/
+base_path=/home/logs/fastdfs
 
 #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=172.18.246.243: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=172.18.246.243
 
 #HTTP \u670D\u52A1\u5668\u7AEF\u53E3\u53F7
 http.tracker_server_port=80
 
 #\u6587\u4EF6\u4F5C\u8005
-file.author=kmall-pt
+file.author=kmall-haikong

+ 1 - 0
kmall-admin/src/main/resources/logback.xml

@@ -6,6 +6,7 @@ debug:当此属性设置为true时,将打印出logback内部日志信息,
 -->
 <configuration scan="false" scanPeriod="60 seconds" debug="false">
 
+<!--    <property name="LOG_HOME" value="/data/project/logs/kmall-haikong/kmall-admin/"/>-->
     <property name="LOG_HOME" value="/data/project/logs/kmall-haikong/kmall-admin/"/>
     <!-- 定义日志的根目录 -->
     <property name="TRACE_DIR" value="trace" />

+ 0 - 4
kmall-admin/src/main/resources/mybatis/mapper/haikong/HaikongSendOrderInfoRecordDao.xml

@@ -367,10 +367,6 @@
 			<foreach collection="list" item="item" open="case " close=" end,">
 				when id = #{item.id} then #{item.resendStatus}
 			</foreach>
-			member_sys_order_id =
-			<foreach collection="list" item="item" open="case " close=" end,">
-				when id = #{item.id} then #{item.memberSysOrderId}
-			</foreach>
 		</trim>
 		where id in
 		<foreach collection="list" item="item" open="(" separator="," close=")">

+ 7 - 27
kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesScoreDao.xml

@@ -9,7 +9,6 @@
         <result property="sku" column="sku"/>
         <result property="storeId" column="store_id"/>
         <result property="mkaId" column="mka_id"/>
-        <result property="deadline" column="deadline"/>
         <result property="reject" column="reject"/>
         <result property="createTime" column="create_time"/>
         <result property="createrSn" column="creater_sn"/>
@@ -24,7 +23,6 @@
 			`sku`,
 			`store_id`,
 			`mka_id`,
-			`deadline`,
 			`reject`,
 			`create_time`,
 			`creater_sn`,
@@ -41,7 +39,6 @@
     		`sku`,
     		`store_id`,
     		`mka_id`,
-    		`deadline`,
     		`reject`,
     		`create_time`,
     		`creater_sn`,
@@ -52,6 +49,9 @@
 		<if test="name != null and name.trim() != ''">
 			AND name LIKE concat('%',#{name},'%')
 		</if>
+		<if test="mkaId != null and mkaId.trim() != ''">
+			AND mka_id = #{mkaId}
+		</if>
 		<if test="prodBarcode != null and prodBarcode.trim() != ''">
 			AND `prod_barcode` LIKE concat('%',#{prodBarcode},'%')
 		</if>
@@ -74,6 +74,9 @@
         <if test="name != null and name.trim() != ''">
             AND name LIKE concat('%',#{name},'%')
         </if>
+		<if test="mkaId != null and mkaId.trim() != ''">
+			AND mka_id = #{mkaId}
+		</if>
 		<if test="prodBarcode != null and prodBarcode.trim() != ''">
 			AND `prod_barcode` LIKE concat('%',#{prodBarcode},'%')
 		</if>
@@ -87,31 +90,13 @@
     		`sku`,
     		`store_id`,
     		`mka_id`,
-    		`deadline`,
-    		`reject`,
-    		`create_time`,
-    		`creater_sn`,
-    		`moder_sn`,
-    		`update_time`
-		from mk_activities_score
-		where prod_barcode = #{prodBarcode} and sku = #{sku} and store_id = #{storeId} and (deadline &gt; #{nowTime})
-	</select>
-
-    <select id="queryDetailByTime" resultType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
-		select
-    		`id`,
-    		`prod_barcode`,
-    		`sku`,
-    		`store_id`,
-    		`mka_id`,
-    		`deadline`,
     		`reject`,
     		`create_time`,
     		`creater_sn`,
     		`moder_sn`,
     		`update_time`
 		from mk_activities_score
-		where deadline &gt; #{date}
+		where prod_barcode = #{prodBarcode} and sku = #{sku} and store_id = #{storeId}
 	</select>
 
     <select id="queryActivityInfoByMkaIdList" resultType="com.kmall.admin.entity.mk.MkActivitiesScoreEntity">
@@ -130,7 +115,6 @@
 			`sku`,
 			`store_id`,
 			`mka_id`,
-			`deadline`,
 			`reject`,
 			`create_time`,
 			`creater_sn`,
@@ -141,7 +125,6 @@
 			#{sku},
 			#{storeId},
 			#{mkaId},
-			#{deadline},
 			#{reject},
 			#{createTime},
 			#{createrSn},
@@ -155,7 +138,6 @@
 			`sku`,
 			`store_id`,
 			`mka_id`,
-			`deadline`,
 			`reject`,
 			`create_time`,
 			`creater_sn`,
@@ -168,7 +150,6 @@
 				#{item.sku},
 				#{item.storeId},
 				#{item.mkaId},
-				#{item.deadline},
 				#{item.reject},
 				#{item.createTime},
 				#{item.createrSn},
@@ -185,7 +166,6 @@
 			<if test="sku != null">`sku` = #{sku}, </if>
 			<if test="storeId != null">`store_id` = #{storeId}, </if>
 			<if test="mkaId != null">`mka_id` = #{mkaId}, </if>
-			<if test="deadline != null">`deadline` = #{deadline}, </if>
 			<if test="reject != null">`reject` = #{reject}, </if>
 			<if test="createTime != null">`create_time` = #{createTime}, </if>
 			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>

+ 2 - 8
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkactivitiesscore.html

@@ -29,15 +29,9 @@
                 <a href="../statics/file/activities_score.xlsx">积分抵扣模板下载</a>
             </div>
             <div class="buttons-group">
-<!--                #if($shiro.hasPermission("mkactivitiesscore:save"))-->
                 <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
-<!--                #end-->
-<!--                #if($shiro.hasPermission("mkactivitiesscore:update"))-->
                 <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
-<!--                #end-->
-<!--                #if($shiro.hasPermission("mkactivitiesscore:delete"))-->
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
-<!--                #end-->
                 <i-button type="warning" @click="reloadMkactivities" v-show="!isMkactivitiesShow">返回营销方式页</i-button>
             </div>
         </Row>
@@ -57,9 +51,9 @@
             <Form-item label="门店id" prop="storeId">
                 <i-input v-model="mkActivitiesScore.storeId" placeholder="门店id"/>
             </Form-item>
-            <Form-item label="抵扣比例" prop="scoreLimit">
+            <!--<Form-item label="抵扣比例" prop="scoreLimit">
                 <i-input v-model="mkActivitiesScore.scoreLimit" placeholder="抵扣比例"/>
-            </Form-item>
+            </Form-item>-->
             <Form-item label="营销活动编号" prop="mkaId">
                 <i-input v-model="mkActivitiesScore.mkaId" placeholder="营销活动编号"/>
             </Form-item>

+ 2 - 2
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -115,12 +115,12 @@
                         <Row :gutter="16">
                             <ul class="nav navbar-top-links navbar-right" style="font-size: 1.3em;">
 
-                                <li>
+                                <!--<li>
                                     <i-input v-model="orderSn1" @on-enter="queryInveResponse" placeholder="输入要查询回执的订单号" id="queryInveResponse" />
                                 </li>
                                 <li>
                                     <i-input v-model="orderSn" @on-enter="queryOrderStatus" placeholder="输入要查询订单状态的订单号" id="queryOrderStatus" />
-                                </li>
+                                </li>-->
                                 <li >
                                     <span style="margin-right: 40px">&nbsp; 门店:<b>{{storeName}}</b></span>
                                 </li>

+ 1 - 1
kmall-admin/src/main/webapp/js/mk/mkactivitiesscore.js

@@ -27,7 +27,7 @@ $(function () {
 			{label: '商品条码', name: 'prodBarcode', index: 'prod_barcode', width: 150},
 			{label: 'sku', name: 'sku', index: 'sku', width: 150},
 			{label: '门店id', name: 'storeId', index: 'store_id', width: 80},
-			{label: '抵扣比例', name: 'scoreLimit', index: 'score_limit', width: 80},
+			// {label: '抵扣比例', name: 'scoreLimit', index: 'score_limit', width: 80},
 			{label: '营销活动编号', name: 'mkaId', index: 'mka_id', width: 100}
 			// {label: '截止日期', name: 'deadline', index: 'deadline', width: 200,
 			// 	formatter: function (value) {

+ 6 - 4
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -681,7 +681,7 @@ let vm = new Vue({
             vm.storeId = sessionStorage.getItem("storeId");
             var thisGoods = {};
             var overflowLi = this.$refs.overflowLi;
-            $.get("../goods/selectSkuDetails/"+vm.prodBarcode+"/"+vm.storeId, function (r) {
+            $.get("../goods/details/"+vm.prodBarcode+"/"+vm.storeId+"/"+vm.prodBarcode, function (r) {
                 if (r.code == 0) {
                     if(r.goodsDetails.length>1) {
                         r.goodsDetails.sellVolume = 1;
@@ -1450,9 +1450,11 @@ function openWebSocket() {
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
         //kmall测试环境
-        webSocket = new WebSocket("ws://183.62.225.124:3080/ws/server/"+storeId);
-        //kmall正式环境
-        // webSocket = new WebSocket("ws://8.135.102.238:8080/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://127.0.0.1:8080/ws/server/"+storeId);
         //kmall本地环境
         // webSocket = new WebSocket("ws://127.0.0.1:8089/ws/server/"+storeId);
         // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);

+ 2 - 2
kmall-admin/src/main/webapp/login.html

@@ -68,7 +68,7 @@
                     <i-input class="userinput"  type="password" v-model="password" @on-enter="login" style="width: 250px;"
                              placeholder="密码"/>
                 </div>
-                <div class="form-group has-feedback" id="authcode">
+                <!--<div class="form-group has-feedback" id="authcode">
                     <div style="display: inline-block;width: 150px;height:45px;padding-left: 2px">
                         <i-input v-model="captcha" @on-enter="login"
                                  placeholder="验证码" class="authcode" />
@@ -77,7 +77,7 @@
                         <img style="height: 45px;width: 96px;border-radius: 4px;" alt="如果看不清楚,请单击图片刷新!" title="点击刷新"
                              class="pointer" :src="src" @click="refreshCode">
                     </div>
-                </div>
+                </div>-->
                 <div>
                     <i-button type="primary" @click="login" style="width: 125px;height: 45px">登录</i-button>
                     <i-button type="primary" @click="changeUserLogin" style="width: 125px;height: 45px">切换店员端登录</i-button>

BIN
kmall-admin/src/main/webapp/statics/file/activities_score.xlsx


+ 2 - 2
kmall-admin/src/main/webapp/userLogin.html

@@ -45,7 +45,7 @@
                     <i-input class="userinput"  type="password" v-model="password" @on-enter="login" style="width: 250px;"
                              placeholder="密码"/>
                 </div>
-                <div class="form-group has-feedback" id="authcode">
+                <!--<div class="form-group has-feedback" id="authcode">
                     <div style="display: inline-block;width: 150px;height:45px;padding-left: 2px">
                         <i-input v-model="captcha" @on-enter="login"
                                  placeholder="验证码" class="authcode" />
@@ -54,7 +54,7 @@
                         <img style="height: 45px;width: 96px;border-radius: 4px;" alt="如果看不清楚,请单击图片刷新!" title="点击刷新"
                              class="pointer" :src="src" @click="refreshCode">
                     </div>
-                </div>
+                </div>-->
                 <div>
                     <i-button type="warning" @click="login" style="width: 125px;height: 45px">登录</i-button>
                     <i-button type="warning" @click="change" style="width: 125px;height: 45px">切换管理端</i-button>

+ 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">

+ 1 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusDevProperties.java

@@ -9,6 +9,7 @@ import java.io.Serializable;
  * @since 1.0
  * 2018-09-27
  */
+@Deprecated
 public class CusDevProperties extends CusProperties implements Serializable {
 
 }

+ 1 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusProdProperties.java

@@ -9,6 +9,7 @@ import java.io.Serializable;
  * @since 1.0
  * 2018-09-27
  */
+@Deprecated
 public class CusProdProperties extends CusProperties implements Serializable {
 
 }

+ 1 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusProperties.java

@@ -7,6 +7,7 @@ import java.io.Serializable;
  * @since 1.0
  * 2018-09-27
  */
+@Deprecated
 public class CusProperties implements Serializable {
 
     private static final long serialVersionUID = 6510286205689738234L;

+ 1 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusPropertiesBuilder.java

@@ -14,6 +14,7 @@ import javax.annotation.PostConstruct;
  * 2018-09-27
  */
 @Component
+@Deprecated
 public class CusPropertiesBuilder {
     private static final Logger logger = LoggerFactory.getLogger(CusPropertiesBuilder.class);
 

+ 1 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/pay/data/open/cus/CusPropertiesConfiguration.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Component;
  * 2018-09-27
  */
 @Component
+@Deprecated
 public class CusPropertiesConfiguration {
     private static final String PROD = "prod";
     private static final String DEV = "dev";

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

@@ -1,8 +1,8 @@
 ########## \u6D77\u5173 \u914D\u7F6E ##########
 
+#################### \u5DF2\u5E9F\u5F03 ####################
 # [dev, prod]
 cus.env = prod
-
 # \u5F00\u53D1\u73AF\u5883
 # \u4F01\u4E1A\u8FD4\u56DE\u6D77\u5173\u5B9E\u65F6\u6570\u636E\u63A5\u53E3\u5730\u5740
 cus.dev.payDateUrl=https://swapptest.singlewindow.cn/ceb2grab/grab/realTimeDataUpload

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

@@ -1,22 +1,22 @@
 ########## \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=prod
 ####========== \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://rm-wz942te7t69x262100o.mysql.rds.aliyuncs.com:3306/kmall-haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+jdbc.prod.username=zhdf
+jdbc.prod.password=Greereal@600185
+# \u9884\u53D1\u5E03\u5E93
+jdbc.pre.url=jdbc:mysql://127.0.0.1:3306/kmall_haikong?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+jdbc.pre.username=root
+jdbc.pre.password=G$Debpk^pn
 
 
 # \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=prod
 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=wkbgreedchaiKongkuajing
+haikong.prod.member.appSecret=wkbgreedchaiKongkuajingprodP
+
+#### \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://testmall.greedc.com/openapi/vmcconnect/json
+haikong.prod.vmcconnect.appId=5
+haikong.prod.vmcconnect.secretKey=GXfc6ZtDlnxHxmmAHvfRfqvrqgfwRiJX
+haikong.prod.vmcconnect.requestRetry=2

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

@@ -1,14 +1,18 @@
-########## redis \u914D\u7F6E ##########
+########## redis \u914D\u7F6E ##########1
 
-# [dev, prod]
-redis.env=dev
+# [dev, test, prod]
+redis.env=prod
 
 # \u5F00\u53D1\u73AF\u5883
 redis.dev.keyPrefix=platform
 # \u6D4B\u8BD5redis\uFF0C\u6709\u5BC6\u7801
 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=fdsjk337sdb
+# \u6D4B\u8BD5\u73AF\u5883\u5BC6\u7801
 redis.dev.password=Abc-123#*.-
 redis.dev.pool.maxIdle=200
 redis.dev.pool.maxWait=1000
@@ -27,9 +31,9 @@ redis.dev.pool.testOnBorrow=true
 
 # \u751F\u4EA7\u73AF\u5883
 redis.prod.keyPrefix=platform
-redis.prod.host=120.78.152.8
+redis.prod.host=127.0.0.1
 redis.prod.port=6379
-redis.prod.password=Abc-123#*.-
+redis.prod.password=e415MBsvV7
 redis.prod.pool.maxIdle=200
 redis.prod.pool.maxWait=1000
 redis.prod.pool.maxTotal=10000

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

@@ -1,10 +1,10 @@
-########## \u5FAE\u4FE1\u5C0F\u7A0B\u5E8F\u914D\u7F6E ##########
+########## \u5FAE\u4FE1\u5C0F\u7A0B\u5E8F\u652F\u4ED8\u914D\u7F6E ##########
 
 # [dev, prod]
-pay.wx.env=dev
+pay.wx.env=prod
 
 
-#========== \u5F00\u53D1\u73AF\u5883 ==========
+#========== \u5F00\u53D1\u73AF\u5883 \u4E2D\u7F51\u7684\u914D\u7F6E\uFF08\u6D4B\u8BD5\u7528\uFF09 ==========
 #\u5C0F\u7A0B\u5E8FID
 wx.dev.appId=wxb6b30b1b14ee502a
 #\u5C0F\u7A0B\u5E8F\u5BC6\u94A5
@@ -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
@@ -48,20 +48,20 @@ wx.dev.templateSendUrl=https://api.weixin.qq.com/cgi-bin/message/subscribe/send?
 
 
 
-#========== \u751F\u4EA7\u73AF\u5883 ==========
+#========== \u751F\u4EA7\u73AF\u5883 \u6D77\u63A7\u7684\u914D\u7F6E ==========
 
 #\u5C0F\u7A0B\u5E8FID
-wx.prod.appId=wxb6b30b1b14ee502a
+wx.prod.appId=wxd3e627dd62d6ff32
 #\u5C0F\u7A0B\u5E8F\u5BC6\u94A5
-wx.prod.secret=be0234dbbbde4ce68df43dd2b5e4c7b1
+wx.prod.secret=hkkjkjweixinzhifupassword2020017
 #\u5546\u6237\u53F7
-wx.prod.mchId=1501125641
+wx.prod.mchId=1574349031
 #\u652F\u4ED8\u7B7E\u540D
-wx.prod.paySignKey=Zx1245uytDLliom12345622222222222
+wx.prod.paySignKey=Zx1245uytDLliom123456248798416846
 #\u4EA4\u6613\u7C7B\u578B
 wx.prod.tradeType=JSAPI
 #\u8BC1\u4E66\u540D\u79F0\uFF0C\u5BF9\u5E94\u4E0D\u540C\u7684\u5546\u6237\u53F7
-wx.prod.certName=/app/project/kmall_pt/cert/apiclient_cert.p12
+wx.prod.certName=/app/project/kmall_haikong/cert/apiclient_cert.p12
 #\u652F\u4ED8\u56DE\u8C03\u5730\u5740
 wx.prod.notifyUrl=https://mp.k1net.cn/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">

+ 4 - 4
sql/init/other_table.sql

@@ -177,7 +177,7 @@ CREATE TABLE `haikong_member_order_sync_resend`  (
   `order_amount` decimal(10, 3) DEFAULT NULL COMMENT '订单金额',
   `order_no` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '订单编号',
   `order_score` int(8) DEFAULT NULL COMMENT '订单抵扣积分数量',
-  `member_sys_order_id` int(11) DEFAULT NULL COMMENT '会员系统订单id,请求成功返回',
+  `member_sys_order_id` varchar(32) DEFAULT NULL COMMENT '会员系统订单id,请求成功返回',
   `resend_status` char(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '重发状态,0:等待重发 1:重发成功 2:重发失败 3:无需重发',
   `last_resend_time` datetime(0) DEFAULT NULL COMMENT '最后一次重发时间',
   `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间',
@@ -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;
 
@@ -3112,9 +3112,9 @@ CREATE TABLE `mk_activities_score`  (
   `prod_barcode` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '商品条码',
   `sku` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'sku',
   `store_id` int(11) DEFAULT NULL COMMENT '门店id',
-  `score_limit` decimal(10, 2) DEFAULT NULL COMMENT '积分最大抵扣比例,如:设为0.3,则积分最多抵扣当前订单价的30%',
+--   `score_limit` decimal(10, 2) DEFAULT NULL COMMENT '积分最大抵扣比例,如:设为0.3,则积分最多抵扣当前订单价的30%',
   `mka_id` bigint(20) DEFAULT NULL COMMENT '营销活动编号',
-  `deadline` datetime(0) DEFAULT NULL COMMENT '截止日期',
+--   `deadline` datetime(0) DEFAULT NULL COMMENT '截止日期',
   `reject` char(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '\n0:参与\n 1:不参与,如导入的商品为参与积分抵扣,则默认其余商品为不参与积分抵扣,\n如导入的商品为不参与积分抵扣,则默认其余商品为参与积分抵扣\r',
   `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间',
   `creater_sn` varchar(22) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人编号',

+ 19 - 28
切换环境需要修改的.md

@@ -1,43 +1,34 @@
 切换环境需要修改的:
 
-1. 微信小程序支付配置
+1. 微信支付配置
     文件目录:resources\conf\wx-mp.properties
-        修改env为prod
+        修改env为prod,需要支付签名文件
 2. Redis配置
     文件目录:resources\conf\redis.properties
         修改env为prod
-3. 打印机配置
-    文件目录:resources\conf\print-ticket.properties
-
-4. 快递鸟配置
-    文件目录:resources\conf\express-kdn.properties
-        修改env为prod
-41. sf快递配置
-    文件目录:resources\conf\express-sf.properties
-        
-5. 云片短信配置
-    文件目录:resources\conf\common.properties
-
-6. 数据源配置
+3. 数据源配置
     文件目录:resources\conf\db.properties
-        切换为生产环境配置
-
-7. 商户配置
-    文件目录:resources\conf\oms-merch.properties
-        oms配置切换为生产环境配置
-
-8. 图片上传配置
+        修改为prod
+4. 图片上传配置
     文件目录:resources\conf\fastdfs.properties
-        切换为生产环境配置
-        
-9. Jdk1.8
+        切换为海控生产环境配置
+
+5. Jdk1.8
     服务器安装jdk1.8,微信退款回调信息解密需要在目录“jdk1.8.0_131\jre\lib\security”中
 替换local_policy.jar、US_export_policy.jar两个安全的jar文件
 
-10. cert安装目录配置在wx-mp.properties的certName中
+6. cert安装目录配置在wx-mp.properties的certName中
 
+7. sale.js修改WebSocket地址,海控为127.0.0.1:8080
 
-11. sale.js修改WebSocket地址
+8. haikong.properties,修改env为prod
 
+9. 系统管理-->系统参数中需配置:
+    HAIKONG_MEMBER_SCORE_LIMIT: 30 (海控平台统一30积分1块钱)
+    HAIKONG_MEMBER_MAX_SCORE_RATIO: 0.5 (积分最大抵扣比例(最多能抵扣订单金额的比例))
+    CUSTOMS_PORT_CODE: 5791 (海关口岸代码)
+    HK_NOTICE_KEY: aD9MNIuAATSUazu64nBz (海控通知回调秘钥)
+    HK_NOTICE_NUM: 100 (通知数据阀值)
 
-12. 测试环境注释掉支付OrderServiceImpl第2022行下面支付方法,正式环境切记不要注释支付方法
+10. 微信支付推送海关支付凭证
+    cuspay-wx.properties,修改为海控生产环境配置