yujian
2020-06-03 80e39e3a40283521fc732c930aa51d9bece7c146
云发单 后台管理
31个文件已修改
2个文件已添加
920 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/admin/OrderAdminController.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/user/cloud/UserCloudAdminController.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserCloudControllerV2.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/cloud/UserCloudMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/cloud/UserCloudOrderMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/UserCloud.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/UserCloudOrder.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/order/SourceTypeEnum.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/cloud/UserCloudMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/cloud/UserCloudOrderMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGoodsServiceImpl.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudOrderServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudGoodsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudOrderService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/order/OrderMoneyStatisticManager.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/ImageToBase64.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailExtraVO.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/goods/OtherInfo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/msg/ClientTextStyleVO.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/order/CommonOrderVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/admin/OrderAdminController.java
@@ -448,20 +448,33 @@
    @RequestMapping(value = "countOrderInfo")
    public void countOrderInfo(String callback, Long uid, PrintWriter out) {
        // 自购已到账
        long selfNumEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY, 1);
        long selfNumEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, null, 1);
        // 分享已到账
        long shareNumEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY, 2);
        long shareNumEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, null, 2);
        // 自购未到账
        long selfNum = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 1);
        long selfNum = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, null, 1);
        // 分享未到账
        long shareNum = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 2);
        long shareNum = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, null, 2);
        // 自购已到账
        long selfAccountEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY, 1);
        // 分享已到账
        long shareAccountEnd = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY, 2);
        // 自购未到账
        long selfAccount = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 1);
        // 分享未到账
        long shareAccount = hongBaoV2CountService.countMyDirectOrderByCashNotArrival(uid, Constant.VIP_ORDER_PAY, 2);
        
        JSONObject data = new JSONObject();
        data.put("selfNumEnd", selfNumEnd);
        data.put("shareNumEnd", shareNumEnd);
        data.put("selfNum", selfNum);
        data.put("shareNum", shareNum);
        data.put("selfAccountEnd", selfAccountEnd);
        data.put("shareAccountEnd", shareAccountEnd);
        data.put("selfAccount", selfAccount);
        data.put("shareAccount", shareAccount);
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
    
fanli/src/main/java/com/yeshi/fanli/controller/admin/UserInfoAdminController.java
@@ -118,6 +118,9 @@
    @Resource
    private UserInviteValidNumService userInviteValidNumService;
    
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    /**
     * 查询用户信息列表 正常用户/异常用户
     * 
@@ -1333,6 +1336,8 @@
        JSONObject data = new JSONObject();
        data.put("doneFirst", doneFirst); 
        data.put("doneSecond", doneSecond); 
        data.put("first", threeSaleSerivce.countFirstTeam(uid));
        data.put("second", threeSaleSerivce.countSecondTeam(uid));
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
fanli/src/main/java/com/yeshi/fanli/controller/admin/user/cloud/UserCloudAdminController.java
New file
@@ -0,0 +1,163 @@
package com.yeshi.fanli.controller.admin.user.cloud;
import java.io.PrintWriter;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGoodsService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudGroupService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudManageService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudOrderService;
import com.yeshi.fanli.service.inter.user.cloud.UserCloudService;
import com.yeshi.fanli.service.manger.alipay.UserCloudAlipayManager;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
import net.sf.json.JSONObject;
@Controller
@RequestMapping("admin/new/api/v1/cloud")
public class  UserCloudAdminController {
    @Resource
    private UserCloudService userCloudService;
    @Resource
    private UserCloudOrderService userCloudOrderService;
    @Resource
    private UserCloudGroupService userCloudGroupService;
    @Resource
    private UserCloudGoodsService userCloudGoodsService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
    @Resource
    private UserCloudManageService userCloudManageService;
    @Resource
    private UserCloudAlipayManager userCloudAlipayManager;
    @Resource
    private GoodsEvaluateService goodsEvaluateService;
    /**
     * 订单信息查询
     * @param callback
     * @param pageIndex
     * @param key
     * @param state
     * @param out
     */
    @RequestMapping(value = "queryOrder")
    public void queryOrder(String callback, Integer pageIndex, Integer pageSize, String key, Integer state, PrintWriter out) {
        try {
            if (pageIndex == null)
                pageIndex = 1;
            if (pageSize == null)
                pageSize = Constant.PAGE_SIZE;
            List<UserCloudOrder> list = userCloudOrderService.query(pageIndex, pageSize, key, state);
            if (list == null || list.size() == 0) {
                out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("暂无数据")));
                return;
            }
            for (UserCloudOrder cloudOrder: list) {
                UserInfo userInfo = userInfoService.getUserByIdWithMybatis(cloudOrder.getUid());
                if (userInfo == null)
                    continue;
                cloudOrder.setNickName(userInfo.getNickName());
                cloudOrder.setPortrait(userInfo.getPortrait());
            }
            GsonBuilder gsonBuilder = new GsonBuilder();
            gsonBuilder.serializeNulls(); // 重点
            Gson gson = gsonBuilder.setDateFormat("yyyy/MM/dd HH:mm:ss").create();
            long count = userCloudOrderService.count(key, state);
            int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
            PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
            JSONObject data = new JSONObject();
            data.put("pe", pe);
            data.put("list", gson.toJson(list));
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        } catch (Exception e) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("操作异常")));
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
        }
    }
    /**
     * 开通成功记录
     * @param callback
     * @param pageIndex
     * @param key
     * @param state
     * @param out
     */
    @RequestMapping(value = "queryCloud")
    public void queryCloud(String callback, Integer pageIndex, Integer pageSize, String key, Integer state, PrintWriter out) {
        try {
            if (pageIndex == null)
                pageIndex = 1;
            if (pageSize == null)
                pageSize = Constant.PAGE_SIZE;
            List<UserCloud> list = userCloudService.query(pageIndex, pageSize, key, state);
            if (list == null || list.size() == 0) {
                out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("暂无数据")));
                return;
            }
            for (UserCloud userCloud: list) {
                UserInfo userInfo = userInfoService.getUserByIdWithMybatis(userCloud.getUid());
                if (userInfo == null)
                    continue;
                userCloud.setNickName(userInfo.getNickName());
                userCloud.setPortrait(userInfo.getPortrait());
            }
            GsonBuilder gsonBuilder = new GsonBuilder();
            gsonBuilder.serializeNulls(); // 重点
            Gson gson = gsonBuilder.setDateFormat("yyyy/MM/dd HH:mm:ss").create();
            long count = userCloudService.count(key, state);
            int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
            PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
            JSONObject data = new JSONObject();
            data.put("pe", pe);
            data.put("list", gson.toJson(list));
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        } catch (Exception e) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("操作异常")));
            e.printStackTrace();
            LogHelper.errorDetailInfo(e);
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java
@@ -434,6 +434,12 @@
                    }
                }
            }
            // 云发单链接
            if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
                data.put("cloudLink", configService.get(ConfigKeyEnum.robotCloudLink.getKey()));
            }
            out.print(JsonUtil.loadTrueResult(data));
        } catch (Exception e) {
            out.print(JsonUtil.loadFalseResult("获取失败"));
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -660,7 +660,7 @@
        
        
        if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
            getCloudInfo(goodsDetail); // 云发单文案信息
            getCloudInfo(goodsDetail, extraVO);  // 云发单文案信息
        }
        
        JSONObject object = new JSONObject();
