admin
2020-05-14 235921d820f29b04b1e82f6a6f0d4a1957a900ef
Merge remote-tracking branch 'origin/div' into div
8个文件已修改
7个文件已添加
816 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/PreviewInfoControllerV2.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/TeamEincomeRecordMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/user/PreviewInfoDao.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamFansInfoDao.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/PreviewInfo.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/exception/user/PreviewInfoException.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/money/TeamEincomeRecordMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/TeamEincomeRecordServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/PreviewInfoServiceImpl.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/money/TeamEincomeRecordService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/PreviewInfoService.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/FilePathEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/TimeUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/user/MineInfoVO.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/PreviewInfoControllerV2.java
New file
@@ -0,0 +1,184 @@
package com.yeshi.fanli.controller.client.v2;
import java.io.PrintWriter;
import java.math.BigDecimal;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.PreviewInfo;
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
import com.yeshi.fanli.exception.user.PreviewInfoException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.user.PreviewInfoService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.vo.money.MoneyStatisticVO;
import com.yeshi.fanli.vo.user.MineInfoVO;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("api/v2/preview")
public class PreviewInfoControllerV2 {
    @Resource
    private PreviewInfoService previewInfoService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private RedisManager redisManager;
    /**
     * 保存资金信息
     * @param callback
     * @param acceptData
     * @param uid
     * @param vo
     * @param out
     */
    @RequestMapping(value = "saveMoneyInfo")
    public void saveMoneyInfo(String callback, AcceptData acceptData, Long uid, MoneyStatisticVO vo, PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            previewInfoService.saveMoneyInfo(uid, vo);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("保存成功"));
        } catch (PreviewInfoException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
        }
    }
    /**
     * 保存提现记录
     * @param callback
     * @param acceptData
     * @param uid
     * @param vo
     * @param out
     */
    @RequestMapping(value = "saveExtractRecord")
    public void saveExtractRecord(String callback, AcceptData acceptData, Long uid, String time, BigDecimal money, PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            previewInfoService.saveExtractRecord(uid, time, money);
        } catch (PreviewInfoException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
        }
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("保存成功"));
    }
    /**
     * 删除提现记录
     * @param callback
     * @param acceptData
     * @param uid
     * @param vo
     * @param out
     */
    @RequestMapping(value = "deleteExtractRecord")
    public void deleteExtractRecord(String callback, AcceptData acceptData, Long uid, Long id, PrintWriter out) {
        if (uid == null || id == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不完整"));
            return;
        }
        previewInfoService.deleteExtractRecord(uid, id);
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("删除成功"));
    }
    /**
     * 保存我的信息
     * @param callback
     * @param acceptData
     * @param infoVO
     * @param file
     * @param out
     */
    @RequestMapping(value = "saveMineInfo")
    public void saveMineInfo(String callback, AcceptData acceptData, MineInfoVO infoVO, MultipartFile file, PrintWriter out) {
        if (infoVO == null || infoVO.getUid() == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            previewInfoService.saveMineInfo(infoVO, file);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("保存成功"));
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败"));
        }
    }
    /**
     * 到账预览-生产图片
     * @param callback
     * @param acceptData
     * @param uid
     * @param money
     * @param time
     * @param orderNo
     * @param out
     */
    @RequestMapping(value = "saveMoneyArrival")
    public void saveMoneyArrival(String callback, AcceptData acceptData, Long uid, BigDecimal money, String time,
            String orderNo, PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            String link = previewInfoService.saveMoneyArrival(uid, money, time, orderNo);
            JSONObject object = new JSONObject();
            object.put("link",link);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(object));
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("保存失败"));
        }
    }
    @RequestMapping(value = "getMoneyInfo")
    public void getMoneyInfo(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
         getInfo(callback, acceptData, uid, out, PreviewEnum.moneyInfo);
    }
    @RequestMapping(value = "getExtractRecord")
    public void getExtractRecord(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
         getInfo(callback, acceptData, uid, out, PreviewEnum.extractRecord);
    }
    @RequestMapping(value = "getMineInfo")
    public void getMineInfo(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
         getInfo(callback, acceptData, uid, out, PreviewEnum.mineInfo);
    }
    private void getInfo(String callback, AcceptData acceptData, Long uid, PrintWriter out, PreviewEnum previewEnum) {
        PreviewInfo previewInfo = previewInfoService.get(uid, previewEnum);
        if (previewInfo == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("暂无数据"));
            return;
        }
        JSONObject object = new JSONObject();
        object.put("result", previewInfo.getContent());
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(object));
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -27,12 +27,14 @@
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.money.TeamEincomeRecord;
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.money.TeamEincomeRecordService;
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.money.extract.ExtractService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
@@ -40,6 +42,7 @@
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.account.UserUtil;
@@ -84,6 +87,9 @@
    @Resource
    private OrderMoneyDailyCountService orderMoneyDailyCountService;
    @Resource
    private TeamEincomeRecordService teamEincomeRecordService;
    
    private Gson getGson() {
@@ -243,7 +249,7 @@
        predictVO.setTeamNum(0);
        predictVO.setMineMoney(BigDecimal.valueOf(0));
        predictVO.setTeamMoney(BigDecimal.valueOf(0));
        BigDecimal hundred = BigDecimal.valueOf(100);
        if (list != null && list.size() > 0) {
            for (OrderMoneyDailyCount dailyCount : list) {
                if (dailyCount.getOrderNum() != null)
@@ -251,9 +257,9 @@
                if (dailyCount.getOrderNumTeam() != null)
                    predictVO.setTeamNum(predictVO.getTeamNum() + dailyCount.getOrderNumTeam());
                if (dailyCount.getIncome() != null)
                    predictVO.setMineMoney(predictVO.getMineMoney().add(BigDecimal.valueOf(dailyCount.getIncome()/100)));
                    predictVO.setMineMoney(predictVO.getMineMoney().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)));
                if (dailyCount.getIncomeTeam() != null)
                    predictVO.setTeamMoney(predictVO.getTeamMoney().add(BigDecimal.valueOf(dailyCount.getIncomeTeam()/100)));
                    predictVO.setTeamMoney(predictVO.getTeamMoney().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred)));
            }
        }
        predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
