admin
2021-07-10 29918ba877731850d001fb2d1a3f3774698241c1
礼金bug修复
4个文件已添加
41个文件已修改
872 ■■■■ 已修改文件
app/src/main/java/com/ks/app/controller/admin/UserAdminController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/lijin/LiJinProviderLinkAdminController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/vip/VipCenterAdminController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/vip/VipGradeAdminController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/vip/VipGradePotenceAdminController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/service/impl/AdminUserServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/resources/application-test.yml 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lijin/src/main/java/com/ks/lijin/pojo/DO/LiJinDangerGoods.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lijin/src/main/java/com/ks/lijin/pojo/DO/LiJinDangerSeller.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/DO/UserLijinRecord.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/Enums/VIPEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/LiJinApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/config/RedisConfig.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/controller/TestController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/dao/LijinDangerSellerDao.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/mapper/LiJinExpendRecordMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/manager/LiJinProviderTaoKeAccountManager.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/manager/LijinDangerSellerManager.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/manager/LijinOrderManager.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinExpendRecordServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinGoofsDepotFirstOrderServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinLinkServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderAccountServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderLinkServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderNoticeServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/resources/application-pro.yml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/resources/application-test.yml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/main/resources/logback.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lijin/src/test/java/com/ks/LuckyTest.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/LijinBalanceServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/LijinRecordServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipCenterRecordServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipCenterServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipComboServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipGradePotenceServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipGradeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/resources/application-pro.yml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/resources/application-test.yml 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/resources/logback.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/resources/mapper/LijinBalanceMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/ks/app/controller/admin/UserAdminController.java
@@ -1,19 +1,8 @@
package com.ks.app.controller.admin;
import javax.servlet.http.HttpServletRequest;
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.lijin.pojo.DO.LiJinProvider;
import com.ks.lijin.service.LiJinProviderService;
import net.sf.json.JSONObject;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
app/src/main/java/com/ks/app/controller/admin/lijin/LiJinProviderLinkAdminController.java
@@ -6,10 +6,8 @@
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.app.util.ResultUtils;
import com.ks.lijin.pojo.DO.LiJinProvider;
import com.ks.lijin.pojo.DO.LiJinProviderLink;
import com.ks.lijin.service.LiJinProviderLinkService;
import net.sf.json.JSONObject;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
app/src/main/java/com/ks/app/controller/admin/vip/VipCenterAdminController.java
@@ -1,18 +1,13 @@
package com.ks.app.controller.admin.vip;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ks.app.pojo.DTO.OptionDTO;
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.app.util.ResultUtils;
import com.ks.vip.exception.VipCenterException;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.pojo.VO.VipCenterVO;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Reference;
app/src/main/java/com/ks/app/controller/admin/vip/VipGradeAdminController.java
@@ -7,10 +7,8 @@
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.app.util.ResultUtils;
import com.ks.vip.pojo.DO.VipCombo;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.service.VipComboService;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
app/src/main/java/com/ks/app/controller/admin/vip/VipGradePotenceAdminController.java
@@ -1,18 +1,15 @@
package com.ks.app.controller.admin.vip;
import com.alibaba.dubbo.config.annotation.Reference;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ks.app.pojo.VO.PageEntity;
import com.ks.app.pojo.VO.Result;
import com.ks.app.util.ResultUtils;
import com.ks.vip.exception.VipGradePotenceException;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.DO.VipGradePotence;
import com.ks.vip.service.VipGradePotenceService;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
app/src/main/java/com/ks/app/service/impl/AdminUserServiceImpl.java
@@ -1,10 +1,9 @@
package com.ks.app.service.impl;
import org.apache.dubbo.config.annotation.Service;
import com.ks.app.mapper.AdminUserMapper;
import com.ks.app.pojo.DO.AdminUser;
import com.ks.app.service.AdminUserService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
app/src/main/resources/application-test.yml
New file
@@ -0,0 +1,103 @@
server:
  port: 8088
  tomcat:
    uri-encoding: UTF-8