@@ -882,7 +882,7 @@
        extraVO.setShare(shareInfoVO);
        
        if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
            getCloudInfo(goodsDetail); // 云发单文案信息
            getCloudInfo(goodsDetail, extraVO);  // 云发单文案信息
        }
        JSONObject object = new JSONObject();
@@ -1071,7 +1071,7 @@
        }
        
        if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
            getCloudInfo(goodsDetail); // 云发单文案信息
            getCloudInfo(goodsDetail, extraVO); // 云发单文案信息
        }
        JSONObject object = new JSONObject();
@@ -1210,7 +1210,7 @@
        extraVO.setShare(shareInfoVO);
        
        // 云发单文案信息
        getCloudInfo(goodsDetail);
        getCloudInfo(goodsDetail, extraVO);
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
@@ -1344,7 +1344,7 @@
        extraVO.setShare(shareInfoVO);
        // 云发单文案信息
        getCloudInfo(goodsDetail);
        getCloudInfo(goodsDetail, extraVO);
                
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
@@ -1373,7 +1373,7 @@
     *     // 云发单文案信息
     * @param goodsDetail
     */
    private void getCloudInfo(GoodsDetailVO goodsDetail) {
    private void getCloudInfo(GoodsDetailVO goodsDetail, GoodsDetailExtraVO extraVO) {
        if (!goodsDetail.isHasCoupon()) {
            return;
        }
@@ -1397,12 +1397,8 @@
            }
            
            if (!StringUtil.isNullOrEmpty(cloudText) && !StringUtil.isNullOrEmpty(cloudPic)) {
                OtherInfo otherInfo = goodsDetail.getOtherInfo();
                if (otherInfo == null)
                    otherInfo = new OtherInfo();
                otherInfo.setCloudPic(cloudPic);
                otherInfo.setCloudText(cloudText);
                goodsDetail.setOtherInfo(otherInfo);
                extraVO.setCloudPic(cloudPic);
                extraVO.setCloudText(cloudText);
            }
        }
    }
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserCloudControllerV2.java
@@ -34,6 +34,7 @@
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudOrder;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
@@ -41,6 +42,7 @@
import com.yeshi.fanli.exception.user.cloud.UserCloudGoodsException;
import com.yeshi.fanli.exception.user.cloud.UserCloudGroupException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
@@ -55,6 +57,7 @@
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.aitaoker.AitaokerApiUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.user.cloud.UserCloudInfoVO;
@@ -93,7 +96,8 @@
    @Resource
    private GoodsEvaluateService goodsEvaluateService;
    
    @Resource
    private ConfigService configService;
    /**
     * 查询开通记录
@@ -575,7 +579,7 @@
     * @param out
     */
    @RequestMapping(value = "accordGoods")
    public void accordGoods(String callback, AcceptData acceptData, Long uid, Long goodsId, Integer goodsType,
    public void accordGoods(String callback, AcceptData acceptData, Long uid, String goodsId, Integer goodsType,
            PrintWriter out) {
        if (uid == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户未登录"));
@@ -589,11 +593,17 @@
        try {
            boolean state = false;
            UserCloudGoods cloudGoods = userCloudGoodsService.getByUidAndGoods(uid, goodsId, goodsType);
            String queryGoodsId = goodsId;
            if (goodsType == Constant.SOURCE_TYPE_SUNING) { // 苏宁
                String[] ids = SuningUtil.getGoodsIdDetail(goodsId);
                queryGoodsId = ids[1];
            }
            UserCloudGoods cloudGoods = userCloudGoodsService.getByUidAndGoods(uid, Long.parseLong(queryGoodsId), goodsType);
            if (cloudGoods != null) { // 取消加入选品库
                userCloudGoodsService.deleteByPrimaryKeyAndUid(cloudGoods.getId(), uid);
            } else { // 加入选品库
                Set<Long> set = new HashSet<Long>();
                Set<String> set = new HashSet<String>();
                set.add(goodsId);
                userCloudGoodsService.addGoods(uid, set, goodsType);
                state = true;
@@ -742,7 +752,14 @@
            userCloudService.sendByDynamic(uid, id);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("一键发单成功"));
        } catch (UserCloudException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
            if (e.getCode() > 1000) {
                JSONObject data = new JSONObject();
                data.put("msg", e.getMsg());
                data.put("link",  configService.get(ConfigKeyEnum.robotCloudLink.getKey()));
                JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(1000, data));
            } else {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
            }
        }
    }
    
@@ -757,22 +774,39 @@
     * @param out
     */
    @RequestMapping(value = "sendGoods")
    public void sendGoods(String callback, AcceptData acceptData, Long uid, Long goodsId, Integer goodsType, PrintWriter out) {
    public void sendGoods(String callback, AcceptData acceptData, Long uid, String goodsId, Integer goodsType, PrintWriter out) {
        if (uid == null || goodsId == null || goodsType == null) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("参数不能为空"));
            return;
        }
        
        try {
            GoodsEvaluate evaluate = goodsEvaluateService.queryExistSingle(goodsId +"", goodsType);
            GoodsEvaluate evaluate = goodsEvaluateService.queryExistSingle(goodsId, goodsType);
            if (evaluate != null) {
                userCloudService.sendByDynamic(uid, evaluate.getId());
            } else {
                userCloudService.sendCustomGoods(uid, goodsId, goodsType);
                Long gid = null;
                Long sellerId = null;
                if (goodsType == Constant.SOURCE_TYPE_SUNING) { // 苏宁
                    String[] ids = SuningUtil.getGoodsIdDetail(goodsId);
                    gid = Long.parseLong(ids[1]);
                    sellerId = Long.parseLong(ids[0]);
                } else {
                    gid = Long.parseLong(goodsId);
                }
                userCloudService.sendCustomGoods(uid, gid, goodsType, sellerId);
            }
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("一键发单成功"));
        } catch (UserCloudException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
            if (e.getCode() > 1000 && e.getCode() < 1100) {
                JSONObject data = new JSONObject();
                data.put("link",  configService.get(ConfigKeyEnum.robotCloudLink.getKey()));
                JsonUtil.printMode(out, callback, JsonUtil.loadTrue(e.getCode(), data, e.getMsg()).toString());
            } else {
                JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(),e.getMsg()));
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -32,7 +32,7 @@
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.order.SourceTypeEnum;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/cloud/UserCloudMapper.java
@@ -41,4 +41,18 @@
     * @return
     */
    List<Long> listValidUid(@Param("start") long start, @Param("count") int count);
    /**
     * 查询订单记录
     * @param start
     * @param count
     * @param uid
     * @param state
     * @return
     */
    List<UserCloud> query(@Param("start") long start, @Param("count") int count, @Param("key")String key, @Param("state")Integer state);
    Long count(@Param("key")String key, @Param("state")Integer state);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/cloud/UserCloudOrderMapper.java