@@ -372,6 +378,7 @@
                listDailyCount = orderMoneyDailyCountService.sumGroupByYearMonth(uid, minDay, maxDay);
            }
            BigDecimal hundred = BigDecimal.valueOf(100);
            for (MoneyPredictVO predictVO : list) {
                String countDate = predictVO.getCountDate();
@@ -380,9 +387,9 @@
                        Date countDay = dailyCount.getCountDay();
                        if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) {
                            predictVO.setMineNum(dailyCount.getOrderNum());
                            predictVO.setMineMoney(BigDecimal.valueOf(dailyCount.getIncome()/100));
                            predictVO.setMineMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred));
                            predictVO.setTeamNum(dailyCount.getOrderNumTeam());
                            predictVO.setTeamMoney(BigDecimal.valueOf(dailyCount.getIncomeTeam()/100));
                            predictVO.setTeamMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred));
                            break;
                        }
@@ -390,9 +397,9 @@
                        if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth)
                                && countDate.equals(formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) {
                            predictVO.setMineNum(dailyCount.getOrderNum());
                            predictVO.setMineMoney(BigDecimal.valueOf(dailyCount.getIncome()/100));
                            predictVO.setMineMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred));
                            predictVO.setTeamNum(dailyCount.getOrderNumTeam());
                            predictVO.setTeamMoney(BigDecimal.valueOf(dailyCount.getIncomeTeam()/100));
                            predictVO.setTeamMoney(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncomeTeam()), hundred));
                            break;
                        }
                    }