spring:
  main:
    allow-bean-definition-overriding: true
  http:
    encoding:
      force: true
      charset: UTF-8
      enabled: true
  data:
    mongodb:
      username: admin
      password: admin
      #172.16.16.44
      #193.112.35.168
      host: 118.195.138.153
      port: 27017
      database: lijin
      authentication-database: admin
  datasource:
    #gz-cdb-r13d0yi9.sql.tencentcdb.com:62929
    #172.16.16.17:3306
    url: jdbc:mysql://gz-cdb-r13d0yi9.sql.tencentcdb.com:62929/ec_tejia?&useTimezone=true&serverTimezone=GMT%2B8
    username: root
    password: Yeshi2016@
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 8
      min-idle: 1
      max-active: 20
      max-wait: 60000
      time-between-eviction-runsMillis: 60000
      min-evictable-idle-timeMillis: 300000
      validation-query: select 'x' FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-open-prepared-statements: 20
      max-pool-prepared-statement-per-connection-size: 20
      filters: stat
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      use-global-data-source-stat: true
mybatis:
  mapper-locations : classpath:mapper/*.xml
  type-aliases-package: com.ks.goldcorn.pojo.DO
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
redis:
  #172.16.16.3
  #193.112.34.40
  host: 118.195.138.153
  port: 6379
  password: 123456
  timeout: 5000
  jedis:
    pool:
      max-wait: 10000
      max-idle: 200
      max-total: 1024
  database: 4
dubbo:
  application:
    name: lijin-provider
  registry:
    protocol: zookeeper
    address: zookeeper://193.112.35.168:2181
#    address: zookeeper://118.195.138.153:2181
    client: curator
  protocol:
    name: dubbo
    port: 20901
  scan:
    base-packages: com.ks.lijin.service.remote
  provider:
    timeout: 10000
xxl:
  job:
    accessToken:
    executor:
      appname: demo
      ip:
      logpath: /data/applogs/xxl-job/jobhandler
      logretentiondays: -1
      port: 9999
    admin:
      addresses: http://localhost:8081/xxl-job-admin
logging:
  level:
    com:
      ks:
        lucky:
          mapper: debug
    org.springframework.data.mongodb.core: DEBUG
facade-lijin/src/main/java/com/ks/lijin/pojo/DO/LiJinDangerGoods.java
@@ -84,4 +84,28 @@
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getTradeId() {
        return tradeId;
    }
    public void setTradeId(String tradeId) {
        this.tradeId = tradeId;
    }
    public String getOrderNo() {
        return orderNo;
    }
    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
    public Date getOrderPayTime() {
        return orderPayTime;
    }
    public void setOrderPayTime(Date orderPayTime) {
        this.orderPayTime = orderPayTime;
    }
}
facade-lijin/src/main/java/com/ks/lijin/pojo/DO/LiJinDangerSeller.java
New file
@@ -0,0 +1,71 @@
package com.ks.lijin.pojo.DO;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.Date;
@Document(collection = "dangerSeller")
public class LiJinDangerSeller implements Serializable {
    @Id
    private String id;
    private Integer goodsType;
    private String sellerId;
    private String sellerName;
    private Date createTime;
    private Date updateTime;
    public static String createId(Integer goodsType, String sellerId) {
        return goodsType + "#" + sellerId;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Integer getGoodsType() {
        return goodsType;
    }
    public void setGoodsType(Integer goodsType) {
        this.goodsType = goodsType;
    }
    public String getSellerId() {
        return sellerId;
    }
    public void setSellerId(String sellerId) {
        this.sellerId = sellerId;
    }
    public String getSellerName() {
        return sellerName;
    }
    public void setSellerName(String sellerName) {
        this.sellerName = sellerName;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
facade-vip/src/main/java/com/ks/vip/pojo/DO/UserLijinRecord.java
@@ -1,6 +1,7 @@
package com.ks.vip.pojo.DO;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.yeshi.utils.generater.mybatis.Column;
import org.yeshi.utils.generater.mybatis.Table;
@@ -31,15 +32,19 @@
    @Id
    private String id;
    @Indexed
    private String uid;
    private BigDecimal money;
    @Indexed
    private Integer type;
    /**
     * 分类
     */
    @Indexed
    private String category;
    private String title;
    private String identifyCode;
    @Indexed
    private Date createTime;
    private Date updateTime;