@@ -56,5 +56,18 @@
     * @return
     */
    List<UserCloudOrder> getLasthourByUnpaid();
    /**
     * 查询订单记录
     * @param start
     * @param count
     * @param uid
     * @param state
     * @return
     */
    List<UserCloudOrder> query(@Param("start") long start, @Param("count") int count, @Param("key")String key, @Param("state")Integer state);
    Long count(@Param("key")String key, @Param("state")Integer state);
}
fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
@@ -28,7 +28,7 @@
import com.mongodb.GroupCommand;
import com.yeshi.fanli.dao.MongodbBaseDao;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
import com.yeshi.fanli.entity.order.SourceTypeEnum;
import com.yeshi.fanli.vo.order.OrderRankingVO;
@Repository
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/UserCloud.java
@@ -53,6 +53,9 @@
    @Column(name = "uc_update_time")
    private Date updateTime;
    private String nickName;// 昵称
    private String portrait;// 头像
    public Long getId() {
        return id;
    }
@@ -157,5 +160,20 @@
        this.groupNum = groupNum;
    }
    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;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/cloud/UserCloudOrder.java
@@ -22,7 +22,7 @@
    @Column(name = "crd_uid")
    private Long uid;
    @Expose
    @Column(name = "crd_money")
    private BigDecimal money;
@@ -43,6 +43,9 @@
    @Column(name = "crd_update_time")
    private Date updateTime;
    private String nickName;// 昵称
    private String portrait;// 头像
    public Long getId() {
        return id;
@@ -108,4 +111,20 @@
        this.updateTime = updateTime;
    }
    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;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java