@@ -450,13 +457,14 @@
        List<OrderMoneyDailyCount> listDailyCount = null;
        if (type == 1) {
            listDailyCount = orderMoneyDailyCountService.sumGroupBySourceType(uid, minDay, maxDay);
        } else if (type == 1) {
        } else if (type == 2) {
            listDailyCount = orderMoneyDailyCountService.sumTeamGroupBySourceType(uid, minDay, maxDay);
        }
        BigDecimal zero = new BigDecimal(0);
        List<IncomeDetailVO> list = new ArrayList<>();
        BigDecimal hundred = BigDecimal.valueOf(100);
        SourceTypeEnum[] arrayEnun = SourceTypeEnum.values();
        for (int m = 0; m < arrayEnun.length; m++) {
            SourceTypeEnum typeEnum = arrayEnun[m];
@@ -465,7 +473,7 @@
                for (OrderMoneyDailyCount dailyCount : listDailyCount) {
                    if (dailyCount.getSourceType() == typeEnum) {
                        detail.setNum(detail.getNum() + dailyCount.getOrderNum());
                        detail.setMoney(detail.getMoney().add(BigDecimal.valueOf(dailyCount.getIncome()/100)));
                        detail.setMoney(detail.getMoney().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getIncome()), hundred)));
                    }
                }
            }
@@ -503,7 +511,7 @@
        // 今日预估
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
        MoneyPredictVO todayVO = cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, null));
        TeamPredictVO todayVO = crateTeamPredictVO(orderMoneyDailyCountService.query(uid, minDate, null));
        // 本月预估
        maxDate = new Date(timeStamp);
@@ -511,20 +519,45 @@
        minDate = new Date(TimeUtil
                .convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
        calendar.add(Calendar.MONTH, -1);
        MoneyPredictVO monthVO = cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate));
        TeamPredictVO monthVO = crateTeamPredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate));
        // 统计已到账分红、补贴
        BigDecimal subsidy = teamEincomeRecordService.sumRecieveByType(uid, TeamEincomeRecord.TYPE_TEAM_SUBSIDY);
        BigDecimal reward = teamEincomeRecordService.sumRecieveByType(uid, TeamEincomeRecord.TYPE_TEAM_DIVIDENTS);
        Gson gson = getGson();
        JSONObject object = new JSONObject();
        object.put("total", "0.00"); //TODO
        object.put("reward", "0.00");
        object.put("subsidy", "0.00");
        object.put("total", subsidy.add(reward).setScale(2).toString());
        object.put("reward", reward.setScale(2).toString());
        object.put("subsidy", subsidy.setScale(2).toString());
        object.put("today", gson.toJson(todayVO));
        object.put("month", gson.toJson(monthVO));
        out.print(JsonUtil.loadTrueResult(object));
    }
    
    
    private TeamPredictVO crateTeamPredictVO(List<OrderMoneyDailyCount> list) {
        TeamPredictVO predictVO = new TeamPredictVO(BigDecimal.ZERO,0,BigDecimal.ZERO,0);
        if (list != null && list.size() > 0) {
            BigDecimal hundred = BigDecimal.valueOf(100);
            for (OrderMoneyDailyCount dailyCount : list) {
                if (dailyCount.getTeamRewardNum() != null)
                    predictVO.setRewardNum(predictVO.getRewardNum() + dailyCount.getTeamRewardNum());
                if (dailyCount.getTeamSubsidyNum() != null)
                    predictVO.setSubsidyNum(predictVO.getSubsidyNum() + dailyCount.getTeamSubsidyNum());
                if (dailyCount.getTeamReward() != null)
                    predictVO.setReward(predictVO.getReward().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred)));
                if (dailyCount.getTeamSubsidy() != null)
                    predictVO.setSubsidy(predictVO.getSubsidy().add(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred)));
    
            }
        }
        predictVO.setTotalNum(predictVO.getRewardNum() + predictVO.getSubsidyNum());
        predictVO.setTotalMoney(predictVO.getReward().add(predictVO.getSubsidy()));
        return predictVO;
    }
    
    
    