facade-vip/src/main/java/com/ks/vip/pojo/Enums/VIPEnum.java
@@ -7,7 +7,8 @@
public enum VIPEnum {
    silver("白银"),
    platinum("铂金");
    platinum("铂金"),
    diamond("钻石");
    private final String desc;
pom.xml
@@ -30,6 +30,7 @@
        <curator.version>2.8.0</curator.version>
        <zookeeper.version>3.4.6</zookeeper.version>
        <mongo.driver.version>3.12.0</mongo.driver.version>
        <kafka.client.version>0.10.1.1</kafka.client.version>
    </properties>
    <repositories>
@@ -38,6 +39,7 @@
            <name>nexus</name>
            <url>http://193.112.35.168:8081/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <dependencies>
@@ -47,15 +49,15 @@
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.freemarker</groupId>-->
            <!--<artifactId>freemarker</artifactId>-->
            <!--<version>2.3.23</version>-->
        <!--<groupId>org.freemarker</groupId>-->
        <!--<artifactId>freemarker</artifactId>-->
        <!--<version>2.3.23</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.yeshi</groupId>
            <artifactId>utils</artifactId>
            <version>0.0.8</version>
            <version>0.0.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
@@ -250,6 +252,40 @@
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>${kafka.client.version}</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.11</artifactId>
            <version>${kafka.client.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
service-lijin/src/main/java/com/ks/lijin/LiJinApplication.java
@@ -1,6 +1,6 @@
package com.ks.lijin;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
service-lijin/src/main/java/com/ks/lijin/config/RedisConfig.java
@@ -3,7 +3,6 @@
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@@ -13,10 +12,33 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.yeshi.utils.StringUtil;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class RedisConfig {
    @Value("${spring.redis.host}")
    private String addr;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private String timeout;
    @Value("${spring.redis.password}")
    private String auth;
    @Value("${spring.redis.database}")
    private int database;
    @Value("${spring.redis.jedis.pool.max-total}")
    private int maxTotal;
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.jedis.pool.test_on_borrow}")
    private boolean testOnBorrow;
    Logger log = LoggerFactory.getLogger(RedisConfig.class);
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
@@ -38,4 +60,14 @@
        template.afterPropertiesSet();
        return template;
    }
    @Bean
    public JedisPool jedisPool() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(maxTotal);
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setTestOnBorrow(testOnBorrow);
        return new JedisPool(poolConfig, addr, port, Integer.parseInt(timeout.replace("ms", "").trim()), auth, database);
    }
}
service-lijin/src/main/java/com/ks/lijin/controller/TestController.java
@@ -1,6 +1,5 @@
package com.ks.lijin.controller;
import com.ks.lijin.exception.LiJinException;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -20,12 +19,15 @@
    @RequestMapping("redis")
    public String testRedis(String uid) throws Exception {
        String key = "createtblijin-" + uid;
        if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
            return "锁定成功";
        } else {
            throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试");
        try {
            if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
                return "锁定成功";
            } else {
                return "服务器繁忙,请稍后再试";
            }
        } finally {
            redisTemplate.delete(key);
        }
    }
}
service-lijin/src/main/java/com/ks/lijin/dao/LijinDangerSellerDao.java
New file
@@ -0,0 +1,21 @@
package com.ks.lijin.dao;
import com.ks.lib.common.dao.MongodbBaseDao;
import com.ks.lijin.pojo.DO.LiJinDangerGoods;
import com.ks.lijin.pojo.DO.LiJinDangerSeller;
import com.ks.lijin.query.BaseDaoQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
public class LijinDangerSellerDao extends MongodbBaseDao<LiJinDangerSeller> {
    public static class DaoQuery extends BaseDaoQuery {
    }
}
service-lijin/src/main/java/com/ks/lijin/mapper/LiJinExpendRecordMapper.java
@@ -42,7 +42,7 @@
     * @param maxCreateTime
     * @return
     */
    LiJinExpendRecord getMaxMoneyRecord(@Param("goodsId") String goodsId, @Param("minCreatetime") Date minCreatetime, @Param("maxCreateTime") Date maxCreateTime);
    LiJinExpendRecord getMaxMoneyRecord(@Param("goodsId") String goodsId, @Param("minCreatetime") Date minCreatetime, @Param("maxCreatetime") Date maxCreateTime);
    /**
service-lijin/src/main/java/com/ks/lijin/service/manager/LiJinProviderTaoKeAccountManager.java
@@ -6,6 +6,8 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.TimeUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -20,6 +22,9 @@
    @Resource
    private RedisTemplate redisTemplate;
    @Resource
    private JedisPool jedisPool;
    /**
@@ -42,7 +47,14 @@
        //获取账号当日的商品数量
        long goodsNum = redisTemplate.opsForSet().size(goodsKey);
        //获取账号当日的资金消耗
        Long todayMoney = Long.parseLong(redisTemplate.opsForValue().get(accountMoneyKey) + "");
        Long todayMoney = null;
        Jedis jedis = jedisPool.getResource();
        try {
            todayMoney = Long.parseLong(jedis.get(accountMoneyKey) + "");
        } finally {
            jedis.close();
        }
        //同步到数据库
        LiJinProviderTaoKeAccount account = liJinProviderAccountMapper.selectByPrimaryKeyForUpdate(accountId);
service-lijin/src/main/java/com/ks/lijin/service/manager/LijinDangerSellerManager.java
New file
@@ -0,0 +1,94 @@
package com.ks.lijin.service.manager;
import com.ks.lijin.dao.LijinDangerGoodsDao;
import com.ks.lijin.dao.LijinDangerSellerDao;
import com.ks.lijin.mapper.LiJinExpendRecordMapper;
import com.ks.lijin.pojo.DO.LiJinDangerGoods;
import com.ks.lijin.pojo.DO.LiJinDangerSeller;
import com.ks.lijin.pojo.DO.LiJinExpendRecord;
import com.ks.lijin.pojo.DO.TaoBaoOrderRecord;
import com.ks.lijin.util.Constant;
import com.ks.lijin.utils.taobao.TaoBaoOrderUtil;
import com.ks.lijin.utils.taobao.TaoKeApiUtil;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import org.springframework.stereotype.Component;
import org.yeshi.utils.TimeUtil;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Component
public class LijinDangerSellerManager {
    @Resource
    private LijinDangerSellerDao lijinDangerSellerDao;
    @Resource
    private LiJinExpendRecordMapper liJinExpendRecordMapper;
    /**
     * 处理订单
     *
     * @param record
     * @throws Exception
     */
    public void processOrder(TaoBaoOrderRecord record) throws Exception {
        if (record == null) {
            throw new Exception("订单为空");
        }
        if (record.getTb_paid_time() == null) {
            throw new Exception("订单未付款");
        }
        //查询是否在危险商家中
        TaoBaoGoodsBrief goods = TaoKeApiUtil.getSimpleGoodsInfo(record.getItem_id());
        LiJinDangerSeller dangerSeller = lijinDangerSellerDao.get(LiJinDangerSeller.createId(1, goods.getSellerId() + ""));
        if (dangerSeller != null) {
            throw new Exception("已加入危险商家记录");
        }
        //判断是否
        Date maxCreateTime = record.getTb_paid_time();
        Date minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(maxCreateTime.getTime(), "yyyyMMdd"), "yyyyMMdd"));
        LiJinExpendRecord expendRecord = liJinExpendRecordMapper.getMaxMoneyRecord(record.getItem_id() + "", minCreateTime, maxCreateTime);
        //判断是否触发机制
        if (expendRecord == null) {
            throw new Exception("礼金创建记录不存在");
        }
        BigDecimal money = expendRecord.getMoney();
        BigDecimal commission = TaoBaoOrderUtil.getCommission(record);
        if (commission == null) {
            throw new Exception("订单未处于付款/结算状态");
        }
        //礼金大于佣金的87%表示出错
        if (money.compareTo(commission.multiply(new BigDecimal("0.87"))) >= 0) {
            //危险报警
            LiJinDangerSeller seller = new LiJinDangerSeller();
            seller.setCreateTime(new Date());
            seller.setSellerId(goods.getSellerId() + "");
            seller.setSellerName(goods.getShopTitle());
            seller.setGoodsType(1);
            seller.setId(LiJinDangerSeller.createId(1, seller.getSellerId()));
            lijinDangerSellerDao.save(seller);
        }
    }
    /**
     * 是否是危险商品
     *
     * @param sellerId
     * @param goodsType
     * @return
     */
    public boolean isDangerous(String sellerId, int goodsType) {
        String id = LiJinDangerSeller.createId(goodsType, sellerId);
        return lijinDangerSellerDao.get(id) != null;
    }
}
service-lijin/src/main/java/com/ks/lijin/service/manager/LijinOrderManager.java
@@ -8,7 +8,6 @@
import com.ks.lijin.pojo.DO.TaoBaoOrderRecord;
import com.ks.lijin.pojo.DTO.taobao.TaoKeAppInfo;
import com.ks.lijin.pojo.DTO.taobao.TaoLiJinReportDTO;
import com.ks.lijin.service.LiJinProviderAccountService;
import com.ks.lijin.utils.taobao.TaoKeApiUtil;
import com.ks.vip.exception.LijinBalanceException;
import com.ks.vip.pojo.DO.UserLijinRecord;
@@ -40,6 +39,9 @@
    @Resource
    private LiJinProviderAccountMapper liJinProviderAccountMapper;
    @Resource
    private LijinDangerSellerManager lijinDangerSellerManager;
    @Reference(version = "1.0", check = false)
    private LijinBalanceService lijinBalanceService;