@@ -16,34 +16,6 @@
@Document(collection = "order_money_daily_count")
public class OrderMoneyDailyCount {
    public enum SourceTypeEnum {
        taobao("淘宝", "http://img.flqapp.com/resource/icon/source_type_tb.png"),
        tmall("天猫", "http://img.flqapp.com/resource/icon/source_type_tm.png"),
        tmallGlobal("天猫国际", "http://img.flqapp.com/resource/icon/source_type_tm_inter.png"),
        juHuaSuan("聚划算", "http://img.flqapp.com/resource/icon/source_type_juhuasuan.png"),
        huangLv("航旅", "http://img.flqapp.com/resource/icon/source_type_hanglv.png"),
        kouBei("口碑", "http://img.flqapp.com/resource/icon/source_type_koubei.png"),
        elme("饿了么", "http://img.flqapp.com/resource/icon/source_type_elme.png"),
        jingDong("京东", "http://img.flqapp.com/resource/icon/source_type_jd.png"),
        pinDuoDuo("拼多多", "http://img.flqapp.com/resource/icon/source_type_pdd.png");
        private final String desc;
        private final String icon;
        private SourceTypeEnum(String desc, String icon) {
            this.desc = desc;
            this.icon = icon;
        }
        public String getDesc() {
            return desc;
        }
        public String getIcon() {
            return icon;
        }
    }
    @Id
    @Field
    private String id;
fanli/src/main/java/com/yeshi/fanli/entity/order/SourceTypeEnum.java
New file
@@ -0,0 +1,60 @@
package com.yeshi.fanli.entity.order;
public enum SourceTypeEnum {
    taobao("淘宝","淘宝","#FF5000","#FF5000", "http://img.flqapp.com/resource/icon/source_type_tb.png"),
    tmall("天猫","天猫", "#FE0036", "#FE0036", "http://img.flqapp.com/resource/icon/source_type_tm.png"),
    tmallGlobal("天猫国际", "天猫国际", "#7C48DB", "#7C48DB", "http://img.flqapp.com/resource/icon/source_type_tm_inter.png"),
    juHuaSuan("聚划算", "聚划算","#FE0036","#FE0036","http://img.flqapp.com/resource/icon/source_type_juhuasuan.png"),
    huangLv("航旅","飞猪","#3B3B39","#FDBA07", "http://img.flqapp.com/resource/icon/source_type_hanglv.png"),
    kouBei("口碑", "口碑", "#EA5421","#EA5421", "http://img.flqapp.com/resource/icon/source_type_koubei.png"),
    elme("饿了么","饿了么","#018DFF","#018DFF", "http://img.flqapp.com/resource/icon/source_type_elme.png"),
    jingDong("京东","京东","#E42219","#E42219", "http://img.flqapp.com/resource/icon/source_type_jd.png"),
    pinDuoDuo("拼多多", "拼多多","#F51E25","#F51E25","http://img.flqapp.com/resource/icon/source_type_pdd.png"),
    vip("唯品会","唯品会","#E30085", "#E30085", "http://img.flqapp.com/resource/icon/source_type_vip.png"),
    suNing("苏宁易购","苏宁易购","#010101","#FFA600", "http://img.flqapp.com/resource/icon/source_type_suning.png");
    private final String desc; // 数据存在名称
    private final String descShow; // 显示名称
    private final String fontColor; // 字体颜色
    private final String borderColor; //边框颜色
    private final String icon; // 图标
    private SourceTypeEnum(String desc, String descShow,String fontColor, String borderColor,String icon) {
        this.desc = desc;
        this.descShow = descShow;
        this.fontColor = fontColor;
        this.borderColor = borderColor;
        this.icon = icon;
    }
    public String getDesc() {
        return desc;
    }
    public String getIcon() {
        return icon;
    }
    public String getDescShow() {
        return descShow;
    }
    public String getFontColor() {
        return fontColor;
    }
    public String getBorderColor() {
        return borderColor;
    }
    public static SourceTypeEnum getByDesc(String desc) {
        if (desc == null || desc.trim().length() == 0)
            return null;
        for (SourceTypeEnum typeEnum: SourceTypeEnum.values()) {
            if (typeEnum.getDesc().equalsIgnoreCase(desc))
                return typeEnum;
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -201,7 +201,10 @@
    // 平台规则
    platformRule("platform_rule_link", "平台规则"),
    
    showSplashAd("show_splash_ad","是否显示开屏广告");
    showSplashAd("show_splash_ad","是否显示开屏广告"),
    robotCloudLink("robot_cloud_link","云发单链接");
    private final String key;
    private final String desc;
fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml
@@ -298,11 +298,11 @@
        SELECT COUNT(0)  FROM (SELECT co.`co_order_no` FROM yeshi_ec_hongbao_v2 v2
        LEFT JOIN yeshi_ec_hongbao_order h ON v2.`hb_id` = h.`ho_hongbao_id`
        LEFT JOIN yeshi_ec_common_order co ON h.`ho_order_id` = co.`co_id`
        WHERE v2.`hb_state` = 3
        WHERE v2.`hb_state` = 3  AND v2.`hb_uid` = #{uid}
             <if test="type == 1">AND v2.`hb_type` = 1</if>
             <if test="type == 2">AND v2.`hb_type` = 20</if>
             <if test="type == null">AND (v2.`hb_type` = 1 OR v2.`hb_type` = 20)</if>
            AND v2.`hb_uid` = #{uid} AND   co.`co_payment` >=  #{payment}
             <if test="payment != null">AND co.`co_payment` >=  #{payment}</if>
        GROUP BY co.`co_order_no`,co.`co_source_type`)A
    </select>
    
@@ -311,11 +311,11 @@
        SELECT COUNT(0)  FROM (SELECT co.`co_order_no` FROM yeshi_ec_hongbao_v2 v2
        LEFT JOIN yeshi_ec_hongbao_order h ON v2.`hb_id` = h.`ho_hongbao_id`
        LEFT JOIN yeshi_ec_common_order co ON h.`ho_order_id` = co.`co_id`
        WHERE (v2.`hb_state` = 1 or v2.`hb_state` = 2)
        WHERE  v2.`hb_uid` = #{uid} AND (v2.`hb_state` = 1 or v2.`hb_state` = 2)
             <if test="type == 1">AND v2.`hb_type` = 1</if>
             <if test="type == 2">AND v2.`hb_type` = 20</if>
             <if test="type == null">AND (v2.`hb_type` = 1 OR v2.`hb_type` = 20)</if>
            AND v2.`hb_uid` = #{uid} AND   co.`co_payment` >=  #{payment}
             <if test="payment != null">AND co.`co_payment` >=  #{payment}</if>
        GROUP BY co.`co_order_no`,co.`co_source_type`)A
    </select>
    
fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderMapper.xml
@@ -108,6 +108,8 @@
        <result column="co_state_desc" property="stateDesc" jdbcType="VARCHAR" />
        <result column="co_uid" property="userId" jdbcType="VARCHAR" />
        <result column="co_urank" property="urank" jdbcType="INTEGER" />
        <result column="co_child_source_type" property="childSourceType"
            jdbcType="VARCHAR" />
        <association property="userInfo" column="co_uid"
            resultMap="com.yeshi.fanli.dao.mybatis.UserInfoMapper.BaseResultMap" />
        <association property="commonOrderGoods" column="co_order_goods_id"
@@ -151,6 +153,8 @@
        <result column="co_trade_id" property="tradeId" jdbcType="VARCHAR" />
        <result column="co_state_desc" property="stateDesc" jdbcType="VARCHAR" />
        <result column="co_urank" property="urank" jdbcType="INTEGER" />
        <result column="co_child_source_type" property="childSourceType"
            jdbcType="VARCHAR" />
        <association property="userInfo" column="co_uid"
            select="com.yeshi.fanli.dao.mybatis.UserInfoMapper.selectByPrimaryKey" />
        <association property="commonOrderGoods" column="co_order_goods_id"
@@ -167,7 +171,7 @@
        co_order_goods_id,co_count,co_state,co_state_whole_order,
        co_estimate,co_eIncome,co_payment,co_settlement, co_third_create_time,
        MAX(co_settle_time) AS co_settle_time, co_order_by, co_create_time,
        co_update_time,co_state_desc,co_urank
        co_update_time,co_state_desc,co_urank,co_child_source_type
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"
        parameterType="java.lang.Long">
fanli/src/main/java/com/yeshi/fanli/mapping/user/cloud/UserCloudMapper.xml
@@ -103,5 +103,23 @@
    LIMIT #{start},{count}
  </select>
  
  <select id="query" resultMap="BaseResultMap">
    SELECT * FROM yeshi_ec_user_cloud d
    WHERE 1=1
        <if test="key != null  and key !=''"> AND d.`uc_uid` LIKE '%#{key}%' </if>
        <if test="state == 0">AND d.`uc_end_time`<![CDATA[<=]]>NOW()</if>
        <if test="state == 1">AND d.`uc_end_time` > NOW()</if>
    ORDER BY d.`uc_id` DESC
    LIMIT #{start},#{count}
  </select>
  <select id="count" resultType="Long">
      SELECT count(d.`uc_id`) FROM yeshi_ec_user_cloud d
    WHERE 1=1
         <if test="key != null  and key !=''"> AND d.`uc_uid` LIKE '%#{key}%' </if>
        <if test="state == 0">AND d.`uc_end_time`<![CDATA[<=]]>NOW()</if>
        <if test="state == 1">AND d.`uc_end_time` > NOW()</if>
  </select>
  
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/user/cloud/UserCloudOrderMapper.xml
@@ -89,4 +89,21 @@
    WHERE crd_state = 0 AND crd_update_time > DATE_SUB(NOW(),INTERVAL 1 HOUR)
  </select>
  
  <select id="query" resultMap="BaseResultMap">
      SELECT * FROM yeshi_ec_user_cloud_order d
    WHERE 1=1
     <if test="key != null  and key !=''"> AND d.`crd_uid` LIKE '%#{key}%' </if>
     <if test="state != null">AND d.crd_state = #{state}</if>
    ORDER BY d.`crd_id` DESC
    LIMIT #{start},#{count}
  </select>
  <select id="count" resultType="Long">
      SELECT count(d.`crd_id`) FROM yeshi_ec_user_cloud_order d
    WHERE 1=1
        <if test="key != null and key !='' "> AND d.`crd_uid` LIKE '%#{key}%' </if>
        <if test="state != null">AND d.crd_state = #{state}</if>
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -45,6 +45,7 @@
import com.yeshi.fanli.entity.order.ESOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.SourceTypeEnum;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.entity.suning.SuningOrderInfo;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
@@ -2107,6 +2108,21 @@
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
                order.setOrderType(4);
            }
            // 子来源类型
            ClientTextStyleVO shopStyleVO = new ClientTextStyleVO();
            SourceTypeEnum typeEnum = SourceTypeEnum.getByDesc(order.getChildSourceType());
            if (typeEnum == null) {
                shopStyleVO.setContent("其他");
                shopStyleVO.setColor("#FF5000");
                shopStyleVO.setBorderColor("#FF5000");
            } else {
                shopStyleVO.setContent(typeEnum.getDescShow());
                shopStyleVO.setColor(typeEnum.getFontColor());
                shopStyleVO.setBorderColor(typeEnum.getBorderColor());
            }
            order.setShopType(shopStyleVO);
            Date thirdCreateTime = order.getThirdCreateTime();
            if (thirdCreateTime != null) {
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
@@ -391,12 +391,12 @@
        userInfoVO.setCountScanHistory(countScanHistory);
        // 一度队员数量
        int firstTeamCount = shareMapper.myFirstTeamCount(uid + "");
        userInfoVO.setCountLevelOne(firstTeamCount);
        //int firstTeamCount = shareMapper.myFirstTeamCount(uid + "");
        //userInfoVO.setCountLevelOne(firstTeamCount);
        // 二度队员数量
        int secondTeamCount = shareMapper.mySecondTeamCount(uid + "");
        userInfoVO.setCountLevelTwo(secondTeamCount);
        //int secondTeamCount = shareMapper.mySecondTeamCount(uid + "");
        //userInfoVO.setCountLevelTwo(secondTeamCount);
        
        String userLevel = userInfoVO.getUserLevel();
        if (!StringUtil.isNullOrEmpty(userLevel)) {
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudGoodsServiceImpl.java
@@ -8,8 +8,14 @@
import org.springframework.stereotype.Service;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudGoodsMapper;
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.UserCloudMQMsg;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloudGoods;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
@@ -25,6 +31,11 @@
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
@Service
@@ -44,6 +55,9 @@
    
    @Resource
    private CommonGoodsService commonGoodsService;
    @Resource(name = "producer")
    private Producer producer;
    
    
    @Override
@@ -85,7 +99,7 @@
    }
    @Override
    public void addGoods(Long uid, Set<Long> set, Integer goodsType) throws UserCloudGoodsException {
    public void addGoods(Long uid, Set<String> set, Integer goodsType) throws UserCloudGoodsException {
        if (uid == null) {
            throw new UserCloudGoodsException(1, "用户尚未登录");
        }
@@ -94,26 +108,37 @@
            throw new UserCloudGoodsException(1, "系统参数不正确");
        }
        for (Long goodsId : set) {
        for (String goodsId : set) {
            CommonGoods commonGoods = null;
            if (goodsType == Constant.SOURCE_TYPE_TAOBAO)  { // 淘宝
                try {
                    TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(goodsId);
                    TaoBaoGoodsBrief goodsBrief = redisManager.getTaoBaoGoodsBrief(Long.parseLong(goodsId));
                    commonGoods = CommonGoodsFactory.create(goodsBrief);
                } catch (TaobaoGoodsDownException e) {
                    throw new UserCloudGoodsException(1, goodsId + "商品已下架");
                }
            } else if (goodsType == Constant.SOURCE_TYPE_JD) { // 京东
                JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
                JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
                if (goods == null)
                    throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
                commonGoods = CommonGoodsFactory.create(goods);
            } else if (goodsType == Constant.SOURCE_TYPE_PDD) { // 拼多多
                PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
                PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(Long.parseLong(goodsId));
                if (goods == null)
                    throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
                commonGoods = CommonGoodsFactory.create(goods);
            }
            } else if (goodsType == Constant.SOURCE_TYPE_VIP) { // 唯品会
                VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(goodsId);
                if (goods == null)
                    throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
                commonGoods = CommonGoodsFactory.create(goods);
            } else if (goodsType == Constant.SOURCE_TYPE_SUNING) { // 苏宁
                String[] ids = SuningUtil.getGoodsIdDetail(goodsId);
                SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(ids[1], ids[0]);
                if (goods == null)
                    throw new UserCloudGoodsException(1, goodsId + "未找到商品信息");
                commonGoods = CommonGoodsFactory.create(goods);
            }
            if (commonGoods == null) {
                LogHelper.test("云发单未找到商品详情,id=" + goodsId + "type=" + goodsType);
@@ -143,6 +168,15 @@
                cloudGoods.setUpdateTime(new Date());
                userCloudGoodsMapper.insertSelective(cloudGoods);
            }
            if (cloudGoods.getId() != null) {
                if (!Constant.IS_TEST) {
                    UserCloudMQMsg msg = new UserCloudMQMsg(uid, cloudGoods.getId() +"", UserCloudMQMsg.TYPE_STORE);
                    Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userCloud, msg);
                    producer.send(message);
                }
            }
        }
    }
    
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudOrderServiceImpl.java
@@ -113,4 +113,20 @@
    public List<UserCloudOrder> getLasthourByUnpaid() {
        return userCloudOrderMapper.getLasthourByUnpaid();
    }
    @Override
    public List<UserCloudOrder> query(int page, int count,String key, Integer state) {
        return userCloudOrderMapper.query((page-1)* count, count, key, state);
    }
    @Override
    public long count(String key, Integer state) {
        Long count = userCloudOrderMapper.count(key, state);
        if (count == null)
            count = 0L;
        return count;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/cloud/UserCloudServiceImpl.java
@@ -11,11 +11,9 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.BigDecimalUtil;
import org.yeshi.utils.entity.FileUploadResult;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.yeshi.fanli.controller.client.v2.ShareControllerV2;
import com.yeshi.fanli.dao.mybatis.user.cloud.UserCloudMapper;
import com.yeshi.fanli.dto.aitaoker.RobotInfoDTO;
import com.yeshi.fanli.dto.aitaoker.WeiXinGroupDTO;
@@ -24,6 +22,10 @@
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.UserCloudMQMsg;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsImg;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.VIPConvertResultDTO;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum;
@@ -77,7 +79,11 @@
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
import com.yeshi.fanli.util.vipshop.VipShopUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
@Service
@@ -162,6 +168,23 @@
        Long count = userCloudMapper.countByUid(uid);
        return count;
    }
    @Override
    public List<UserCloud> query(int page, int count,String key, Integer state) {
        return userCloudMapper.query((page-1)* count, count, key, state);
    }
    @Override
    public long count(String key, Integer state) {
        Long count = userCloudMapper.count(key, state);
        if (count == null)
            count = 0L;
        return count;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -306,7 +329,7 @@
        
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        if (StringUtil.isNullOrEmpty(inviteCode))
            throw new UserCloudException(1, "邀请码未激活");
            throw new UserCloudException(3, "邀请码未激活");
        UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
        String relationId = null;
@@ -321,20 +344,20 @@
        // 验证是否开通
        UserCloud userCloud = userCloudMapper.getValidByUid(uid);
        if (userCloud == null)
            throw new UserCloudException(1, "云发单已过期");
            throw new UserCloudException(1001, "云发单已过期");
        Integer robotId = userCloud.getRobotId();
        if (robotId == null)
            throw new UserCloudException(1, "云发单机器人不存在");
            throw new UserCloudException(1002, "云发单机器人不存在");
        String wxId = userCloud.getWxId();
        if (StringUtil.isNullOrEmpty(wxId)) 
            throw new UserCloudException(1, "微信号缺失");
            throw new UserCloudException(1003, "微信号不存在,请先微信登录");
        
        // 验证开启状态
        List<UserCloudGroup> listGroup = userCloudGroupService.listByUid(uid);
        if (listGroup == null || listGroup.size() == 0)
            throw new UserCloudException(1, "请先添加云发单群信息");
            throw new UserCloudException(1004, "请先微信登录");
        List<UserCloudGroup> listOpen = new ArrayList<>();
        for (UserCloudGroup cloudGrou : listGroup) {
@@ -343,7 +366,8 @@
            }
        }
        if (listOpen.size() == 0)
            throw new UserCloudException(1, "请先开启云发单群功能");
            throw new UserCloudException(1005, "请先开启云发单群功能");
        
        // 验证发圈是否可行
        GoodsEvaluate evaluate = goodsEvaluateService.getById(id);
@@ -414,16 +438,18 @@
                if (imgInfo.getType() == ImgEnum.goods) {
                    cloudPic = imgInfo.getUrl();
                }
                listImg.add(imgInfo.getUrl());
                
                GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
                if (goodsVO == null) {
                    listImg.add(imgInfo.getUrl());
                } else {
                    String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl());
                    if (!StringUtil.isNullOrEmpty(jumpLink)) {
                        qrCode = jumpLink;
                    }
                }
                // 取消二维码图
//                GoodsDetailVO goodsVO = imgInfo.getGoodsVO();
//                if (goodsVO == null) {
//                    listImg.add(imgInfo.getUrl());
//                } else {
//                    String jumpLink = getJumpLink(goodsVO, user, relationId, inviteCode, imgInfo.getUrl());
//                    if (!StringUtil.isNullOrEmpty(jumpLink)) {
//                        qrCode = jumpLink;
//                    }
//                }
            }
            
