| | |
| | | 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 |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
New file |
| | |
| | | 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 |
| | |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | @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; |
| | | |
| | |
| | | public enum VIPEnum { |
| | | |
| | | silver("白银"), |
| | | platinum("铂金"); |
| | | platinum("铂金"), |
| | | diamond("钻石"); |
| | | |
| | | private final String desc; |
| | | |
| | |
| | | <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> |
| | |
| | | <name>nexus</name> |
| | | <url>http://193.112.35.168:8081/nexus/content/groups/public/</url> |
| | | </repository> |
| | | |
| | | </repositories> |
| | | |
| | | <dependencies> |
| | |
| | | <dependency> |
| | | <groupId>com.yeshi</groupId> |
| | | <artifactId>utils</artifactId> |
| | | <version>0.0.8</version> |
| | | <version>0.0.9</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>org.slf4j</groupId> |
| | |
| | | </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> |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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<>(); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | @RequestMapping("redis") |
| | | public String testRedis(String uid) throws Exception { |
| | | String key = "createtblijin-" + uid; |
| | | try { |
| | | if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) { |
| | | return "锁定成功"; |
| | | } else { |
| | | throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试"); |
| | | return "服务器繁忙,请稍后再试"; |
| | | } |
| | | |
| | | } finally { |
| | | redisTemplate.delete(key); |
| | | } |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | 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 { |
| | | } |
| | | |
| | | } |
| | |
| | | * @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); |
| | | |
| | | |
| | | /** |
| | |
| | | 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; |
| | |
| | | |
| | | @Resource |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Resource |
| | | private JedisPool jedisPool; |
| | | |
| | | |
| | | /** |
| | |
| | | //获取账号当日的商品数量 |
| | | 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); |
New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | 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; |
| | |
| | | @Resource |
| | | private LiJinProviderAccountMapper liJinProviderAccountMapper; |
| | | |
| | | @Resource |
| | | private LijinDangerSellerManager lijinDangerSellerManager; |
| | | |
| | | @Reference(version = "1.0", check = false) |
| | | private LijinBalanceService lijinBalanceService; |
| | | |
| | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | try { |
| | | lijinDangerSellerManager.processOrder(taoBaoOrderRecord); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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") |
| | |
| | | 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; |
| | |
| | | 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") |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | private LiJinProviderTaoKeAccountManager liJinProviderTaoKeAccountManager; |
| | | |
| | | @Resource |
| | | private StringRedisTemplate redisTemplate; |
| | | private RedisTemplate redisTemplate; |
| | | |
| | | @Resource |
| | | private LijinGoodsManager lijinGoodsManager; |
| | |
| | | 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) { |
| | |
| | | throw new LiJinGoodsException(LiJinGoodsException.CODE_GOODS_NOT_SUPPORT, "该商品暂无法创建礼金"); |
| | | } |
| | | |
| | | |
| | | // 获取用户等级 |
| | | VIPEnum vipRank = vipCenterService.getVIPEnumByUid(uid); |
| | | if (vipRank == null) { |
| | |
| | | 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); |
| | | |
| | |
| | | |
| | | //用户创建淘礼金为单线程操作 |
| | | String key = "createtblijin-" + uid; |
| | | if (redisTemplate.opsForValue().setIfAbsent(key, "1", 120, TimeUnit.SECONDS)) { |
| | | |
| | | 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); |
| | | } |
| | | redisTemplate.delete(key); |
| | | jedis.del(key); |
| | | logger.info("淘礼金创建,删除锁定成功1 key:{}",key); |
| | | throw e; |
| | | } finally { |
| | | redisTemplate.delete(key); |
| | | jedis.del(key); |
| | | logger.info("淘礼金创建,删除锁定成功2 key:{}",key); |
| | | } |
| | | } else { |
| | | logger.error("淘礼金创建,用户锁定失败 key:{}",key); |
| | | throw new LiJinException(LiJinException.CODE_SERVER_BUSY, "服务器繁忙,请稍后再试"); |
| | | } |
| | | } finally { |
| | | jedis.close(); |
| | | } |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | if (listAccount == null || listAccount.size() == 0) { |
| | | throw new LiJinException(1, "没有可用的供应商账号"); |
| | | } |
| | | logger.info("获取供应商淘礼金账号成功"); |
| | | |
| | | // 遍历账号 用可使用账号 |
| | | for (LiJinProviderTaoKeAccount account : listAccount) { |
| | |
| | | //创建礼金 |
| | | return new TaoLijinCreateResultDTO(account, executeTaoLiJinAPI(goodsId, lijinAmount, params)); |
| | | } catch (LiJinAccountException e) {// 账号问题 |
| | | logger.info("获取供应商淘礼账号出错:{}", e.getMessage()); |
| | | //更新账号的错误信息 |
| | | LiJinProviderTaoKeAccount update = new LiJinProviderTaoKeAccount(); |
| | | update.setId(account.getId()); |
| | |
| | | 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: |
| | |
| | | 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 |
| | |
| | | scan: |
| | | base-packages: com.ks.lijin.service.remote |
| | | provider: |
| | | timeout: 10000 |
| | | timeout: 30000 |
| | | # host: 193.112.35.168 |
| | | xxl: |
| | | job: |
| | |
| | | lijin: |
| | | mapper: 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 |
| | |
| | | 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 |
| | | host: 193.112.35.168 |
| | | port: 6380 |
| | | password: crs-43yhgz0i:Yeshi2016@ |
| | | timeout: 5000ms |
| | | lettuce: |
| | | pool: |
| | | max-active: 1024 |
| | |
| | | min-idle: 8 |
| | | jedis: |
| | | pool: |
| | | max-wait: 10000 |
| | | 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 |
| | | |
| | | |
| | | |
| | | 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: |
| | |
| | | lijin: |
| | | mapper: 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 |
| | |
| | | </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, |
| | |
| | | <!--<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> |
| | | |
| | |
| | | <!--在控制台中输出所在层级对应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> |
| | |
| | | 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.*; |
| | |
| | | @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 |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | @Service(version = "1.0") |
| | | public class LijinBalanceServiceImpl implements LijinBalanceService { |
| | | |
| | | Logger logger = LoggerFactory.getLogger(LijinBalanceService.class); |
| | | |
| | | @Resource |
| | | private LijinBalanceMapper lijinBalanceMapper; |
| | |
| | | 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, "余额未初始化"); |
| | | } |
| | |
| | | update.setBalance(lijinBalance.getBalance().subtract(money)); |
| | | update.setUpdateTime(new Date()); |
| | | lijinBalanceMapper.updateByPrimaryKeySelective(update); |
| | | logger.info("减余额成功"); |
| | | //增加记录 |
| | | UserLijinRecord record = new UserLijinRecord(); |
| | | record.setMoney(money); |
| | |
| | | record.setCreateTime(new Date()); |
| | | record.setIdentifyCode(identifyCode); |
| | | userLijinRecordDao.save(record); |
| | | |
| | | logger.info("增加记录成功"); |
| | | } |
| | | |
| | | @Override |
| | |
| | | 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") |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | registry: |
| | | protocol: zookeeper |
| | | address: zookeeper://172.16.16.46:2181 |
| | | # protocol: tsfconsul |
| | | # address: tsfconsul://127.0.0.1:8500 |
| | | |
| | | client: curator |
| | | protocol: |
| | | name: dubbo |
| | |
| | | vip: |
| | | mapper: 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 |
| | |
| | | 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 |
| | |
| | | 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: |
| | |
| | | vip: |
| | | mapper: 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 |
| | |
| | | </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, |
| | |
| | | <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"> |
| | |
| | | <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" |