@@ -68,6 +70,12 @@
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            lijinDangerSellerManager.processOrder(taoBaoOrderRecord);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinExpendRecordServiceImpl.java
@@ -1,12 +1,12 @@
package com.ks.lijin.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.lijin.mapper.LiJinExpendRecordMapper;
import com.ks.lijin.pojo.DO.LiJinExpendRecord;
import com.ks.lijin.query.ExpendRecordQuery;
import com.ks.lijin.service.LiJinExpendRecordService;
import com.ks.lijin.service.LiJinProviderAccountService;
import com.ks.lijin.service.LiJinProviderNoticeService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.core.task.TaskExecutor;
import javax.annotation.Resource;
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinGoofsDepotFirstOrderServiceImpl.java
@@ -1,14 +1,10 @@
package com.ks.lijin.service.remote;
import com.ks.lijin.mapper.LiJinGoofsDepotFirstOrderMapper;
import com.ks.lijin.mapper.LiJinProviderMapper;
import com.ks.lijin.pojo.DO.LiJinGoofsDepotFirstOrder;
import com.ks.lijin.pojo.DO.LiJinProvider;
import com.ks.lijin.query.GoofsDepotFirstOrderQuery;
import com.ks.lijin.query.ProviderQuery;
import com.ks.lijin.service.LiJinGoofsDepotFirstOrderService;
import com.ks.lijin.service.LiJinProviderService;
import org.apache.dubbo.config.annotation.Service;
import com.ks.lijin.mapper.LiJinGoofsDepotFirstOrderMapper;
import com.ks.lijin.pojo.DO.LiJinGoofsDepotFirstOrder;
import com.ks.lijin.query.GoofsDepotFirstOrderQuery;
import com.ks.lijin.service.LiJinGoofsDepotFirstOrderService;
import javax.annotation.Resource;
import java.util.Date;
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinLinkServiceImpl.java
@@ -1,8 +1,8 @@
package com.ks.lijin.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.lijin.pojo.DO.LiJinProviderLink;
import com.ks.lijin.service.LiJinLinkService;
import org.apache.dubbo.config.annotation.Service;
import java.util.ArrayList;
import java.util.List;
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderAccountServiceImpl.java
@@ -1,10 +1,10 @@
package com.ks.lijin.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.lijin.mapper.LiJinProviderAccountMapper;
import com.ks.lijin.pojo.DO.LiJinProviderTaoKeAccount;
import com.ks.lijin.query.ProviderAccountQuery;
import com.ks.lijin.service.LiJinProviderAccountService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.Arrays;
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderLinkServiceImpl.java
@@ -1,17 +1,12 @@
package com.ks.lijin.service.remote;
import com.alibaba.dubbo.config.annotation.Service;
import com.ks.lijin.mapper.LiJinProviderLinkMapper;
import com.ks.lijin.mapper.LiJinProviderMapper;
import com.ks.lijin.pojo.DO.LiJinProvider;
import com.ks.lijin.pojo.DO.LiJinProviderLink;
import com.ks.lijin.query.ProviderLinkQuery;
import com.ks.lijin.query.ProviderQuery;
import com.ks.lijin.service.LiJinProviderLinkService;
import com.ks.lijin.service.LiJinProviderService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Service(version = "1.0")
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderNoticeServiceImpl.java
@@ -1,13 +1,9 @@
package com.ks.lijin.service.remote;
import com.ks.lijin.mapper.LiJinProviderMapper;
import com.ks.lijin.mapper.LiJinProviderNoticeMapper;
import com.ks.lijin.pojo.DO.LiJinProvider;
import com.ks.lijin.pojo.DO.LiJinProviderNotice;
import com.ks.lijin.query.ProviderNoticeQuery;
import com.ks.lijin.query.ProviderQuery;
import com.ks.lijin.service.LiJinProviderNoticeService;
import com.ks.lijin.service.LiJinProviderService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
service-lijin/src/main/java/com/ks/lijin/service/remote/LiJinProviderServiceImpl.java
@@ -1,13 +1,12 @@
package com.ks.lijin.service.remote;
import com.alibaba.dubbo.config.annotation.Service;
import com.ks.lijin.mapper.LiJinProviderMapper;
import com.ks.lijin.pojo.DO.LiJinProvider;
import com.ks.lijin.query.ProviderQuery;
import com.ks.lijin.service.LiJinProviderService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Service(version = "1.0")
service-lijin/src/main/java/com/ks/lijin/service/remote/LijinCreateServiceImpl.java
@@ -1,10 +1,11 @@
package com.ks.lijin.service.remote;
import com.ks.lijin.exception.*;
import com.ks.lijin.mapper.LiJinExpendRecordMapper;
import com.ks.lijin.pojo.DO.LiJinExpendRecord;
import com.ks.lijin.pojo.DO.LiJinProviderTaoKeAccount;
import com.ks.lijin.pojo.DO.LiJinProviderNotice;
import com.ks.lijin.pojo.DO.LiJinProviderTaoKeAccount;
import com.ks.lijin.pojo.DTO.LiJinCreateParam;
import com.ks.lijin.pojo.DTO.MoneyInfo;
import com.ks.lijin.pojo.DTO.TaoLijinCreateResultDTO;
@@ -15,10 +16,7 @@
import com.ks.lijin.service.LiJinProviderAccountService;
import com.ks.lijin.service.LiJinProviderNoticeService;
import com.ks.lijin.service.LijinCreateService;
import com.ks.lijin.service.manager.LiJinProviderTaoKeAccountManager;
import com.ks.lijin.service.manager.LijinConfigManager;
import com.ks.lijin.service.manager.LijinDangerGoodsManager;
import com.ks.lijin.service.manager.LijinGoodsManager;
import com.ks.lijin.service.manager.*;
import com.ks.lijin.util.Constant;
import com.ks.lijin.utils.taobao.TaoBaoUtil;
import com.ks.lijin.utils.taobao.TaoKeApiUtil;
@@ -37,10 +35,11 @@
import org.slf4j.LoggerFactory;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.MoneyBigDecimalUtil;
import org.yeshi.utils.StringUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -88,7 +87,7 @@
    private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager;
    @Resource
    private StringRedisTemplate redisTemplate;
    private RedisTemplate redisTemplate;
    @Resource
    private LijinGoodsManager lijinGoodsManager;