            if (cloudPic == null) {
@@ -502,10 +528,14 @@
                
                // 发送图片
                if (!StringUtil.isNullOrEmpty(cloudPic)) {
                    String imgBase64 = ImageToBase64.NetImageToBase64(cloudPic);
                    boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), imgBase64);
                    if (macsend)
                        sendContent.setPicUrl(cloudPic);
                    try {
                        String imgBase64 = ImageToBase64.NetImageToBase64(cloudPic);
                        boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), imgBase64);
                        if (macsend)
                            sendContent.setPicUrl(cloudPic);
                    } catch (Exception e) {
                        LogHelper.errorDetailInfo(e);
                    }
                }
                
                // 评论文本
@@ -523,58 +553,11 @@
        }
    }
    
    /**
     * 商品分享跳转链接
     * @param goodsVO
     * @param user
     * @param relationId
     * @param inviteCode
     * @param mainPic
     * @return
     */
    private String getJumpLink(GoodsDetailVO goodsVO, UserInfo user, String relationId, String inviteCode,
            String mainPic) {
        String jumpLink = null;
        if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
            TaoBaoLink taoBaoLink = null;
            try {
                taoBaoLink = shareGoodsService.getTaoBaoLinkForShare(user.getId(), Long.parseLong(goodsVO.getGoodsId()), relationId);
            } catch (ShareGoodsException e) {
                e.printStackTrace();
            }
            jumpLink = ShareControllerV2.getERCodeContentNew(
                    configService.get(ConfigKeyEnum.taobaoShareQrcodeText.getKey()), taoBaoLink.getGoods(),
                    TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
            JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(goodsVO.getGoodsId()));
            if (jdGoods == null) {
                return null;
            }
            String couponUrl = null;
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            String materialId = "https://item.jd.com/" + goodsVO.getGoodsId() + ".html";
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
                    user.getId() + "");
        } else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
            jumpLink = PinDuoDuoApiUtil.getPromotionUrl(Long.parseLong(goodsVO.getGoodsId()), PinDuoDuoApiUtil.PID_SHARE + "",
                    user.getId() + "");
        }
        FileUploadResult uploadResult = qrCodeService.drawDynamicGoodsPoster(jumpLink, user.getPortrait(), inviteCode, mainPic, goodsVO);
        if (uploadResult != null) {
            return uploadResult.getUrl();
        }
        return null;
    }
    
    @Override
    public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType) throws UserCloudException{
        sendCircleByGoods(uid, goodsId, goodsType, null);
    public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudException{
        sendCircleByGoods(uid, goodsId, goodsType, null, sellerId);
    }
    @Override
@@ -589,7 +572,7 @@
        
        try {
            // 发送商品
            sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id);
            sendCircleByGoods(uid, cgoods.getGoodsId(), cgoods.getGoodsType(), id, cgoods.getSellerId());
            
            UserCloudGoods record = new UserCloudGoods();
            record.setId(id);
@@ -601,7 +584,7 @@
        }
    }
    private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId) throws UserCloudException {
    private void sendCircleByGoods(Long uid, Long goodsId, Integer goodsType, Long storeId, Long sellerId) throws UserCloudException {
        // 验证是否授权
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user == null)
@@ -610,6 +593,10 @@
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            throw new UserCloudException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
        }
        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
        if (StringUtil.isNullOrEmpty(inviteCode))
            throw new UserCloudException(3, "邀请码未激活");
        UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
        String relationId = null;
