admin
2021-06-30 0912f56a392bdf48315747c64ec0c18bf0aa29a6
礼金红包兼容
7个文件已修改
4个文件已添加
836 ■■■■ 已修改文件
fanli/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/LijinHongBaoController.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/UserControllerLijin.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/lijin/dto/LijinSendInfo.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/lijin/manager/UserLijinMnager.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/lijin/manager/UserLijinSendManager.java 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/lijin/vo/LijinRecordVO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/pom.xml
@@ -212,13 +212,13 @@
        <dependency>
            <groupId>com.ks</groupId>
            <artifactId>facade-vip</artifactId>
            <version>0.1.4</version>
            <version>0.1.7</version>
        </dependency>
        <dependency>
            <groupId>com.ks</groupId>
            <artifactId>facade-lijin</artifactId>
            <version>0.0.7</version>
            <version>0.0.8</version>
        </dependency>
        <dependency>
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/GoodsControllerLijin.java
@@ -27,6 +27,7 @@
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.lijin.manager.GoodsLijinMnager;
import com.yeshi.fanli.lijin.manager.UserLijinMnager;
import com.yeshi.fanli.lijin.manager.UserLijinSendManager;
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
import com.yeshi.fanli.service.inter.pdd.PDDAuthService;
@@ -92,6 +93,9 @@
    private UserLijinMnager userLijinMnager;
    @Resource
    private UserLijinSendManager userLijinSendManager;
    @Resource
    private PIDManager pidManager;
    @Resource
    private ScanHistoryV2Service scanHistoryV2Service;