@@ -97,7 +96,13 @@
    private LijinDangerGoodsManager lijinDangerGoodsManager;
    @Resource
    private LijinDangerSellerManager lijinDangerSellerManager;
    @Resource
    private LijinConfigManager lijinConfigManager;
    @Resource
    private JedisPool jedisPool;
    @Override
    public List<MoneyInfo> getMoneyInfo(String uid, List<TaoBaoGoodsBrief> goodsBriefList) {
@@ -350,7 +355,6 @@
            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该商品暂无法创建礼金");
        }
        // 获取用户等级
        VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid);
        if (vipRank == null) {
@@ -372,6 +376,11 @@
            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_OFFLINE, "商品下线");
        }
        dangerous = lijinDangerSellerManager.isDangerous(goods.getSellerId() + "", 1);
        if (dangerous) {
            throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该店铺商品暂无法创建礼金");
        }
        // 创建的淘礼金-金额
        BigDecimal lijinAmount = getTBLijinAmount(goods, vipRank);
@@ -388,29 +397,38 @@
        //用户创建淘礼金为单线程操作
        String key = "createtblijin-" + uid;
        if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) {
            Date now = new Date();
            try {
                TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(auctionId, lijinAmount, params);
                if (taoLiJinDTO == null) {
                    throw new LiJinException(1, "淘宝API推广红包创建失败");
        Jedis jedis = jedisPool.getResource();
        try {
            if (jedis.setnx(key, "1") > 0) {
                jedis.expire(key, 120);
                logger.error("淘礼金创建,用户锁定成功 key:{}", key);
                Date now = new Date();
                try {
                    TaoLijinCreateResultDTO taoLiJinDTO = executeTaoLiJin(auctionId, lijinAmount, params);
                    if (taoLiJinDTO == null) {
                        throw new LiJinException(1, "淘宝API推广红包创建失败");
                    }
                    logger.info("淘礼金创建成功");
                    //添加账号的
                    return addCreateSuccessRecord(uid, auctionId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
                } catch (LiJinGoodsException e) {
                    if (e.getCode() == LiJinGoodsException.CODE_GOODS_CREATED_FULL) {
                        lijinGoodsManager.createdFullToday(auctionId, now);
                    }
                    jedis.del(key);
                    logger.info("淘礼金创建,删除锁定成功1 key:{}", key);
                    throw e;
                } finally {
                    jedis.del(key);
                    logger.info("淘礼金创建,删除锁定成功2 key:{}", key);
                }
                //添加账号的
                return addCreateSuccessRecord(uid, auctionId, lijinAmount, params.getTitle(), params.getNum(), taoLiJinDTO);
            } catch (LiJinGoodsException e) {
                if (e.getCode() == LiJinGoodsException.CODE_GOODS_CREATED_FULL) {
                    lijinGoodsManager.createdFullToday(auctionId, now);
                }
                redisTemplate.delete(key);
                logger.info("淘礼金创建,删除锁定成功1 key:{}",key);
                throw e;
            } finally {
                redisTemplate.delete(key);
                logger.info("淘礼金创建,删除锁定成功2 key:{}",key);
            } else {
                logger.error("淘礼金创建,用户锁定失败 key:{}", key);
                throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试");
            }
        } else {
            logger.error("淘礼金创建,用户锁定失败 key:{}",key);
            throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试");
        } finally {
            jedis.close();
        }
    }
@@ -439,13 +457,18 @@
        record.setSendUrl(taoLiJinDTO.getTaoLiJin().getSendUrl());
        record.setCreateTime(new Date());
        liJinExpendRecordMapper.insertSelective(record);
        logger.info("添加到创建记录成功");
        //添加
        liJinProviderTaoKeAccountManager.createLijinSuccess(taoLiJinDTO.getAccount().getId(), goodsId, lijinAmount.multiply(new BigDecimal(num)), now);
        logger.info("执行淘礼金创建成功事件成功");
        //礼金余额扣除
        try {
            lijinBalanceService.consumeLijin(uid, lijinAmount, "购物抵现", UserLijinRecord.Category.createGoodsLijin.name(), record.getId() + "");
            logger.info("扣除账户余额成功");
        } catch (LijinBalanceException e) {
            e.printStackTrace();
            logger.info("扣除账户余额失败:{}", e.getMessage());
        }
        return record;
@@ -468,6 +491,7 @@
        if (listAccount == null || listAccount.size() == 0) {
            throw new LiJinException(1, "没有可用的供应商账号");
        }
        logger.info("获取供应商淘礼金账号成功");
        // 遍历账号 用可使用账号
        for (LiJinProviderTaoKeAccount account : listAccount) {
@@ -478,6 +502,7 @@
                //创建礼金
                return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params));
            } catch (LiJinAccountException e) {// 账号问题
                logger.info("获取供应商淘礼账号出错:{}", e.getMessage());
                //更新账号的错误信息
                LiJinProviderTaoKeAccount update = new LiJinProviderTaoKeAccount();
                update.setId(account.getId());
service-lijin/src/main/resources/application-pro.yml
@@ -60,11 +60,12 @@
        min-idle: 8
    jedis:
        pool:
          max-active: 1024
          max-total: 1024
          max-wait: 10000ms
          max-idle: 200
          time-between-eviction-runs: 60000ms
          min-idle: 8
          test_on_borrow: true
mybatis:
@@ -79,8 +80,8 @@
    name: lijin-provider
  registry:
    protocol: zookeeper
#    address: tsfconsul://127.0.0.1:8500
    address: zookeeper://172.16.16.46:2181
    #    address: zookeeper://118.195.138.153:2181
    client: curator
  protocol:
    name: dubbo
@@ -88,7 +89,7 @@
  scan:
    base-packages: com.ks.lijin.service.remote
  provider:
    timeout: 10000
    timeout: 30000
#    host: 193.112.35.168
xxl:
  job:
@@ -107,4 +108,23 @@
      ks:
        lijin:
          mapper: debug
    org.springframework.data.mongodb.core: DEBUG
    org.springframework.data.mongodb.core: DEBUG
log:
  config:
    kafka:
      isSend: true
      # kafka的地址,使用时必须配置
      bootstrapServers: 172.16.16.38:9092
      # 日志发往的topic,使用时必须配置
      topic: log_service_lijin_info
      # 批量上传数目,达到该数目后发送
      batchSize: 5
      # 间隔时间后发送,即使未达到批量上传最大数,间隔时间到了也会发送,单位为毫秒
      lingerMs: 1000
      # 数据压缩类型
      compressionType: gzip
      # 重试次数
      retries: 3
      #最大消息大小,此处设为5M
      maxRequestSize: 5242880
service-lijin/src/main/resources/application-test.yml
@@ -46,44 +46,50 @@
      filters: stat
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      use-global-data-source-stat: true
  redis:
    #172.16.16.3
    #193.112.34.40
    host: 193.112.35.168
    port: 6380
    password: crs-43yhgz0i:Yeshi2016@
    timeout: 5000ms
    lettuce:
      pool:
        max-active: 1024
        max-wait: 10000ms
        max-idle: 200
        time-between-eviction-runs: 60000ms
        min-idle: 8
    jedis:
      pool:
        max-wait: 10000ms
        max-idle: 200
        max-total: 1024
        test_on_borrow: true
    database: 4
mybatis:
  mapper-locations : classpath:mapper/*.xml
  type-aliases-package: com.ks.goldcorn.pojo.DO
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
redis:
  #172.16.16.3
  #193.112.34.40
  host: 118.195.138.153
  port: 6379
  password: 123456
  timeout: 5000
  lettuce:
    pool:
      max-active: 1024
      max-wait: 10000ms
      max-idle: 200
      time-between-eviction-runs: 60000ms
      min-idle: 8
  jedis:
    pool:
      max-wait: 10000
      max-idle: 200
      max-total: 1024
  database: 4
dubbo:
  application:
    name: lijin-provider
  registry:
    protocol: zookeeper
    address: zookeeper://193.112.35.168:2181
    address: zookeeper://193.112.35.168:2182
    #    address: zookeeper://118.195.138.153:2181
    client: curator
  protocol:
    name: dubbo
    port: 20902
    host: 192.168.3.122
  scan:
    base-packages: com.ks.lijin.service.remote
  provider:
@@ -106,4 +112,24 @@
      ks:
        lijin:
          mapper: debug
    org.springframework.data.mongodb.core: DEBUG
    org.springframework.data.mongodb.core: DEBUG
log:
  config:
    kafka:
      isSend: true
      # kafka的地址,使用时必须配置
      bootstrapServers: 172.16.16.38:9092
      # 日志发往的topic,使用时必须配置
      topic: log_service_lijin_info
      # 批量上传数目,达到该数目后发送
      batchSize: 5
      # 间隔时间后发送,即使未达到批量上传最大数,间隔时间到了也会发送,单位为毫秒
      lingerMs: 1000
      # 数据压缩类型
      compressionType: gzip
      # 重试次数
      retries: 3
      #最大消息大小,此处设为5M
      maxRequestSize: 5242880
service-lijin/src/main/resources/logback.xml
@@ -70,6 +70,27 @@
        </encoder>
    </appender>
    <appender name="KAFKA" class="org.yeshi.utils.log.KafkaAppender" >
        <!-- encoder必须配置, 日志格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>-->
            <!--%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %green([%thread]) %boldMagenta(%logger{10}) - %cyan(%msg%n)-->
            <!--</pattern>-->
            <!--为了便于分析将日志数据转为json格式-->
            <pattern>${log.pattern}</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
        <bootstrapServers>${bootstrapServers}</bootstrapServers>
        <topic>${topic}</topic>
        <batchSize>${batchSize}</batchSize>
        <lingerMs>${lingerMs}</lingerMs>
        <compressionType>${compressionType}</compressionType>
        <retries>${retries}</retries>
        <maxRequestSize>${maxRequestSize}</maxRequestSize>
        <isSend>${isSend}</isSend>
    </appender>
    <!--name表示为哪一个logger指定层级和输出的方式
       additivity表示叠加祖先的输出方式(默认为true,会叠加),所以com.lxc.o2o以及其子类都会输出在控制台中,因为这个logger继承了root中的appender
       level表示级别大于等于${log.level}的信息才会输出,输出方式为配置的appender,
@@ -86,7 +107,7 @@
    <!--<logger name="activityJoinLogger" level="INFO" additivity="true">-->
        <!--<appender-ref ref="activityJoinAppender"></appender-ref>-->
    <!--</logger>-->
    <logger name="org.springframework.data.redis.core" level="INFO" additivity="false">
    <logger name="org.springframework.data.redis.core" level="DEBUG" additivity="true">
        <appender-ref ref="redisAppender"></appender-ref>
    </logger>
@@ -94,6 +115,7 @@
        <!--在控制台中输出所在层级对应level(以及大于level)的日志信息,因为这里并没有设置LevelFilter-->
        <appender-ref ref="STDOUT"></appender-ref>
        <appender-ref ref="infoAppender"></appender-ref>
        <appender-ref ref="KAFKA"></appender-ref>
        <appender-ref ref="errorAppender"></appender-ref>
    </root>
</configuration>
service-lijin/src/test/java/com/ks/LuckyTest.java
@@ -11,6 +11,8 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.yeshi.utils.TimeUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
import java.util.*;
@@ -30,10 +32,21 @@
    @Resource
    private LiJinProviderAccountService liJinProviderAccountService;
    @Resource
    private JedisPool jedisPool;
    @Test
    public void test() {
        String key = "createtblijin-tejia-6872490";
        System.out.println(redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS));
        Jedis jedis = jedisPool.getResource();
        try {
            System.out.println(jedis.setnx(key, "1"));
            jedis.expire(key, 120);
        } finally {
            jedis.close();
        }
    }
    @Test
service-vip/src/main/java/com/ks/vip/service/remote/LijinBalanceServiceImpl.java
@@ -7,6 +7,8 @@
import com.ks.vip.pojo.DO.UserLijinRecord;
import com.ks.vip.service.LijinBalanceService;
import org.apache.dubbo.config.annotation.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.TimeUtil;
@@ -18,6 +20,8 @@
@Service(version = "1.0")
public class LijinBalanceServiceImpl implements LijinBalanceService {
    Logger logger = LoggerFactory.getLogger(LijinBalanceService.class);
    @Resource
    private LijinBalanceMapper lijinBalanceMapper;
@@ -76,10 +80,13 @@
        userLijinRecordDao.save(record);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void consumeLijin(String uid, BigDecimal money, String title, String category, String identifyCode) throws LijinBalanceException {
        logger.info("开始扣除礼金");
        //添加记录
        LijinBalance lijinBalance = lijinBalanceMapper.selectByPrimaryKeyForUpdate(uid);
        logger.info("用户礼金锁定成功");
        if (lijinBalance == null) {
            throw new LijinBalanceException(LijinBalanceException.CODE_NOT_INIT, "余额未初始化");
        }
@@ -94,6 +101,7 @@
        update.setBalance(lijinBalance.getBalance().subtract(money));
        update.setUpdateTime(new Date());
        lijinBalanceMapper.updateByPrimaryKeySelective(update);
        logger.info("减余额成功");
        //增加记录
        UserLijinRecord record = new UserLijinRecord();
        record.setMoney(money);
@@ -105,7 +113,7 @@
        record.setCreateTime(new Date());
        record.setIdentifyCode(identifyCode);
        userLijinRecordDao.save(record);
        logger.info("增加记录成功");
    }
    @Override
service-vip/src/main/java/com/ks/vip/service/remote/LijinRecordServiceImpl.java
@@ -1,14 +1,13 @@
package com.ks.vip.service.remote;
import com.alibaba.dubbo.config.annotation.Service;
import com.ks.vip.dao.UserLijinRecordDao;
import com.ks.vip.pojo.DO.UserLijinRecord;
import com.ks.vip.service.LijinRecordService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.data.domain.Sort;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@Service(version = "1.0")
service-vip/src/main/java/com/ks/vip/service/remote/VipCenterRecordServiceImpl.java
@@ -1,13 +1,12 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.mapper.VipCenterRecordMapper;
import com.ks.vip.mapper.VipOrderMapper;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipCenterRecord;
import com.ks.vip.pojo.DO.VipOrder;
import com.ks.vip.service.VipCenterRecordService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
service-vip/src/main/java/com/ks/vip/service/remote/VipCenterServiceImpl.java
@@ -1,18 +1,21 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.exception.VipCenterException;
import com.ks.vip.mapper.VipCenterMapper;
import com.ks.vip.mapper.VipCenterRecordMapper;
import com.ks.vip.mapper.VipComboMapper;
import com.ks.vip.pojo.DO.*;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipCenterRecord;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.DO.VipGradePotence;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.query.VipCenterQuery;
import com.ks.vip.query.VipComboQuery;
import com.ks.vip.service.*;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.service.VipCenterRecordService;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipGradePotenceService;
import com.ks.vip.service.VipGradeService;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.StringUtil;
import javax.annotation.Resource;
service-vip/src/main/java/com/ks/vip/service/remote/VipComboServiceImpl.java
@@ -1,6 +1,7 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.mapper.VipComboMapper;
import com.ks.vip.pojo.DO.VipCombo;
import com.ks.vip.pojo.DO.VipGrade;
@@ -8,7 +9,6 @@
import com.ks.vip.query.VipComboQuery;
import com.ks.vip.service.VipComboService;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.List;
service-vip/src/main/java/com/ks/vip/service/remote/VipGradePotenceServiceImpl.java
@@ -1,17 +1,15 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.exception.VipGradePotenceException;
import com.ks.vip.mapper.VipGradePotenceMapper;
import com.ks.vip.mapper.VipGradePotenceMapper;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.DO.VipGradePotence;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.query.VipGradePotenceQuery;
import com.ks.vip.service.VipGradePotenceService;
import com.ks.vip.service.VipGradePotenceService;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.Date;
service-vip/src/main/java/com/ks/vip/service/remote/VipGradeServiceImpl.java
@@ -1,12 +1,12 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.mapper.VipGradeMapper;
import com.ks.vip.pojo.DO.VipGrade;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.query.VipGradeQuery;
import com.ks.vip.service.VipGradeService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
import java.util.List;
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java
@@ -1,5 +1,6 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.ks.vip.exception.OrderPayException;
@@ -16,7 +17,6 @@
import com.ks.vip.service.VipOrederPayService;
import com.ks.vip.util.Constant;
import com.ks.vip.util.PayUtil;
import org.apache.dubbo.config.annotation.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderServiceImpl.java
@@ -1,25 +1,20 @@
package com.ks.vip.service.remote;
import org.apache.dubbo.config.annotation.Service;
import com.ks.vip.exception.VipOrderException;
import com.ks.vip.mapper.VipOrderMapper;
import com.ks.vip.pojo.DO.VipCenter;
import com.ks.vip.pojo.DO.VipCombo;
import com.ks.vip.pojo.DO.VipOrder;
import com.ks.vip.pojo.DTO.VipOrderDTO;
import com.ks.vip.pojo.Enums.OrderTypeEnum;
import com.ks.vip.query.VipOrderQuery;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipComboService;
import com.ks.vip.service.VipGradeService;
import com.ks.vip.service.VipOrederService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.TimeUtil;
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
service-vip/src/main/resources/application-pro.yml
@@ -78,6 +78,9 @@
  registry:
    protocol: zookeeper
    address: zookeeper://172.16.16.46:2181
    #    protocol: tsfconsul
    #    address: tsfconsul://127.0.0.1:8500
    client: curator
  protocol:
    name: dubbo
@@ -104,4 +107,22 @@
      ks:
        vip:
          mapper: debug
    org.springframework.data.mongodb.core: DEBUG
    org.springframework.data.mongodb.core: DEBUG
log:
  config:
    kafka:
      isSend: true
      # kafka的地址,使用时必须配置
      bootstrapServers: 172.16.16.38:9092
      # 日志发往的topic,使用时必须配置
      topic: log_service_vip_info
      # 批量上传数目,达到该数目后发送
      batchSize: 5
      # 间隔时间后发送,即使未达到批量上传最大数,间隔时间到了也会发送,单位为毫秒
      lingerMs: 1000
      # 数据压缩类型
      compressionType: gzip
      # 重试次数
      retries: 3
      #最大消息大小,此处设为5M
      maxRequestSize: 5242880
service-vip/src/main/resources/application-test.yml
@@ -13,13 +13,13 @@
      enabled: true
  data:
    mongodb:
      username: admin
      password: admin
      username: yeshi
      password: Yeshi2016@
      #172.16.16.44
      #193.112.35.168
      host: 118.195.138.153
      port: 27017
      database: lijin
      host: 193.112.35.168
      port: 27016
      database: tejia-vip
      authentication-database: admin
  datasource:
    #gz-cdb-r13d0yi9.sql.tencentcdb.com:62929
@@ -72,11 +72,12 @@
    name: lijin-provider
  registry:
    protocol: zookeeper
    address: zookeeper://193.112.35.168:2181
    address: zookeeper://193.112.35.168:2182
    client: curator
  protocol:
    name: dubbo
    port: 20903
    host: 192.168.3.122
  scan:
    base-packages: com.ks.vip.service.remote
  provider:
@@ -99,4 +100,24 @@
      ks:
        vip:
          mapper: debug
    org.springframework.data.mongodb.core: DEBUG
    org.springframework.data.mongodb.core: DEBUG
#  config: classpath:logback.xml
log:
  config:
    kafka:
      isSend: true
      # kafka的地址,使用时必须配置
      bootstrapServers: 134.175.68.214:9092
      # 日志发往的topic,使用时必须配置
      topic: log_service_vip_info
      # 批量上传数目,达到该数目后发送
      batchSize: 5
      # 间隔时间后发送,即使未达到批量上传最大数,间隔时间到了也会发送,单位为毫秒
      lingerMs: 1000
      # 数据压缩类型
      compressionType: gzip
      # 重试次数
      retries: 3
      #最大消息大小,此处设为5M
      maxRequestSize: 5242880
service-vip/src/main/resources/logback.xml
@@ -84,6 +84,45 @@
        </encoder>
    </appender>
    <!-- 读取配置文件中kafka的信息 -->
    <springProperty scope="context" name="isSend"
                    source="log.config.kafka.isSend" defalutValue="false"/>
    <springProperty scope="context" name="bootstrapServers"
                    source="log.config.kafka.bootstrapServers" defalutValue="localhost:9092"/>
    <springProperty scope="context" name="topic"
                    source="log.config.kafka.topic" defalutValue="springbootLoggerInfo"/>
    <springProperty scope="context" name="batchSize"
                    source="log.config.kafka.batchSize" defalutValue="1"/>
    <springProperty scope="context" name="lingerMs"
                    source="log.config.kafka.lingerMs" defalutValue="1000"/>
    <springProperty scope="context" name="compressionType"
                    source="log.config.kafka.compressionType" defalutValue="gzip"/>
    <springProperty scope="context" name="retries"
                    source="log.config.kafka.retries" defalutValue="3"/>
    <springProperty scope="context" name="maxRequestSize"
                    source="log.config.kafka.maxRequestSize" defalutValue="5242880"/>
    <appender name="KAFKA" class="org.yeshi.utils.log.KafkaAppender" >
        <!-- encoder必须配置, 日志格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>-->
            <!--%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %green([%thread]) %boldMagenta(%logger{10}) - %cyan(%msg%n)-->
            <!--</pattern>-->
            <!--为了便于分析将日志数据转为json格式-->
            <pattern>${log.pattern}</pattern>
            <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
            <charset>UTF-8</charset>
        </encoder>
        <bootstrapServers>${bootstrapServers}</bootstrapServers>
        <topic>${topic}</topic>
        <batchSize>${batchSize}</batchSize>
        <lingerMs>${lingerMs}</lingerMs>
        <compressionType>${compressionType}</compressionType>
        <retries>${retries}</retries>
        <maxRequestSize>${maxRequestSize}</maxRequestSize>
        <isSend>${isSend}</isSend>
    </appender>
    <!--name表示为哪一个logger指定层级和输出的方式
       additivity表示叠加祖先的输出方式(默认为true,会叠加),所以com.lxc.o2o以及其子类都会输出在控制台中,因为这个logger继承了root中的appender
       level表示级别大于等于${log.level}的信息才会输出,输出方式为配置的appender,
service-vip/src/main/resources/mapper/LijinBalanceMapper.xml
@@ -11,11 +11,11 @@
    <sql id="Base_Column_List">id,balance,create_time,update_time</sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String">select
        <include refid="Base_Column_List"/>
        from lijin_balance where id = #{id,jdbcType=BIGINT}
        from lijin_balance where id = #{id,jdbcType=VARCHAR}
    </select>
    <select id="selectByPrimaryKeyForUpdate" resultMap="BaseResultMap" parameterType="java.lang.String">select
        <include refid="Base_Column_List"/>
        from lijin_balance where id = #{id,jdbcType=BIGINT} for update
        from lijin_balance where  id = #{id,jdbcType=VARCHAR} for update
    </select>
    <sql id="listWhereSQL">
@@ -41,7 +41,7 @@
        <include refid="listWhereSQL"/>
    </select>
    <delete id="deleteByPrimaryKey"
            parameterType="java.lang.Long">delete from lijin_balance where id = #{id,jdbcType=BIGINT}</delete>
            parameterType="java.lang.Long">delete from lijin_balance where id = #{id,jdbcType=VARCHAR}</delete>
    <insert id="insert" parameterType="com.ks.vip.pojo.DO.LijinBalance" useGeneratedKeys="true"
            keyProperty="id">insert into lijin_balance (id,balance,create_time,update_time) values (#{id,jdbcType=VARCHAR},#{balance,jdbcType=DECIMAL},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})</insert>
    <insert id="insertSelective" parameterType="com.ks.vip.pojo.DO.LijinBalance" useGeneratedKeys="true"