package com.cnd3b.restcontroller.singleagent.appclient.data;

import com.alibaba.fastjson.JSONObject;
import com.cnd3b.common.data.Row;
import com.cnd3b.common.data.Rows;
import com.cnd3b.common.data.db.DBConnect;

import java.util.ArrayList;
import java.util.Calendar;

public class DataTips {
    JSONObject tipsobject = null;
    Rows datarows = null;
    String type = null;

    public DataTips(Rows datarows, String type) {
        tipsobject = new JSONObject();
        this.datarows = datarows;
        this.type = type;
    }

    public DataTips(String type) {
        tipsobject = new JSONObject();
        this.type = type;
    }

    public JSONObject getTips() {
        switch (type) {
            case "客户来源分析":
                return createTips1();
            case "新增意向客户分析":
                return createTips2();
            case "销售动作分析":
                return createTips3();
            case "销售渠道分析":
                return createTips4();
            case "成交产品分析":
                return createTips5();
            case "客单值分析":
                return createTips6();
            case "小区占比分析":
                return createTips7();
            case "小区深度分析":
                return createTips16();
            case "退单率分析":
                return createTips8();
            case "销售情况分析":
                return createTips9();
            case "事件订单占比分析":
                return createTips10();
            case "月度杂项费用分析":
                return createTips11();
            case "月度盈亏分析":
                return createTips12();
            case "老客户信息表":
                return createTips13();
            case "老客户维护系统生日提醒":
                return createTips18();
            case "老客户维护系统周年提醒":
                return createTips19();
            case "意向客户信息表":
                return createTips14();
            case "意向客户跟进系统":
                return createTips17();
            case "接待次数与成交分析":
                return createTips15();
            default:break;
        }
        return null;
    }

    /**
     * 客户来源分析
     * 除"其他"及"零售"外包含3各及以上的动作时才返回建议。
     *
     * @return
     */
    public JSONObject createTips1() {
        ArrayList<Row> fchannelList = new ArrayList<>();
        for (Row datarow : datarows) {
            if (!"其他,零售".contains(datarow.getString("fchannel"))) {
                fchannelList.add(datarow);
            }
        }
        if (fchannelList.size() >= 3) {
            String fchannel1 = fchannelList.get(0).getString("fchannel");
            String fchannel2 = fchannelList.get(1).getString("fchannel");
            tipsobject.put("数据来源", "接待录入");
            tipsobject.put("关键词", "加强" + fchannel1 + "、加强" + fchannel2);
            tipsobject.put("图片解读", "关注销售占比较小的渠道");
            tipsobject.put("数据排除", "其它占比与零售占比不作为参考数据");
            tipsobject.put("策略参考", fchannel1 + "、" + fchannel2 + "需要加强，假如，您的销售渠道不来源于以上两项，可以忽略");
        }
        return tipsobject;
    }