@@ -623,7 +610,7 @@
        // 验证是否开通
        UserCloud userCloud = userCloudMapper.getValidByUid(uid);
        if (userCloud == null)
            throw new UserCloudException(1, "云发单已过期");
            throw new UserCloudException(1001, "云发单已过期");
        Integer robotId = userCloud.getRobotId();
        if (robotId == null)
@@ -631,12 +618,12 @@
        String wxId = userCloud.getWxId();
        if (StringUtil.isNullOrEmpty(wxId)) 
            throw new UserCloudException(1, "微信号缺失");
            throw new UserCloudException(1002, "请先登录微信");
        
        // 验证开启状态
        List<UserCloudGroup> listGroup = userCloudGroupService.listByUid(uid);
        if (listGroup == null || listGroup.size() == 0)
            throw new UserCloudException(1, "请先添加云发单群信息");
            throw new UserCloudException(1003, "请先登录微信");
        List<UserCloudGroup> listOpen = new ArrayList<>();
        for (UserCloudGroup cloudGrou : listGroup) {
@@ -646,7 +633,7 @@
        }
        
        if (listOpen.size() == 0)
            throw new UserCloudException(1, "请先开启云发单群功能");
            throw new UserCloudException(1004, "请先开启云发单群功能");
        
        // 保存发送记录
        UserCloudSendRecord sendRecord = new UserCloudSendRecord();
