package com.zfire.jiasm.syncdata.service;

import com.zfire.jiasm.syncdata.plus.entity.*;
import com.zfire.jiasm.syncdata.response.Geographicallocation;
import com.zfire.jiasm.syncdata.response.WebsitFWS;
import com.zfire.jiasm.syncdata.response.WebsitSH;
import com.zfire.jiasm.syncdata.response.WorderInfo;
import com.zfire.jiasm.syncdata.utils.ResponseHelper;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface PublicService {
    // 创建工单师傅数据
    OrderWorker getOrderWorker(OrderBase orderBase);
    // 创建工单师傅数据
    OrderWorker getOrderWorkerApi(OrderBase orderBase);
    // 获取工单师傅数据
    List<OrderWorker> getWorker(String workerId,String orderBaseId);
    // 移除工单师傅数据
    void deleteWorker(String orderBaseId);
    // 提取品牌商对应的大类信息
    Map<String, List<SysDictRef>> getStringListMap(Brand brand);
    // 提取品牌商对应的小类信息
    Map<String, List<SysDictRef>> getListMap(Brand brand);
    // 提取品牌商对应的系列信息
    Map<String, List<SysDictRef>> getMap(Brand brand);
    // 提取品牌商对应的需求大类信息
    Map<String, List<SysDictRef>> getStringListMapXq(Brand brand);
    // 提取品牌商对应的需求小类信息
    Map<String, List<SysDictRef>> getListMapXq(Brand brand);
    // 提取品牌商对应的需求小类信息
    Map<String, List<SysDictRef>> getListMapXqtoPP(Brand brand);
    // 提取品牌商对应的需求类别信息
    Map<String, List<SysDict>> getStringListMapXqLb();
    // 获取平台服务网点热线电话
    String getSHWDPhone(String websitNo);
    // 单号，主键，同步任务生成时间，同步的表名，工单类型，任务类型
    OutJiasmToGreeUploadTaskList getUploadTaskListLog(String orderNo, String id, Date updateTime, String itemTableName, String itemOrderType, int i);
    // 单号，主键，同步任务生成时间，同步的表名，工单类型，任务类型
    OutJiasmToGreeUploadTaskList getUploadTaskList(String orderNo, String id, Date updateTime, String itemTableName, String itemOrderType, int i);
    // 单号，主键，同步任务生成时间，同步的表名，工单类型，任务类型
    OutJiasmToGreeUploadTaskList getUploadTaskList(String orderNo, String id, String itemTableName, String itemOrderType, int i);
    // 获取短信发送码
    String getfsma(String phone);
    Date stepMonth(Date sourceDate, int month);
    // 修改数据上传任务表同步状态
    void updateUploadTaskListStatus(String orderNo, Long synReqId,Integer synStatus,Integer uploadTaskType);

    void updateUploadTaskListInfo(Long synReqId,String msg);

    // 修改数据上传任务表同步状态
    void updateUploadTaskLisError(OutJiasmToGreeUploadTaskList ojtutl, String msg);


    // 商户销售网点对应平台销售网点 category为平台内的大类
    WebsitFWS shxswdToptxswd(String websitNo, OrderBase order);
    // 商户售后网点对应平台售后网点 category为平台内的大类
    WebsitFWS shshwdToptshwd(String websitNo, OrderBase order);

    // 获取商户网点信息(销售与售后网点信息)
    WebsitSH merchantWebsitInfoX(String websitNo,String type);

    // 平台销售网点对应商户销售网点
    WebsitSH  ptxswdToshxswd(String websitNo, String category);
    // 平台售后网点对应商户售后网点 参数为平台内的信息
    WebsitSH  ptshwdToshshwd(String websitNo, String mainId);

    // 向发送短信表添加数据 true写入成功，false写入失败
    Boolean addSmsRecord(ItfMessagehuifangentity addms,String orderType,int type);

    // 生成工单短信评价数据 同时向发短信表同步数据
    Boolean addItfMessagehuifangentity(ItfMessagehuifangentity add,String orderType,int type);
    // 向发送短信表添加数据的同步向短信记录表添加数据
    Boolean addFaOrderSms(OrderReAppointment rea);
    // 根据经纬度反查省市区街道信息
    Geographicallocation getRegionByAddress(String lng, String lat);
    // 根据地址反查经纬度
    String getLocationByAddress(String address);

    // 获取师傅在商户网点账号 平台师傅账号，商户网点编号，集团ID，平台网点ID
    Long getBrandWorkerId(String workerId,String brandWebsitId,String groupCompanyId, String websitId);

    // 获取师傅在商户网点账号
    String getBrandWorkerNo(String workerId,String brandWebsitId,String groupCompanyId, String websitId);

    // 获取师傅信息 平台师傅账号，商户网点编号，集团ID
    WorderInfo getWorkerInfo(String workerId,String brandWebsitId,String groupCompanyId);

    // 获取gpsaddress
    String getGpsaddress(String lng, String lat);

    // 商户网点编号
    Integer getCompanyId(String brandWebsitNumber);
    void getExpireTime(OrderBase orderBase, Date ssDate, Date jzDate);
    void getExpireTimeRepair(OrderBase orderBase, Date ssDate, Date jzDate);
    Boolean checkEvaluatemessage(String pjly);
    String checkAppraiseType(String pjly);
    String getErrormessage(ResponseHelper respone);


    // 商户售后网点对应平台售后网点 同步使用 只找对应关系
    List<WebsitOrderSign> SyncshshwdToptshwd();

    // 商户售后网点对应平台售后网点 找对应关系
    List<WebsitOrderSign> shShwdToptshwdByBrandWebsitNo(String wdno);

    SatisfactionList getAppraiseStatus(String pjly);

    // 获取安装工单对应的师傅信息
    Worker getInstallOrderWorker(Long azrenid);

    // 获取平台网点师傅信息
    WebsitWorker getOrderWebsitWorker(String workerId,String websitId);

    // 安装工单的省市区对应关系
    void installOrderSSQJ(OrderBase orderBase);

    // 商户售后网点对应平台售后网点 category为平台内的大类 中心用
    WebsitFWS shshwdToptshwdZX(String websitNo, OrderBase order);

    // 找中心网点数据 参数为格力售后中心网点编号
    Belongcompany getBelongCompany(String bcp);

    // 中心下沉到总包商户 格力中心网点编号，工单
    void getZXINFO(String websitNo, OrderBase order);

    // 中心下沉到总包服务商 格力中心网点编号，工单
    void getZXPTZBINFO(String websitNo, OrderBase order);

    // 校验工单信息是否需要回传 工单ID、表名、记录ID
    Boolean checkWebsitSyncFlag(String orderNo,String tableName,Long recordId);
    Boolean checkWebsitSyncFlagT(String orderNo,String tableName,String recordId);

    // 获取平台网点师傅信息 平台师傅ID，平台网点编号
    List<WebsitWorker> getWebsitWorkerByWorkerAndWebsit();

    // 获取平台商用保险合同 保险类型
    Insure getWebsitWorkerByWorkerAndWebsit(String type);

    void creatMkdir();
    Date subOneYear(Date dt);
    String path(String f);
    String pathToGree(String f);
    String uploadPath(String f);
    File createf(String name) throws IOException;
    // 修改附件序 outid
    void upOrderDetailFileOutId(String orderBaseId);
    // 网点信息还原，
    void revertFun(OrderBase order,ItfTblAzAssignLcLsDownload lcls);
    void revertRepairFun(OrderBase order,ItfTblAssignDownload lcls);
    String getUUID();

    Date getYearFirstDay(Date date) throws ParseException;
    Date getYearLastDay(Date date) throws ParseException;
    void setWorkerCertGreeId(WorkerCertGree awc, Map<String,String> wcgids);
    void setCertFlag(String certName, WorkerCertGree awc);
    void setUserLevel(OrderBase order);
    void getProductId(Map<String,String> productMap);

    void upSmsRecordSendTime(String synTaskNo,String phone,Date date);

    Boolean getCppjly(String pjly);
    String getAppraiseStatusT(String pjly);
    String getSpmessage(OrderBase orderBase, String spmessage);
}