@@ -121,6 +125,18 @@
        switch (goodsType) {
            case Constant
                    .SOURCE_TYPE_TAOBAO:
                if (uid != null) {
                    ThreadUtil.run(new Runnable() {
                        @Override
                        public void run() {
                            //小于10块自动发放奖金
                            userLijinSendManager.autoSendLijin(uid, new BigDecimal(10));
                        }
                    });
                }
                TaoBaoGoodsBrief goods = getTaoBaoGoods(Long.parseLong(goodsId));
@@ -279,6 +295,14 @@
            UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
            try {
                userLijinSendManager.autoSendLijin(uid, new BigDecimal(10));
                userLijinSendManager.autoRecieveLijin(acceptData.getSystem(), acceptData.getDevice(), uid);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                LiJinExpendRecord record = goodsLijinMnager.createTBLijin(Long.parseLong(goodsId), uid, new Date(user.getCreatetime()));
                String sendUrl = record.getSendUrl();
                if (StringUtil.isNullOrEmpty(sendUrl)) {
@@ -304,6 +328,9 @@
                out.print(JsonUtil.loadFalseResult(e.getMsg()));
                return;
            } catch (LiJinUserException e) {
                if (e.getCode() == LiJinUserException.CODE_USER_BALANCE_NOT_ENOUGH) {
                    //TODO 余额不足
                }
                out.print(JsonUtil.loadFalseResult(2001, "今日领取红包次数超限"));
                return;
            }
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/LijinHongBaoController.java
New file
@@ -0,0 +1,160 @@
package com.yeshi.fanli.controller.client.lijin;
import com.google.gson.*;
import com.ks.vip.exception.OrderPayException;
import com.ks.vip.exception.VipOrderException;
import com.ks.vip.pojo.DO.*;
import com.ks.vip.pojo.DTO.PayWayInfoDTO;
import com.ks.vip.pojo.Enums.OrderTypeEnum;
import com.ks.vip.pojo.Enums.PayWayEnum;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.ks.vip.service.LijinRecordService;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.lijin.dto.LijinSendInfo;
import com.yeshi.fanli.lijin.dto.TodayLijinCreatedInfo;
import com.yeshi.fanli.lijin.manager.UserLijinMnager;
import com.yeshi.fanli.lijin.manager.UserLijinSendManager;
import com.yeshi.fanli.lijin.vo.LijinRecordVO;
import com.yeshi.fanli.lijin.vo.VIPGradeVO;
import com.yeshi.fanli.lijin.vo.VipRecordVO;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.Constant;
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.yeshi.utils.*;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("api/lijin/hongbao")
public class LijinHongBaoController {
    @Resource
    private UserLijinMnager userLijinMnager;
    @Resource
    private UserLijinSendManager userLijinSendManager;
    @Resource
    private ConfigService configService;
    /**
     * 获取红包
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping("getSendingHongBao")
    public void getSendingHongBao(AcceptData acceptData, Long uid, PrintWriter out) {
        LijinSendInfo lijinSendInfo = userLijinSendManager.getSendingLijinInfo(acceptData.getSystem(), acceptData.getDevice(), uid);
        if (lijinSendInfo == null) {
            userLijinSendManager.sendLijin(acceptData.getSystem(), acceptData.getDevice(), uid, new BigDecimal(10));
            lijinSendInfo = userLijinSendManager.getSendingLijinInfo(acceptData.getSystem(), acceptData.getDevice(), uid);
        }
        if (lijinSendInfo == null) {
            out.print(JsonUtil.loadFalseResult("无红包"));
            return;
        }
        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
            @Override
            public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
                return src == null ? new JsonPrimitive(0) : new JsonPrimitive(src.getTime());
            }
        }).create();
        out.print(JsonUtil.loadTrueResult(gson.toJson(lijinSendInfo)));
    }
    /**
     * 获取红包余额
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping("getHongBaoBalance")
    public void getHongBaoBalance(AcceptData acceptData, Long uid, PrintWriter out) {
        BigDecimal balance = userLijinMnager.getLijinBalance(uid);
        if (balance == null)
            balance = new BigDecimal(0);
        BigDecimal using = userLijinMnager.getUsingLijin(uid);
        if (using == null)
            using = new BigDecimal(0);
        String recordLink = configService.getValue(ConfigKeyEnum.lijinRecordLink, acceptData.getSystem());
        JSONObject data = new JSONObject();
        data.put("balance", balance);
        data.put("using", using);
        data.put("recordLink", recordLink);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 获取红包记录
     *
     * @param acceptData
     * @param uid
     * @param out
     */
    @RequestMapping("getHongBaoRecordList")
    public void getHongBaoRecordList(AcceptData acceptData, Long uid, Integer type, int page, PrintWriter out) {
        List<UserLijinRecord> recordList = userLijinMnager.getLijinRecord(uid, type, page, Constant.PAGE_SIZE);
        List<LijinRecordVO> voList = new ArrayList<>();
        for (UserLijinRecord record : recordList) {
            LijinRecordVO vo = new LijinRecordVO();
            vo.setCreateTime(record.getCreateTime());
            vo.setMoney(record.getMoney());
            vo.setTitle(record.getTitle());
            vo.setType(record.getType());
            voList.add(vo);
        }
        Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
            @Override
            public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
                return src == null ? new JsonPrimitive("") : new JsonPrimitive(TimeUtil.getGernalTime(src.getTime(), "yyyy.MM.dd HH:mm:ss"));
            }
        }).create();
        long count = userLijinMnager.countLijinRecord(uid, type);
        JSONObject data = new JSONObject();
        data.put("count", count);
        data.put("list", gson.toJson(voList));
        out.print(JsonUtil.loadTrueResult(data));
    }
    @RequestMapping("recieveHongBao")
    public void recieveHongBao(AcceptData acceptData, Long uid, String id, PrintWriter out) {
        try {
            LijinSendInfo lijinSendInfo = userLijinSendManager.recieveLijin(id, uid);
            JSONObject data = new JSONObject();
            data.put("url", configService.getValue(ConfigKeyEnum.lijinRecievedSuccessLink, acceptData.getSystem()).replace("{name}", lijinSendInfo.getName()).replace("{money}", lijinSendInfo.getMoney() + ""));
            out.print(JsonUtil.loadTrueResult(data));
            return;
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult(e.getMessage()));
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/lijin/UserControllerLijin.java
@@ -295,4 +295,6 @@
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java
@@ -754,107 +754,111 @@
        List<TaoBaoGoodsBrief> goodsBriefList = new ArrayList<>();
        int count = 0;
        if (goodsId != null) {
            try {
                TaoBaoGoodsBrief goods = TaoKeApiUtil.searchGoodsDetail(goodsId);
                goods.setCreatetime(null);
                goodsBriefList.add(goods);
                count = 1;
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
        } else {
            SearchFilter sf = new SearchFilter();
            sf.setKey(SearchFilterUtil.filterSearchContent(key));
            sf.setPage(page);
            sf.setPageSize(Constant.PAGE_SIZE);
            if (order != null) {
                if (order == 1) { // 销量高到低
                    sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW);
                } else if (order == 2) { // 价格高到低
                    sf.setSort(TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW);
                } else if (order == 3) { // 价格低到高
                    sf.setSort(TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH);
                } else if (order == 4) { // 返利比高到低
                    sf.setSort(TaoBaoUtil.SORT_TKRATE_HIGH_TO_LOW);
                }
            }
            if (!StringUtil.isNullOrEmpty(filter)) {
                JSONObject jsonfilter = JSONObject.fromObject(filter);
                Boolean coupon = jsonfilter.optBoolean("coupon");
                if (coupon != null && coupon) {
                    sf.setQuan(1); // 有券
                }
                Boolean tmall = jsonfilter.optBoolean("tmall");
                if (tmall != null && tmall) {
                    sf.setTmall(true); // 天猫
                }
                String minPrice = jsonfilter.optString("minPrice");
                if (!StringUtil.isNullOrEmpty(minPrice)) {
                    sf.setStartPrice(new BigDecimal(minPrice));
                }
                String maxPrice = jsonfilter.optString("maxPrice");
                if (!StringUtil.isNullOrEmpty(maxPrice)) {
                    sf.setEndPrice(new BigDecimal(maxPrice));
                }
            }
            // 搜索大淘客
            List<DaTaoKeDetailV2> daTaoKeList = null;
            if (page == 1) {
                daTaoKeList = daTaoKeGoodsDetailV2Service.listByDtitle(key);
            }
            String specialId = null;
            if (uid != null) {
                specialId = userExtraTaoBaoInfoService.getSpecialIdByUid(uid);
            }
            // 淘宝api搜索商品
            TaoBaoSearchResult result = taoBaoGoodsCacheUtil.getSearchResult(sf); // TaoBaoUtil.search(sf, specialId, null);
            if (result == null) {
                result = TaoBaoUtil.search(sf, specialId, null);
                taoBaoGoodsCacheUtil.saveSearchResult(sf, result);
            }
            TaoBaoSearchResult finalResult = result;
            // 搜索结果缓存到redis
            if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) {
                ThreadUtil.run(new Runnable() {
                    @Override
                    public void run() {
                        // 更新到緩存
                        for (TaoBaoGoodsBrief goods : finalResult.getTaoBaoGoodsBriefs())
                            taoBaoGoodsCacheUtil.saveCommonTaoBaoGoodsInfo(goods);
                    }
                });
            }
            List<TaoBaoGoodsBrief> taoBaoGoodsBriefs = null;
            if (result != null) {
                taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs();
            }
            if (taoBaoGoodsBriefs == null) {
                taoBaoGoodsBriefs = new ArrayList<>();
            }
            if (daTaoKeList != null && daTaoKeList.size() > 0) {
        try {
            if (goodsId != null) {
                try {
                    Collections.reverse(daTaoKeList);
                    for (DaTaoKeDetailV2 detail : daTaoKeList) {
                        taoBaoGoodsBriefs.add(0, TaoBaoUtil.convert(detail));
                    }
                } catch (Exception e) {
                    TaoBaoGoodsBrief goods = TaoKeApiUtil.searchGoodsDetail(goodsId);
                    goods.setCreatetime(null);
                    goodsBriefList.add(goods);
                    count = 1;
                } catch (TaobaoGoodsDownException e) {
                    e.printStackTrace();
                }
            }
            } else {
                SearchFilter sf = new SearchFilter();
                sf.setKey(SearchFilterUtil.filterSearchContent(key));
                sf.setPage(page);
                sf.setPageSize(Constant.PAGE_SIZE);
            count = result.getTaoBaoHead().getDocsfound();
            if (taoBaoGoodsBriefs != null)
                goodsBriefList.addAll(taoBaoGoodsBriefs);
                if (order != null) {
                    if (order == 1) { // 销量高到低
                        sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW);
                    } else if (order == 2) { // 价格高到低
                        sf.setSort(TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW);
                    } else if (order == 3) { // 价格低到高
                        sf.setSort(TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH);
                    } else if (order == 4) { // 返利比高到低
                        sf.setSort(TaoBaoUtil.SORT_TKRATE_HIGH_TO_LOW);
                    }
                }
                if (!StringUtil.isNullOrEmpty(filter)) {
                    JSONObject jsonfilter = JSONObject.fromObject(filter);
                    Boolean coupon = jsonfilter.optBoolean("coupon");
                    if (coupon != null && coupon) {
                        sf.setQuan(1); // 有券
                    }
                    Boolean tmall = jsonfilter.optBoolean("tmall");
                    if (tmall != null && tmall) {
                        sf.setTmall(true); // 天猫
                    }
                    String minPrice = jsonfilter.optString("minPrice");
                    if (!StringUtil.isNullOrEmpty(minPrice)) {
                        sf.setStartPrice(new BigDecimal(minPrice));
                    }
                    String maxPrice = jsonfilter.optString("maxPrice");
                    if (!StringUtil.isNullOrEmpty(maxPrice)) {
                        sf.setEndPrice(new BigDecimal(maxPrice));
                    }
                }
                // 搜索大淘客
                List<DaTaoKeDetailV2> daTaoKeList = null;
                if (page == 1) {
                    daTaoKeList = daTaoKeGoodsDetailV2Service.listByDtitle(key);
                }
                String specialId = null;
                if (uid != null) {
                    specialId = userExtraTaoBaoInfoService.getSpecialIdByUid(uid);
                }
                // 淘宝api搜索商品
                TaoBaoSearchResult result = taoBaoGoodsCacheUtil.getSearchResult(sf); // TaoBaoUtil.search(sf, specialId, null);
                if (result == null) {
                    result = TaoBaoUtil.search(sf, specialId, null);
                    taoBaoGoodsCacheUtil.saveSearchResult(sf, result);
                }
                TaoBaoSearchResult finalResult = result;
                // 搜索结果缓存到redis
                if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) {
                    ThreadUtil.run(new Runnable() {
                        @Override
                        public void run() {
                            // 更新到緩存
                            for (TaoBaoGoodsBrief goods : finalResult.getTaoBaoGoodsBriefs())
                                taoBaoGoodsCacheUtil.saveCommonTaoBaoGoodsInfo(goods);
                        }
                    });
                }
                List<TaoBaoGoodsBrief> taoBaoGoodsBriefs = null;
                if (result != null) {
                    taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs();
                }
                if (taoBaoGoodsBriefs == null) {
                    taoBaoGoodsBriefs = new ArrayList<>();
                }
                if (daTaoKeList != null && daTaoKeList.size() > 0) {
                    try {
                        Collections.reverse(daTaoKeList);
                        for (DaTaoKeDetailV2 detail : daTaoKeList) {
                            taoBaoGoodsBriefs.add(0, TaoBaoUtil.convert(detail));
                        }
                    } catch (Exception e) {
                    }
                }
                count = result.getTaoBaoHead().getDocsfound();
                if (taoBaoGoodsBriefs != null)
                    goodsBriefList.addAll(taoBaoGoodsBriefs);
            }
        } catch (Exception e) {
        }
        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -146,7 +146,7 @@
    searchDiscoveryKeys("search_discovery_keys", "搜索发现关键词"),
    searchDiscoveryH5Link("search_discovery_h5_link", "搜索发现h5连接"),
    autoExtractHelpUrl("auto_extract_help_url", "自动提现帮助链接"),
    homePageBgColors("home_page_bg_colors","首页背景颜色"),
    homePageBgColors("home_page_bg_colors", "首页背景颜色"),
    // 协议0
    userProtocolHomeData("user_protocol_home_data", "用户协议首页内容"),
    serviceProtocolLink("service_protocol_link", "服务协议"),