    /**
     * 新增意向客户分析
     * 当前月的新增接待客户数是否大于当前月的已过天数（因为是按照每天1个计算）。
     *
     * @return
     */
    public JSONObject createTips2() {
        if (datarows.size() > 0) {
            int fcount = 0;//当前月的新增意向客户数量
            for (Row datarow : datarows) {
                if (datarow.getInteger("fmonth") == Calendar.getInstance().get(Calendar.MONTH)) {
                    fcount = fcount + datarow.getInteger("fcount");
                }
            }
            boolean fispass = (fcount >= Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
            tipsobject.put("数据来源", "接待录入");
            tipsobject.put("关键词", fispass ? "基础达标 继续努力" : "增加引流");
            tipsobject.put("图片解读", "平台给予的基础新增意向客户：30个/月（1个/天）");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", "您在当下的新增客户" + (fispass ? ">=最低标准，基础值达标，继续努力。" : "<最低标准，建议增加引流。"));
        }
        return tipsobject;
    }

    /**
     * 销售动作分析
     *
     * @return
     */
    public JSONObject createTips3() {
        if (datarows.size() >= 3) {
            String fcustaction = ""; //问题所在阶段
            int fcount = 0;
            for (int i = 0; i < datarows.size() - 1; i++) {
                int newcount = datarows.get(i).getInteger("fcount") - datarows.get(i + 1).getInteger("fcount");
                if (newcount > fcount) {
                    fcustaction = datarows.get(i + 1).getString("fcustaction");
                    fcount = newcount;
                }
            }
            if (!"".equals(fcustaction)) {
                if ("进店".equals(fcustaction)) {
                    tipsobject.put("关键词", "关注进店 加强引流");
                    tipsobject.put("策略参考", "您在当下的加微信至进店阶段流失率最大，加强引流：多开展活动与事件，让客户进店");
                } else if ("坐下".equals(fcustaction)) {
                    tipsobject.put("关键词", "提升导购 知识技巧");
                    tipsobject.put("策略参考", "您在当下的进店至坐下阶段流失率最大，坐下是客户成交前的必经动作，需要提升导购技巧与专业知识");
                } else if ("设计".equals(fcustaction)) {
                    tipsobject.put("关键词", "引导设计 需要加强");
                    tipsobject.put("策略参考", "您在当下的坐下至设计阶段流失率最大，设计是客户成交的关键步骤，在引导客户设计方面提升");
                } else if ("成交".equals(fcustaction)) {
                    tipsobject.put("关键词", "关注设计 提升设计");
                    tipsobject.put("策略参考", "您在当下的设计至成交阶段流失率最大，有可能客户因设计不满意导致成交率低，重点提升设计水平");
                }
                tipsobject.put("数据来源", "销售录入");
                tipsobject.put("数据排除", "无");
                tipsobject.put("图片解读", "相邻动作之间，百分比跨度最大的值，即：优先提升动作，数据判断导向：以成交为导向");
            }
        }
        return tipsobject;
    }

    /**
     * 销售渠道分析
     *
     * @return
     */
    public JSONObject createTips4() {
        ArrayList<Row> fchannelList = new ArrayList<>();
        for (Row datarow : datarows) {
            if (!"其他,零售".contains(datarow.getString("fchannel"))) {
                fchannelList.add(datarow);
            }
        }
        if (fchannelList.size() >= 3) {
            String fchannel1 = fchannelList.get(0).getString("fchannel");
            String fchannel2 = fchannelList.get(1).getString("fchannel");
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", "加强" + fchannel1 + "、加强" + fchannel2);
            tipsobject.put("图片解读", "关注销售占比较小的渠道");
            tipsobject.put("数据排除", "其它占比与零售占比不作为参考数据");
            tipsobject.put("策略参考", fchannel1 + "、" + fchannel2 + "需要加强，假如，您的销售渠道不来源于以上两项，可以忽略");
        }
        return tipsobject;
    }

    /**
     * 成交产品分析
     *
     * @return
     */
    public JSONObject createTips5() {
        if (datarows.size() >= 3) {
            String fprodname = datarows.get(0).getString("fprodname");
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", fprodname + " 提升毛利");
            tipsobject.put("图片解读", "关注销量最高的产品");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", fprodname + "销量最高，建议提升毛利，同时，可以通过同类型、价格相近的新品进行迭代的方式，提升毛利与销售");
        }
        return tipsobject;
    }

    /**
     * 客单值分析
     *
     * @return
     */
    public JSONObject createTips6() {
        if (datarows.size() >= 2) {
            double famount1 = datarows.get(datarows.size() - 1).getDouble("famount");
            double famount2 = datarows.get(datarows.size() - 2).getDouble("famount");
            if (famount1 > famount2) {
                tipsobject.put("关键词", "客单值提升 继续努力");
                tipsobject.put("策略参考", "当下的客单值同比上月有所提升，继续努力");
            } else {
                tipsobject.put("关键词", "客单值下滑 需要提升");
                tipsobject.put("策略参考", "当下的客单值同比上月有所下滑，建议您分析下原因，提升客单值");
            }
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("图片解读", "以同比上月平均客单值作为依据");
            tipsobject.put("数据排除", "无");
        }
        return tipsobject;
    }

    /**
     * 小区占比分析
     *
     * @return
     */
    public JSONObject createTips7() {
        if (datarows.size() >= 3) {
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", "选定主攻小区，定小区档次，定目标客单值");
            tipsobject.put("图片解读", "以小区成交数以及小区成交占比数两个维度为依据");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", "根据您城市的情况，判定成交小区是否主攻；根据您在选定小区的最大客单值，判断小区档次以及设定目标客单值");
        }
        return tipsobject;
    }

    /**
     * 小区深度分析
     *
     * @return
     */
    public JSONObject createTips16() {
        if (datarows.size() >= 3) {
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", "根据客户所在小区，合理推荐产品、合理报价");
            tipsobject.put("图片解读", "给客户推荐产品与报价时，注意3个维度：最低客单值、最高客单值、平均客单值；小区成交总数，是让您判断该小区是否还有潜力主攻");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", "您推荐给客户的产品与报价，是根据客户所在小区，以及客单值作为依据，即：给客户的报价尽量＞小区最低客单值，＜小区最高客单值");
        }
        return tipsobject;
    }

    /**
     * 意向客户跟进系统
     *
     * @return
     */
    public JSONObject createTips17() {
        tipsobject.put("数据来源", "接待录入");
        tipsobject.put("关键词", "下面的客户，已经很久没有来访了，请您及时跟进");
        tipsobject.put("图片解读", "以最近来访日期为依据，往后连续7天与14天均没有来访记录，则意向客户跟进系统启动，即：系统会显示，并对您进行提醒，让您跟进图表中的客户");
        tipsobject.put("数据排除", "无");
        tipsobject.put("策略参考", "赶紧跟进图表中的客户，假如，某客户已经电话联系，则对应点击“已跟进”；假如，某客户经证实已经购买其它品牌或暂时不计划购买我们的产品，则对应点击“已放弃”");
        return tipsobject;
    }

    /**
     * 老客户维护系统生日提醒
     *
     * @return
     */
    public JSONObject createTips18() {
        tipsobject.put("数据来源", "销售录入");
        tipsobject.put("关键词", "记得给老客户打电话，送上生日祝福");
        tipsobject.put("图片解读", "以老客户生日为依据，客户每年的生日，老客户维护系统启动，即：系统会显示，并对您进行提醒，让您与图表中的老客户打电话，送上生日祝福");
        tipsobject.put("数据排除", "无");
        tipsobject.put("策略参考", "赶紧联系图表中的老客户，并祝福生日快乐，假如，某客户已经送上祝福，则对应点击“已电话祝福”");
        return tipsobject;
    }

    /**
     * 老客户维护系统周年提醒
     *
     * @return
     */
    public JSONObject createTips19() {
        tipsobject.put("数据来源", "销售录入");
        tipsobject.put("关键词", "客户购买产品的周年日到了，记得给老客户电话回访");
        tipsobject.put("图片解读", "以老客户购买日期为依据，每年的这个时间，老客户维护系统启动，即：系统会显示，并对您进行提醒，让您与图表中的老客户打电话，进行电话回访服务");
        tipsobject.put("数据排除", "无");
        tipsobject.put("策略参考", "赶紧联系图表中的老客户，进行电话回访服务，假如，某客户已经电话回访，则对应点击“已电话回访”");
        return tipsobject;
    }

    /**
     * 退单率分析
     *
     * @return
     */
    public JSONObject createTips8() {
        if (datarows.size() > 0) {
            Row lastrow = datarows.getLastRow();
            int freturncount = lastrow.getInteger("freturncount");
            if (freturncount > 0) {
                String siteid = lastrow.getString("siteid");
                String tagentsid = lastrow.getString("tagentsid");
                String fmonth = lastrow.getString("fmonth");
                DBConnect dbConnect = new DBConnect();
                Rows rows = dbConnect.runSqlQuery("select top(1)fchannel from tcustomer_reception where fstatus='退单' and fchannel!='其它' and CONVERT(varchar(7),fdate,120)='" + fmonth + "' and siteid='" + siteid + "' and tagentsid='" + tagentsid + "' group by fchannel order by count(fchannel) desc");
                if (!rows.isEmpty()) {
                    String fchannel = rows.get(0).getString("fchannel");
                    tipsobject.put("数据来源", "销售录入");
                    tipsobject.put("关键词", "退单主要渠道：" + fchannel + "  请改进");
                    tipsobject.put("图片解读", "分析退单最多的渠道");
                    tipsobject.put("数据排除", "退单渠道项“其它”不列入参考数据");
                    tipsobject.put("策略参考", "您的退单，主要来源于" + fchannel + "，请改进，避免下次再出现类似退单现象");
                }
            }
        }
        return tipsobject;
    }

    /**
     * 销售情况分析
     *
     * @return
     */
    public JSONObject createTips9() {
        if (datarows.size() > 0) {
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", "关注3个维度 针对性改进");
            tipsobject.put("图片解读", "关注3个维度，分别为：订单数、小区订单数、小区平均客单值");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", "针对您最为关注的维度，进行优化与改进；举例1：订单数不满意，针对性加强；举例2：小区订单数偏少，可以主攻；举例3：小区平均客单值偏低，可以提升");
        }
        return tipsobject;
    }

    /**
     * 事件订单占比分析
     *
     * @return
     */
    public JSONObject createTips10() {
        if (datarows.size() > 0) {
            tipsobject.put("关键词", "本月您累计开展" + datarows.size() + "个事件");
            tipsobject.put("策略参考", "本月您累计开展" + datarows.size() + "个事件，事件结束后，请您认真总结、认真分析，争取下次突破！");
        } else {
            tipsobject.put("关键词", "等客上门不行，请开展事件");
            tipsobject.put("策略参考", "您还没有做过事件，等客上门不行，请开展事件");
        }
        tipsobject.put("图片解读", "分析2个维度：有没有做事件以及统计事件数量");
        tipsobject.put("数据来源", "事件录入");
        tipsobject.put("数据排除", "无");
        return tipsobject;
    }

    /**
     * 月度杂项费用分析
     *
     * @return
     */
    public JSONObject createTips11() {
        ArrayList<Row> fcostnameList = new ArrayList<>();
        for (Row datarow : datarows) {
            if (!"进货额,水电,房租,薪资提成".contains(datarow.getString("fcostname"))) {
                fcostnameList.add(datarow);
            }
        }
        if (fcostnameList.size() >= 2) {
            String fcostname = fcostnameList.get(0).getString("fcostname");
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", "关注" + fcostname + "费用 合理控制");
            tipsobject.put("图片解读", "关注费用占比最高的1项");
            tipsobject.put("数据排除", "进货额、水电、房租、薪资，属于刚需与固定费用，不作为参考数据");
            tipsobject.put("策略参考", fcostname + "费用占比最大，提醒您是否需要进行控制，假如，属于正常范围内的费用，可以忽略");
        }
        return tipsobject;
    }

    /**
     * 月度盈亏分析
     *
     * @return
     */
    public JSONObject createTips12() {
        if (datarows.size() >= 2) {
            double famount1 = datarows.get(datarows.size() - 1).getDouble("famount");
            double famount2 = datarows.get(datarows.size() - 2).getDouble("famount");
            if (famount1 < 0) {
                tipsobject.put("关键词", "亏损，请赶紧止损");
                tipsobject.put("策略参考", "当下的客单值同比上月有所提升，继续努力");
            } else if (famount1 > famount2) {
                tipsobject.put("关键词", "盈利，同比上月增长");
                tipsobject.put("策略参考", "当下状态盈利，与上月对比有所增长，因此，继续保持，加油！");
            } else {
                tipsobject.put("关键词", "盈利，同比上月下滑");
                tipsobject.put("策略参考", "当下状态盈利，与上月对比有所下滑，因此，请您继续努力！");
            }
            tipsobject.put("数据来源", "费用录入");
            tipsobject.put("图片解读", "盈亏提醒，盈利情况下与上月进行对比");
            tipsobject.put("数据排除", "若亏损状态，则不与上月进行对比");
        }
        return tipsobject;
    }

    /**
     * 老客户信息表
     *
     * @return
     */
    public JSONObject createTips13() {
        if (datarows.size() > 0) {
            tipsobject.put("数据来源", "销售录入");
            tipsobject.put("关键词", "老客户一定常联系");
            tipsobject.put("图片解读", "所有客户有沉淀，常联系");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", "优秀的门店，60%以上的订单来自于老客户介绍，老客户是每个代理商的隐形业务员，多回访、多联系、保持一年开展至少1次的老客户服务");
        }
        return tipsobject;
    }

    /**
     * 意向客户信息表
     *
     * @return
     */
    public JSONObject createTips14() {
        if (datarows.size() > 0) {
            tipsobject.put("数据来源", "接待录入");
            tipsobject.put("关键词", "意向客户一定要跟紧");
            tipsobject.put("图片解读", "所有意向客户有沉淀、有记录、有接待次数等数据");
            tipsobject.put("数据排除", "无");
            tipsobject.put("策略参考", "跟紧意向客户，留意接待2~3次还未成交的客户，可通过事件的方式，让意向客户集中成交与爆破");
        }
        return tipsobject;
    }


    /**
     * 成交接待次数占比
     *
     * @return
     */
    public JSONObject createTips15() {
        if (datarows.size() > 0) {
            double fcount = datarows.sum("fcount");
            if (fcount > 0) {
                double freceptiontimes_first = datarows.sum("freceptiontimes_first");
                int average = new Double(Math.ceil(freceptiontimes_first / fcount)).intValue();
                tipsobject.put("数据来源", "老客户档案表");
                tipsobject.put("关键词", "平均接待" + average + "次成交，能否提升至" + (average - 1) + "次成交");
                tipsobject.put("图片解读", "老客户档案表中所有成交客户接待次数的平均值");
                tipsobject.put("数据排除", "无");
                tipsobject.put("策略参考", "当下您平均接待" + average + "次成交，能否提升至" + (average - 1) + "次成交，虽然有难度，相信通过您的成长，一定可以做到！");
            }
        }
        return tipsobject;
    }
}