@@ -596,6 +629,7 @@
                listDailyCount = orderMoneyDailyCountService.sumTeamGroupByYearMonth(uid, minDay, maxDay);
            }
            BigDecimal hundred = BigDecimal.valueOf(100);
            for (TeamPredictVO predictVO : list) {
                String countDate = predictVO.getCountDate();
@@ -604,9 +638,9 @@
                        Date countDay = dailyCount.getCountDay();
                        if (datetype == 1 && countDay != null && countDate.equals(formatDay.format(countDay))) {
                            predictVO.setRewardNum(dailyCount.getTeamRewardNum());
                            predictVO.setReward(BigDecimal.valueOf(dailyCount.getTeamReward()/100));
                            predictVO.setReward(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred));
                            predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
                            predictVO.setSubsidy(BigDecimal.valueOf(dailyCount.getTeamSubsidy()/100));
                            predictVO.setSubsidy(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred));
                            break;
                        }
@@ -614,9 +648,9 @@
                        if (datetype == 2 && !StringUtil.isNullOrEmpty(yearMonth)
                                && countDate.equals(formatMonth.format(TimeUtil.parseYYYYMMDD(DateUtil.getFirstDayOfMonth(yearMonth))))) {
                            predictVO.setRewardNum(dailyCount.getTeamRewardNum());
                            predictVO.setReward(BigDecimal.valueOf(dailyCount.getTeamReward()/100));
                            predictVO.setReward(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamReward()), hundred));
                            predictVO.setSubsidyNum(dailyCount.getTeamSubsidyNum());
                            predictVO.setSubsidy(BigDecimal.valueOf(dailyCount.getTeamSubsidy()/100));
                            predictVO.setSubsidy(MoneyBigDecimalUtil.div(BigDecimal.valueOf(dailyCount.getTeamSubsidy()), hundred));
                            break;
                        }
                    }