@@ -672,9 +659,9 @@
        } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
            sendPDDGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId());
        } else if (goodsType == Constant.SOURCE_TYPE_VIP) {
            sendVIPGoods(user, robotId, wxId, goodsId, relationId, listOpen, result.getId());
        } else if (goodsType == Constant.SOURCE_TYPE_SUNING) {
            sendSuNingGoods(user, robotId, wxId, goodsId, sellerId, relationId, listOpen, result.getId());
        }
    }
    
@@ -843,6 +830,85 @@
    
    
    /**
     * 唯品会商品
     * @param user
     * @param robotId
     * @param wxId
     * @param goodsId
     * @param relationId
     * @param listOpen
     * @param pid
     * @throws UserCloudException
     */
    private void sendVIPGoods(UserInfo user, int robotId, String wxId, Long goodsId, String relationId,
            List<UserCloudGroup> listOpen, String pid) throws UserCloudException {
        VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(goodsId + "");
        if (goods == null)
            throw new UserCloudException(1, "该商品已下架");
        VIPConvertResultDTO resultDTO = VipShopApiUtil.convertLink(goodsId + "", VipShopUtil.getShareChanTag(user.getId()));
        String jumpLink = resultDTO.getUrl();
        boolean coupon = false;
        String quanPrice = "";
        String couponAmount = "";
        // 获取推荐语
        String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getGoodsName(), null,
                couponAmount, null);
        // 获取评论语
        String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, goods.getMarketPrice(),
                quanPrice, ConfigKeyEnum.quickShareJDCommentText);
        // 云发单
        sendGoods(robotId, wxId, listOpen, recommendText, commentText, goods.getGoodsDetailPictures(), user.getId(), pid);
    }
    /**
     * 京东商品云发单
     * @param user
     * @param robotId
     * @param wxId
     * @param goodsId
     * @param relationId
     * @param listOpen
     * @throws UserCloudException
     */
    private void sendSuNingGoods(UserInfo user, int robotId, String wxId, Long goodsId, Long sellerId, String relationId,
            List<UserCloudGroup> listOpen, String pid) throws UserCloudException {
        SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsId +"", sellerId +"");
        if (goods == null)
            throw new UserCloudException(1, "该商品已下架");
        String couponLink = goods.getCouponInfo().getCouponUrl();
        String jumpLink = SuningApiUtil.convertLink(SuningUtil.getProductUrl(sellerId +"", goodsId +""),
                StringUtil.isNullOrEmpty(couponLink) ? null : couponLink, SuningApiUtil.PID_SHARE, user.getId() + "");
        boolean coupon = false;
        String quanPrice = "";
        String couponAmount = "";
        String sales = null;
        // 获取推荐语
        String recommendText = shareGoodsTextTemplateService.getRecommendText(coupon, goods.getCommodityInfo().getCommodityName(), sales,
                couponAmount, null);
        // 获取评论语
        String zkPrice = goods.getCommodityInfo().getCommodityPrice().toString();
        String commentText = shareGoodsTextTemplateService.getCommentTextByLink(coupon, jumpLink, zkPrice, quanPrice,
                ConfigKeyEnum.quickShareJDCommentText);
        List<String> imgList = new ArrayList<>();
        for (SuningGoodsImg img : goods.getCommodityInfo().getPictureUrl()) {
            imgList.add(img.getPicUrl());
        }
        // 云发单
        sendGoods(robotId, wxId, listOpen, recommendText, commentText, imgList, user.getId(), pid);
    }
    /**
     * 发送商品
     * @param robotId
     * @param title
@@ -896,10 +962,15 @@
                // 发送图片
                String picurl = listImg.get(0);
                if (!StringUtil.isNullOrEmpty(picurl)) {
                    String imgBase64 = ImageToBase64.NetImageToBase64(picurl);
                    boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), imgBase64);
                    if (macsend)
                        sendContent.setPicUrl(picurl);
                    try {
                        String imgBase64 = ImageToBase64.NetImageToBase64(picurl);
                        boolean macsend = AitaokerApiUtil.macsendImgBase64(robotId, cloudGroup.getGroupId(), imgBase64);
                        if (macsend)
                            sendContent.setPicUrl(picurl);
                    } catch (Exception e) {
                        LogHelper.errorDetailInfo(e);
                    }
                }
                // 评论文本
                List<String> list = new ArrayList<>();
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudGoodsService.java
@@ -29,7 +29,7 @@
     * @param goodsType
     * @throws UserCloudGoodsException
     */
    public void addGoods(Long uid, Set<Long> set, Integer goodsType) throws UserCloudGoodsException;
    public void addGoods(Long uid, Set<String> set, Integer goodsType) throws UserCloudGoodsException;
    
    /**
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudOrderService.java
@@ -70,4 +70,16 @@
     */
    public List<UserCloudOrder> getLasthourByUnpaid();
    /**
     * 查询
     * @param page
     * @param count
     * @param key
     * @param state
     * @return
     */
    public List<UserCloudOrder> query(int page, int count, String key, Integer state);
    long count(String key, Integer state);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/cloud/UserCloudService.java