@@ -179,6 +179,9 @@
    vipLink("vip_link", "超级会员升级链接"), // 转移至VIPConfig 已废弃
    helpLinkVipInfo("help_link_vip_info", "超级会员详情页帮助链接"), // 已废弃
    lijinVIPLink("lijin_vip_link", "礼金会员链接"),
    lijinRecordLink("lijin_record_link", "礼金记录链接"),
    lijinRecievedSuccessLink("lijin_recieve_success_link", "礼金领取成功链接"),
    // 文案转链
    convertDocWebLink("convert_doc_web_link", "文案转链网页"),
fanli/src/main/java/com/yeshi/fanli/lijin/dto/LijinSendInfo.java
New file
@@ -0,0 +1,108 @@
package com.yeshi.fanli.lijin.dto;
import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.util.StringUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
public class LijinSendInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Expose
    private String id;
    @Expose
    private String name;
    private String category;
    private SystemEnum system;
    private String deviceId;
    @Expose
    private UserInfo user;
    @Expose
    private BigDecimal money;
    @Expose
    private Date expireTime;
    @Expose
    private String md5;
    public String getCategory() {
        return category;
    }
    public void setCategory(String category) {
        this.category = category;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public SystemEnum getSystem() {
        return system;
    }
    public void setSystem(SystemEnum system) {
        this.system = system;
    }
    public String getDeviceId() {
        return deviceId;
    }
    public void setDeviceId(String deviceId) {
        this.deviceId = deviceId;
    }
    public UserInfo getUser() {
        return user;
    }
    public void setUser(UserInfo user) {
        this.user = user;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public Date getExpireTime() {
        return expireTime;
    }
    public void setExpireTime(Date expireTime) {
        this.expireTime = expireTime;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String toMD5() {
        return StringUtil.Md5(new Gson().toJson(this));
    }
    public String getMd5() {
        return md5;
    }
    public void setMd5(String md5) {
        this.md5 = md5;
    }
}
fanli/src/main/java/com/yeshi/fanli/lijin/manager/UserLijinMnager.java
@@ -3,6 +3,7 @@
import com.ks.lijin.service.LiJinExpendRecordService;
import com.ks.lijin.service.LiJinLinkService;
import com.ks.lijin.service.LijinCreateService;
import com.ks.vip.exception.LijinBalanceException;
import com.ks.vip.exception.OrderPayException;
import com.ks.vip.exception.VipOrderException;
import com.ks.vip.pojo.DO.*;
@@ -29,11 +30,11 @@
@Component
public class UserLijinMnager {
   //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20904/com.ks.lijin.service.LijinCreateService")
    //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20904/com.ks.lijin.service.LijinCreateService")
    @Reference(version = "1.0", check = false)
    private LijinCreateService lijinCreateService;
   //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20902/com.ks.vip.service.VipCenterService")
    //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20902/com.ks.vip.service.VipCenterService")
    @Reference(version = "1.0", check = false)
    private VipCenterService vipCenterService;
@@ -41,12 +42,12 @@
    @Reference(version = "1.0", check = false)
    private VipCenterRecordService vipCenterRecordService;
   //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20902/com.ks.vip.service.VipGradePotenceService")
    //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20902/com.ks.vip.service.VipGradePotenceService")
    @Reference(version = "1.0", check = false)
    private VipGradePotenceService vipGradePotenceService;
   //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20902/com.ks.vip.service.VipGradeService")
    //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20902/com.ks.vip.service.VipGradeService")
    @Reference(version = "1.0", check = false)
    private VipGradeService vipGradeService;
@@ -54,11 +55,11 @@
    @Reference(version = "1.0", check = false)
    private VipComboService vipComboService;
   //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20904/com.ks.lijin.service.LiJinLinkService")
    //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20904/com.ks.lijin.service.LiJinLinkService")
    @Reference(version = "1.0", check = false)
    private LiJinLinkService liJinLinkService;
   //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20904/com.ks.lijin.service.LiJinExpendRecordService")
    //@Reference(version = "1.0", check = false, url = "dubbo://193.112.35.168:20904/com.ks.lijin.service.LiJinExpendRecordService")
    @Reference(version = "1.0", check = false)
    private LiJinExpendRecordService liJinExpendRecordService;
@@ -69,6 +70,13 @@
    //@Reference(version = "1.0", check = false,url="dubbo://193.112.35.168:20902/com.ks.vip.service.VipOrederPayService")
    @Reference(version = "1.0", check = false)
    private VipOrederPayService vipOrederPayService;
    //@Reference(version = "1.0", check = false,url="dubbo://193.112.35.168:20902/com.ks.vip.service.VipOrederPayService")
    @Reference(version = "1.0", check = false)
    private LijinBalanceService lijinBalanceService;
    @Reference(version = "1.0", check = false)
    private LijinRecordService lijinRecordService;
    @Resource
    private ConfigService configService;
@@ -288,5 +296,41 @@
        return vipOrederPayService.getAlipayPaySuccessOutOrderNo(params);
    }
    public void addLijin(Long uid, BigDecimal money, String title, String category) throws LijinBalanceException {
        lijinBalanceService.addLijin(getUid(uid), money, title, category, null);
    }
    public List<UserLijinRecord> getLijinRecord(Long uid, Integer type, int page, int pageSize) {
        return lijinRecordService.listRecord(getUid(uid), type, page, pageSize);
    }
    public long countLijinRecord(Long uid, Integer type) {
        return lijinRecordService.countRecord(getUid(uid), type);
    }
    public UserLijinRecord getLijinRecord(Long uid, Integer type, String category) {
        return lijinRecordService.getRecord(getUid(uid), type, category, null);
    }
    /**
     * 获取礼金余额
     *
     * @param uid
     * @return
     */
    public BigDecimal getLijinBalance(Long uid) {
        return lijinBalanceService.getBalance(getUid(uid));
    }
    /**
     * 获取使用中的礼金
     *
     * @param uid
     * @return
     */
    public BigDecimal getUsingLijin(Long uid) {
        return lijinBalanceService.getUsingLijin(getUid(uid));
    }
}
fanli/src/main/java/com/yeshi/fanli/lijin/manager/UserLijinSendManager.java
New file
@@ -0,0 +1,216 @@
package com.yeshi.fanli.lijin.manager;
import com.ks.vip.pojo.DO.UserLijinRecord;
import com.ks.vip.pojo.Enums.VIPEnum;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.push.DeviceActive;
import com.yeshi.fanli.lijin.dto.LijinSendInfo;
import com.yeshi.fanli.service.inter.push.DeviceActiveService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
/**
 * 用户礼金发放管理器
 */
@Component
public class UserLijinSendManager {
    @Resource
    private RedisManager redisManager;
    @Resource
    private DeviceActiveService deviceActiveService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private UserLijinMnager userLijinMnager;
    private String getRedisKey(SystemEnum system, String deviceId, Long uid) {
        String key = "lijinsend-" + system.name() + "-";
        if (uid != null) {
            key += "uid-" + uid;
        } else {
            key += "device-" + StringUtil.Md5(deviceId);
        }
        return key;
    }
    /**
     * 礼金发放
     *
     * @param system
     * @param deviceId
     * @param uid
     */
    public void sendLijin(SystemEnum system, String deviceId, Long uid, BigDecimal minMoney) {
        String key = getRedisKey(system, deviceId, uid);
        if (redisManager.hasKey(key)) {
            //还有未领取的礼金
            return;
        }
        if (uid == null) {
            //未登录
            //查询是否为新设备
            DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(deviceId);
            if (deviceActive == null || System.currentTimeMillis() - deviceActive.getCreateTime().getTime() < 1000 * 60 * 60 * 48L) {
                //新设备
                LijinSendInfo sendInfo = new LijinSendInfo();
                sendInfo.setExpireTime(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 48L));
                sendInfo.setDeviceId(deviceId);
                sendInfo.setMoney(new BigDecimal("188"));
                sendInfo.setName("新用户福利");
                sendInfo.setSystem(system);
                sendInfo.setUser(null);
                sendInfo.setId(key);
                sendInfo.setCategory(UserLijinRecord.Category.newer.name());
                sendInfo.setMd5(sendInfo.toMD5());
                redisManager.saveObj(sendInfo, key, 60 * 60 * 48);
                return;
            } else {
                //非新设备不发送
                return;
            }
        } else {
            //已登录
            //查询是否为新用户ID
            UserInfo userInfo = userInfoService.getUserByIdWithMybatis(uid);
            if (userInfo == null) {
                return;
            }
            UserInfo simpleUser = new UserInfo();
            simpleUser.setId(userInfo.getId());
            simpleUser.setNickName(userInfo.getNickName());
            simpleUser.setPortrait(userInfo.getPortrait());
            if (System.currentTimeMillis() - userInfo.getCreatetime() < 1000 * 60 * 60 * 48L) {
                //是否已经领取过新人红包
                UserLijinRecord record = userLijinMnager.getLijinRecord(uid, null, UserLijinRecord.Category.newer.name());
                if (record == null) {
                    //新用户
                    LijinSendInfo sendInfo = new LijinSendInfo();
                    sendInfo.setExpireTime(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 48L));
                    sendInfo.setDeviceId(deviceId);
                    sendInfo.setMoney(new BigDecimal("188"));
                    sendInfo.setSystem(system);
                    sendInfo.setUser(simpleUser);
                    sendInfo.setId(key);
                    sendInfo.setName("新用户福利");
                    sendInfo.setCategory(UserLijinRecord.Category.newer.name());
                    sendInfo.setMd5(sendInfo.toMD5());
                    redisManager.saveObj(sendInfo, key, 60 * 60 * 48);
                    return;
                }
            }
            //是否余额已经不足
            BigDecimal balance = userLijinMnager.getLijinBalance(uid);
            if (balance != null && balance.compareTo(minMoney) >= 0) {
                //余额充足
                return;
            }
            LijinSendInfo sendInfo = new LijinSendInfo();
            sendInfo.setExpireTime(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 48L));
            sendInfo.setDeviceId(deviceId);
            sendInfo.setSystem(system);
            sendInfo.setUser(simpleUser);
            sendInfo.setId(key);
            //老用户
            String[] normal = new String[]{"66.66", "88.88", "99.99"};
            String[] vip = new String[]{"166.66", "188.88", "199.99"};
            VIPEnum rank = userLijinMnager.getVIPRank(uid);
            if (rank == VIPEnum.silver) {
                //白银
                sendInfo.setMoney(new BigDecimal(normal[(int) (normal.length * Math.random())]));
                sendInfo.setName("白银会员福利");
            } else {
                sendInfo.setMoney(new BigDecimal(vip[(int) (vip.length * Math.random())]));
                sendInfo.setName("铂金会员福利");
            }
            sendInfo.setMd5(sendInfo.toMD5());
            redisManager.saveObj(sendInfo, key, 60 * 60 * 48);
        }
    }
    /**
     * 获取发放中的礼金信息
     *
     * @param system
     * @param deviceId
     * @param uid
     */
    public LijinSendInfo getSendingLijinInfo(SystemEnum system, String deviceId, Long uid) {
        String key = getRedisKey(system, deviceId, uid);
        return (LijinSendInfo) redisManager.getObj(LijinSendInfo.class, key);
    }
    /**
     * 领取礼金
     *
     * @param id
     */
    public LijinSendInfo recieveLijin(String id, Long uid) throws Exception {
        LijinSendInfo lijinSendInfo = (LijinSendInfo) redisManager.getObj(LijinSendInfo.class, id);
        if (lijinSendInfo == null)
            throw new Exception("红包为空");
        if (System.currentTimeMillis() > lijinSendInfo.getExpireTime().getTime()) {
            throw new Exception("红包已过期");
        }
        //判断是否是新人红包
        if(lijinSendInfo.getCategory().equalsIgnoreCase(UserLijinRecord.Category.newer.name())){
            UserLijinRecord record = userLijinMnager.getLijinRecord(uid, null, UserLijinRecord.Category.newer.name());
            if(record!=null){
                throw new Exception("已领过新人红包");
            }
        }
        userLijinMnager.addLijin(uid, lijinSendInfo.getMoney(), lijinSendInfo.getName(), lijinSendInfo.getCategory());
        redisManager.removeKey(id);
        return lijinSendInfo;
    }
    /**
     * 自动发送礼金
     *
     * @param uid
     * @param minMoney
     */
    public void autoSendLijin(Long uid, BigDecimal minMoney) {
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        BigDecimal balance = userLijinMnager.getLijinBalance(uid);
        if (balance == null || balance.compareTo(minMoney) < 0) {
            sendLijin(user.getSystem(), null, uid, minMoney);
        }
    }
    /**
     * 自动领取礼金
     *
     * @param system
     * @param deviceId
     * @param uid
     * @throws Exception
     */
    public void autoRecieveLijin(SystemEnum system, String deviceId, Long uid) throws Exception {
        LijinSendInfo sendInfo = getSendingLijinInfo(system, deviceId, uid);
        if (sendInfo != null) {
            recieveLijin(sendInfo.getId(), uid);
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/lijin/vo/LijinRecordVO.java
New file
@@ -0,0 +1,43 @@
package com.yeshi.fanli.lijin.vo;
import java.math.BigDecimal;
import java.util.Date;
public class LijinRecordVO {
    private String title;
    private Integer type;
    private BigDecimal money;
    private Date createTime;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/RedisManager.java
@@ -80,7 +80,7 @@
     * @param key
     * @param value
     */
    private void removeKey(String key) {
    public void removeKey(String key) {
        Jedis jedis = getJedis();
        try {
            jedis.del(key);
@@ -128,6 +128,15 @@
        Jedis jedis = getJedis();
        try {
            jedis.expire(key, seconds);
        } finally {
            jedis.close();
        }
    }
    public boolean hasKey(String key) {
        Jedis jedis = getJedis();
        try {
            return jedis.exists(key);
        } finally {
            jedis.close();
        }
@@ -602,9 +611,9 @@
     * @param key
     * @return
     */
    public Class<?> getObj(Class<?> clazz, String key) {
    public Object getObj(Class<?> clazz, String key) {
        String value = getCommonString(key);
        return (Class<?>) new Gson().fromJson(value, clazz);
        return new Gson().fromJson(value, clazz);
    }
    /**