@@ -636,7 +670,6 @@
            e.printStackTrace();
        }
    }
    
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/TeamEincomeRecordMapper.java
@@ -1,5 +1,6 @@
package com.yeshi.fanli.dao.mybatis.money;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -25,4 +26,12 @@
    public long countCanRecieveUid(@Param("preRecieveTime") Date preRecieveTime,
            @Param("typeList") List<Integer> typeList);
    /**
     * 统计类型已领取金额
     * @param uid
     * @param type
     * @return
     */
    BigDecimal sumRecieveByType(@Param("uid") Long uid,@Param("type") int type);
}
fanli/src/main/java/com/yeshi/fanli/dao/user/PreviewInfoDao.java
New file
@@ -0,0 +1,11 @@
package com.yeshi.fanli.dao.user;
import org.springframework.stereotype.Repository;
import com.yeshi.fanli.dao.MongodbBaseDao;
import com.yeshi.fanli.entity.bus.user.PreviewInfo;
@Repository
public class PreviewInfoDao extends MongodbBaseDao<PreviewInfo> {
}
fanli/src/main/java/com/yeshi/fanli/dao/user/invite/TeamFansInfoDao.java
@@ -16,6 +16,7 @@
import com.yeshi.fanli.dto.user.ThreeSaleFocusDTO;
import com.yeshi.fanli.entity.bus.user.TeamFansInfo;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
@Repository
public class TeamFansInfoDao extends MongodbBaseDao<TeamFansInfo> {
@@ -104,9 +105,7 @@
    }
    private Query createQuery(int type, Long uid, ThreeSaleFocusDTO focusDTO) {
        Query query = new Query();
        List<Criteria> list = new ArrayList<Criteria>();
        if (type == 1) {
            list.add(Criteria.where("bossId").is(uid));
        } else {
@@ -132,21 +131,9 @@
            if (focusDTO.getMaxFansNum() != null)
                list.add(Criteria.where("fansNum").lte(focusDTO.getMaxFansNum()));
            if (!StringUtil.isNullOrEmpty(focusDTO.getMinJoinTime()))
                list.add(Criteria.where("joinTime").gte(focusDTO.getMinJoinTime()));
            if (!StringUtil.isNullOrEmpty(focusDTO.getMaxJoinTime()))
                list.add(Criteria.where("joinTime").lte(focusDTO.getMaxJoinTime()));
            if (!StringUtil.isNullOrEmpty(focusDTO.getMinActiveTime()))
                list.add(Criteria.where("activeTime").gte(focusDTO.getMinActiveTime()));
            if (!StringUtil.isNullOrEmpty(focusDTO.getMaxActiveTime()))
                list.add(Criteria.where("activeTime").lte(focusDTO.getMaxActiveTime()));
            if (focusDTO.getMinIncome() != null) {
                int income = focusDTO.getMinIncome().multiply(BigDecimal.valueOf(100)).setScale(2, BigDecimal.ROUND_DOWN).intValue();
                list.add(Criteria.where("income").lte(income));
                list.add(Criteria.where("income").gte(income));
            }
            if (focusDTO.getMaxIncome() != null) {
@@ -154,6 +141,25 @@
                list.add(Criteria.where("income").lte(income));
            }
            
            if (!StringUtil.isNullOrEmpty(focusDTO.getMinJoinTime())) {
                Date date = TimeUtil.parseDotYYYYMMDD(focusDTO.getMinJoinTime());
                list.add(Criteria.where("joinTime").gte(date));
            }
            if (!StringUtil.isNullOrEmpty(focusDTO.getMaxJoinTime())) {
                Date date = TimeUtil.parseDotCommon(focusDTO.getMaxJoinTime() + " 23:59:59");
                list.add(Criteria.where("joinTime").lte(date));
            }
            if (!StringUtil.isNullOrEmpty(focusDTO.getMinActiveTime())) {
                Date date = TimeUtil.parseDotYYYYMMDD(focusDTO.getMinActiveTime());
                list.add(Criteria.where("joinTime").gte(date));
            }
            if (!StringUtil.isNullOrEmpty(focusDTO.getMaxActiveTime())) {
                Date date = TimeUtil.parseDotCommon(focusDTO.getMaxActiveTime() + " 23:59:59");
                list.add(Criteria.where("activeTime").lte(date));
            }
            if (!StringUtil.isNullOrEmpty(focusDTO.getKey())) {
                if (type == 1) {
@@ -196,6 +202,7 @@
            }
        }
        Query query = new Query();
        if (list.size() > 0) {
            Criteria[] cas = new Criteria[list.size()];
            for (int i = 0; i < list.size(); i++)
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/PreviewInfo.java
New file
@@ -0,0 +1,88 @@
package com.yeshi.fanli.entity.bus.user;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
 * 预览信息
 *
 * @author Administrator
 *
 */
@Document(collection = "previewInfo ")
public class PreviewInfo {
    public enum PreviewEnum {
        mineInfo("我的页面预览"),
        moneyInfo("资金信息"),
        moneyArrival("资金到账"),
        extractRecord("提现记录");
        private String desc;
        private PreviewEnum(String desc) {
            this.desc = desc;
        }
        public String getDesc() {
            return desc;
        }
    }
    @Id
    private String id;
    @Field
    @Indexed
    private Long uid;
    @Field
    private PreviewEnum type; // 类型
    @Field
    private String content; // json内容
    @Field
    private Date updateTime;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Long getUid() {
        return uid;
    }
    public void setUid(Long uid) {
        this.uid = uid;
    }
    public PreviewEnum getType() {
        return type;
    }
    public void setType(PreviewEnum type) {
        this.type = type;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
fanli/src/main/java/com/yeshi/fanli/exception/user/PreviewInfoException.java
New file
@@ -0,0 +1,16 @@
package com.yeshi.fanli.exception.user;
import com.yeshi.fanli.exception.BaseException;
public class PreviewInfoException extends BaseException {
    private static final long serialVersionUID = 1L;
    public PreviewInfoException(int code, String msg) {
        super(code, msg);
    }
    public PreviewInfoException() {
        super();
    }
}
fanli/src/main/java/com/yeshi/fanli/mapping/money/TeamEincomeRecordMapper.xml
@@ -160,6 +160,10 @@
        </if>
    </select>
    <select id="sumRecieveByType" resultType="BigDecimal">
        SELECT SUM(ti_money) FROM yeshi_ec_team_income
        WHERE ti_uid=#{uid} AND ti_type=#{type} AND ti_state=1
    </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/money/TeamEincomeRecordServiceImpl.java
@@ -84,5 +84,17 @@
    public long countCanRecieveUid(Date preRecieveTime, List<Integer> typeList) {
        return teamEincomeRecordMapper.countCanRecieveUid(preRecieveTime, typeList);
    }
    @Override
    public BigDecimal sumRecieveByType(Long uid, int type) {
        BigDecimal money = teamEincomeRecordMapper.sumRecieveByType(uid, type);
        if (money == null) {
            money = new BigDecimal(0);
        }
        return money;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/PreviewInfoServiceImpl.java
New file
@@ -0,0 +1,201 @@
package com.yeshi.fanli.service.impl.user;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.yeshi.utils.FileUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.dao.user.PreviewInfoDao;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.PreviewInfo;
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
import com.yeshi.fanli.exception.user.PreviewInfoException;
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
import com.yeshi.fanli.service.inter.user.PreviewInfoService;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.vo.money.MoneyStatisticVO;
import com.yeshi.fanli.vo.user.MineInfoVO;
import net.coobird.thumbnailator.Thumbnails;
@Service
public class PreviewInfoServiceImpl implements PreviewInfoService {
    @Resource
    private PreviewInfoDao previewInfoDao;
    @Resource
    private BindingAccountService bindingAccountService;
    @Override
    public void save(Long uid, PreviewEnum type, String content) {
        String id = StringUtil.Md5(uid + "#" + type.name());
        PreviewInfo info = new PreviewInfo();
        info.setId(id);
        info.setUid(uid);
        info.setContent(content);
        info.setType(type);
        info.setUpdateTime(new Date());
        previewInfoDao.save(info);
    }
    @Override
    public PreviewInfo get(Long uid, PreviewEnum previewEnum) {
        String id = StringUtil.Md5(uid + "#" + previewEnum.name());
        return previewInfoDao.get(id);
    }
    @Override
    public void saveMoneyInfo(Long uid, MoneyStatisticVO vo) throws PreviewInfoException {
        if (vo == null)
            throw new PreviewInfoException(1, "请完善页面信息");
        save(uid, PreviewEnum.moneyInfo, new Gson().toJson(vo));
    }
    @Override
    public void saveExtractRecord(Long uid, String time, BigDecimal money) throws PreviewInfoException {
        BindingAccount alipay = bindingAccountService.getBindingAccountByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
        if (alipay == null)
            throw new PreviewInfoException(1, "未绑定提现账号");
        if (StringUtil.isNullOrEmpty(time))
            throw new PreviewInfoException(1, "提现时间不能为空");
        if (money.compareTo(BigDecimal.ZERO) <= 0)
            throw new PreviewInfoException(1, "提现金额不能小于0");
        Gson gson = new Gson();
        List<Extract> list = null;
        Extract extract = new Extract();
        extract.setName(alipay.getName());
        extract.setAccount(alipay.getAccount());
        extract.setMoney(money);
        extract.setReceiveTime(TimeUtil.parseDotCommon(time));
        extract.setId(java.lang.System.currentTimeMillis());
        String id = StringUtil.Md5(uid + "#" + PreviewEnum.extractRecord.name());
        PreviewInfo previewInfo = previewInfoDao.get(id);
        if (previewInfo == null) {
             list = new ArrayList<Extract>();
             list.add(extract);
        } else {
            String content = previewInfo.getContent();
            if (!StringUtil.isNullOrEmpty(content)) {
                list = gson.fromJson(content, new TypeToken<ArrayList<Extract>>() {}.getType());
            }
            if (list == null) {
                list = new ArrayList<>();
            }
            list.add(extract);
            // 与之前数据比对排序
            if (list.size() > 1) {
                Comparator<Extract> cm = new Comparator<Extract>() {
                    @Override
                    public int compare(Extract o1, Extract o2) {
                        return (int) (o2.getReceiveTime().getTime() - o1.getReceiveTime().getTime());
                    }
                };
                Collections.sort(list, cm);
            }
        }
        save(uid, PreviewEnum.extractRecord, gson.toJson(list));
    }
    @Override
    public void deleteExtractRecord(Long uid, long tid) {
        String id = StringUtil.Md5(uid + "#" + PreviewEnum.extractRecord.name());
        PreviewInfo previewInfo = previewInfoDao.get(id);
        if (previewInfo == null) {
             return;
        }
        String content = previewInfo.getContent();
        if (StringUtil.isNullOrEmpty(content)) {
            return;
        }
        Gson gson = new Gson();
        List<Extract> list = gson.fromJson(content, new TypeToken<ArrayList<Extract>>() {}.getType());
        if (list == null || list.size() == 0) {
            return;
        }
        for (Extract extract: list) {
            if (extract.getId() == tid) {
                list.remove(extract);
                break;
            }
        }
        save(uid, PreviewEnum.extractRecord, gson.toJson(list));
    }
    @Override
    public void saveMineInfo(MineInfoVO infoVO, MultipartFile file) throws Exception {
        Long uid = infoVO.getUid();
        if (file != null) {
            // 谷歌压缩图片
            String targetPath = FileUtil.getCacheDir() + "/preview" + uid + "_" + System.currentTimeMillis()+ ".jpg";
            Thumbnails.of(file.getInputStream()).size(200, 200).toFile(targetPath);
            // 执行上传
            String filePath =FilePathEnum.userPreview.getPath() + UUID.randomUUID().toString().replace("-", "") + ".jpg";
            String fileLink = COSManager.getInstance().uploadFile(new File(targetPath), filePath).getUrl();
            // 删除本地图片
            if (new File(targetPath).exists()) {
                new File(targetPath).delete();
            }
            infoVO.setPortrait(fileLink);
            // 删除之前上传图
            String id = StringUtil.Md5(uid + "#" + PreviewEnum.mineInfo.name());
            PreviewInfo previewInfo = previewInfoDao.get(id);
            if (previewInfo != null && !StringUtil.isNullOrEmpty(previewInfo.getContent())) {
                MineInfoVO dto = new Gson().fromJson(previewInfo.getContent(), MineInfoVO.class);
                if (dto != null && StringUtil.isNullOrEmpty(dto.getPortrait()));
                    COSManager.getInstance().deleteFile(dto.getPortrait());
            }
        }
        Gson gson = new Gson();
        save(uid, PreviewEnum.mineInfo, gson.toJson(infoVO));
    }
    @Override
    public String saveMoneyArrival(Long uid, BigDecimal money, String time,String orderNo) throws PreviewInfoException {
        if (uid == null )
            throw new PreviewInfoException(1, "请先登录");
        if (money == null )
            throw new PreviewInfoException(1, "请输入金额");
        if(StringUtil.isNullOrEmpty(time))
            throw new PreviewInfoException(1, "请输入创建时间");
        if(StringUtil.isNullOrEmpty(time))
            throw new PreviewInfoException(1, "请输入订单号");
        String content = ""; // TODO
        // save(uid, PreviewEnum.moneyArrival, gson.toJson(infoVO));
        return content;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/money/TeamEincomeRecordService.java
@@ -58,4 +58,12 @@
     */
    public BigDecimal getEstimateDividents(Date preGetTime, Long uid);
    /**
     * 统计已到账金额
     * @param uid
     * @param type
     * @return
     */
    public BigDecimal sumRecieveByType(Long uid, int type);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/PreviewInfoService.java
New file
@@ -0,0 +1,69 @@
package com.yeshi.fanli.service.inter.user;
import java.math.BigDecimal;
import org.springframework.web.multipart.MultipartFile;
import com.yeshi.fanli.entity.bus.user.PreviewInfo;
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
import com.yeshi.fanli.exception.user.PreviewInfoException;
import com.yeshi.fanli.vo.money.MoneyStatisticVO;
import com.yeshi.fanli.vo.user.MineInfoVO;
public interface PreviewInfoService {
    /**
     * 保存信息
     * @param uid
     * @param type
     * @param content
     */
    public void save(Long uid, PreviewEnum type, String content);
    /**
     * 根据用户+类型查询
     * @param uid
     * @param type
     * @return
     */
    public PreviewInfo get(Long uid, PreviewEnum previewEnum);
    /**
     * 保存提现记录
     * @param uid
     * @param time
     * @param money
     * @throws PreviewInfoException
     */
    public void saveExtractRecord(Long uid, String time, BigDecimal money) throws PreviewInfoException;
    /**
     * 删除提现记录
     * @param uid
     * @param tid
     * @throws PreviewInfoException
     */
    public void deleteExtractRecord(Long uid, long tid);
    /**
     * 保存个人信息
     * @param infoVO
     * @param file
     * @throws PreviewInfoException
     */
    public void saveMineInfo(MineInfoVO infoVO, MultipartFile file) throws Exception;
    /**
     * 保存到账信息
     * @param uid
     * @param money
     * @param time
     * @param orderNo
     * @throws PreviewInfoException
     */
    public String saveMoneyArrival(Long uid, BigDecimal money, String time, String orderNo) throws PreviewInfoException;
    public void saveMoneyInfo(Long uid, MoneyStatisticVO vo) throws PreviewInfoException;
}
fanli/src/main/java/com/yeshi/fanli/util/FilePathEnum.java
@@ -3,6 +3,7 @@
public enum FilePathEnum {
    // 用户相关
    userPortrait("/user/img/portrait/", "用户头像"),
    userPreview("/user/img/preview/", "用户预览头像"),
    userWXPortrait("/user/img/portrait_wx/", "用户微信头像"),
    userERcode("/user/img/ercode/", "用户上传微信二维码"),
    userComplaint("/user/img/user_complaint/", "用户吐槽图片"),
fanli/src/main/java/com/yeshi/fanli/util/TimeUtil.java
@@ -121,6 +121,26 @@
        }
    }
    
    public static Date parseDotYYYYMMDD(String st) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        try {
            return sdf.parse(st);
        } catch (Exception e) {
             e.printStackTrace();
            return null;
        }
    }
    public static Date parseDotCommon(String st) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
        try {
            return sdf.parse(st);
        } catch (Exception e) {
             e.printStackTrace();
            return null;
        }
    }
    public static long convertAllTimeToTemp(String st) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
fanli/src/main/java/com/yeshi/fanli/vo/user/MineInfoVO.java
New file
@@ -0,0 +1,85 @@
package com.yeshi.fanli.vo.user;
public class MineInfoVO {
    private Long uid;
    private String nickName;// 昵称
    private String portrait;// 头像
    private String level;// 等级
    private String balance;// 余额
    private String selfRebate;// 返利
    private String shareBonus;// 分享
    private String teamBonus;// 团队
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    public String getPortrait() {
        return portrait;
    }
    public void setPortrait(String portrait) {
        this.portrait = portrait;
    }
    public String getLevel() {
        return level;
    }
    public void setLevel(String level) {
        this.level = level;
    }
    public String getBalance() {
        return balance;
    }
    public void setBalance(String balance) {
        this.balance = balance;
    }
    public String getSelfRebate() {
        return selfRebate;
    }
    public void setSelfRebate(String selfRebate) {
        this.selfRebate = selfRebate;
    }
    public String getShareBonus() {
        return shareBonus;
    }
    public void setShareBonus(String shareBonus) {
        this.shareBonus = shareBonus;
    }
    public String getTeamBonus() {
        return teamBonus;
    }
    public void setTeamBonus(String teamBonus) {
        this.teamBonus = teamBonus;
    }
    public Long getUid() {
        return uid;
    }
    public void setUid(Long uid) {
        this.uid = uid;
    }
}