@@ -1,5 +1,7 @@
package com.yeshi.fanli.service.inter.user.cloud;
import java.util.List;
import com.yeshi.fanli.entity.bus.user.cloud.CloudOrderMenuEnum;
import com.yeshi.fanli.entity.bus.user.cloud.UserCloud;
import com.yeshi.fanli.exception.user.cloud.UserCloudException;
@@ -82,7 +84,7 @@
     * @param goodsType
     * @throws UserCloudException
     */
    public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType) throws UserCloudException;
    public void sendCustomGoods(Long uid, Long goodsId, Integer goodsType, Long sellerId) throws UserCloudException;
    /**
     * 定时发送云发单
@@ -90,4 +92,8 @@
     */
    public void fixedTimeSend(String id);
    public List<UserCloud> query(int page, int count, String key, Integer state);
    public long count(String key, Integer state);
}
fanli/src/main/java/com/yeshi/fanli/service/manger/order/OrderMoneyStatisticManager.java
@@ -17,7 +17,7 @@
import com.yeshi.fanli.dao.mybatis.order.UserOrderDailyStatisticMapper;
import com.yeshi.fanli.entity.bus.user.ThreeSaleDetail;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
import com.yeshi.fanli.entity.order.OrderMoneyDailyCount.SourceTypeEnum;
import com.yeshi.fanli.entity.order.SourceTypeEnum;
import com.yeshi.fanli.entity.order.dividents.TeamDividentsSourceOrderUserMap;
import com.yeshi.fanli.service.inter.order.OrderMoneyDailyCountService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleDetailService;
fanli/src/main/java/com/yeshi/fanli/util/ImageToBase64.java
@@ -19,8 +19,8 @@
        System.out.println(netImageToBase64);
        // 下面是本地图片转换Base64的方法
         String imagePath = "本地图片路径";
         ImageToBase64(imagePath);
         //String imagePath = "本地图片路径";
        // ImageToBase64(imagePath);
    }
    /**
fanli/src/main/java/com/yeshi/fanli/vo/goods/GoodsDetailExtraVO.java
@@ -19,7 +19,7 @@
     * 
     */
    private static final long serialVersionUID = 1L;
    // 是否IOS上线
    @Expose
    private boolean iosOnling;
@@ -38,7 +38,7 @@
    // 是否跳转原生APP
    @Expose
    private Boolean isNative;
    // 图文详情链接
    @Expose
    private String detailUrl;
@@ -63,11 +63,18 @@
    @Expose
    private List<ShamUser> listCouponUser;
    @Expose
    private String couponJumpLink;//券跳转链接,拼多多专用
    private String couponJumpLink;// 券跳转链接,拼多多专用
    @Expose
    private String nativeCouponJumpLink;//原生券跳转链接,拼多多专用
    private String nativeCouponJumpLink;// 原生券跳转链接,拼多多专用
    @Expose
    private Boolean vip;//是否为VIP
    private Boolean vip;// 是否为VIP
    // 云发单图片
    @Expose
    private String cloudPic;
    // 云发单文字
    @Expose
    private String cloudText;
    public Boolean getVip() {
        return vip;
@@ -197,4 +204,19 @@
        this.listCouponUser = listCouponUser;
    }
    public String getCloudPic() {
        return cloudPic;
    }
    public void setCloudPic(String cloudPic) {
        this.cloudPic = cloudPic;
    }
    public String getCloudText() {
        return cloudText;
    }
    public void setCloudText(String cloudText) {
        this.cloudText = cloudText;
    }
}
fanli/src/main/java/com/yeshi/fanli/vo/goods/OtherInfo.java
@@ -31,13 +31,6 @@
    @Expose
    private String fanliMoneyPlus;
    // 云发单图片
    @Expose
    private String cloudPic;
    // 云发单文字
    @Expose
    private String cloudText;
    public RewardCouponVO getRewardCoupon() {
        return rewardCoupon;
    }
@@ -68,22 +61,6 @@
    public void setFanliMoneyPlus(String fanliMoneyPlus) {
        this.fanliMoneyPlus = fanliMoneyPlus;
    }
    public String getCloudPic() {
        return cloudPic;
    }
    public void setCloudPic(String cloudPic) {
        this.cloudPic = cloudPic;
    }
    public String getCloudText() {
        return cloudText;
    }
    public void setCloudText(String cloudText) {
        this.cloudText = cloudText;
    }
}
fanli/src/main/java/com/yeshi/fanli/vo/msg/ClientTextStyleVO.java
@@ -17,11 +17,13 @@
    @Expose
    private String content;
    @Expose
    private String color;
    private String color; // 字颜色
    @Expose
    private String bottomColor;
    private String bottomColor; // 背景颜色
    @Expose
    private String img;
    private String borderColor; // 边框颜色
    @Expose
    private String img; // 图片
    @Expose
    private String fontSize = "1"; // 字体倍数
@@ -90,4 +92,13 @@
    public void setFontSize(String fontSize) {
        this.fontSize = fontSize;
    }
    public String getBorderColor() {
        return borderColor;
    }
    public void setBorderColor(String borderColor) {
        this.borderColor = borderColor;
    }
}
fanli/src/main/java/com/yeshi/fanli/vo/order/CommonOrderVO.java
@@ -134,6 +134,12 @@
    @Expose
    private String orderDesc;// 订单描述
    // 店铺类型 2.1.2新增
    @Expose
    private ClientTextStyleVO shopType;
    public String getVipOrderDesc() {
        return vipOrderDesc;
@@ -454,5 +460,13 @@
    public void setRebateLink(String rebateLink) {
        this.rebateLink = rebateLink;
    }
    public ClientTextStyleVO getShopType() {
        return shopType;
    }
    public void setShopType(ClientTextStyleVO shopType) {
        this.shopType = shopType;
    }
    
}