package psdi.app.iface.mobile;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dbms.dbcon.DBCon;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.security.ConnectionKey;
import psdi.server.MXServer;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 点检保养
 * 任务下载，任务上传等相关接口
 * createBy liuxq  2023-5-26
 */
@Path("/appapp")
public class UDSpotDownUpLoadService {

    /**
     * App清除已经下载的离线任务
     * 后台将该单子的状态变成未下载（null）状态
     */
    @POST
    @Path("/clearMemory")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject clearMemory(JSONObject jsonObject) throws Exception {
        JSONObject jsobj = new JSONObject();
        try {
            ConnectionKey connectionKey = MXServer.getMXServer().getSystemUserInfo().getConnectionKey();
            Integer SPOTRUNID = jsonObject.getInteger("SPOTRUNID");//主表ID
            if(SPOTRUNID!=null){
                String updateSql = "update SPOTRUN set equpmntdesc=null where SPOTRUNId="+SPOTRUNID+"";
                Boolean flag = DBCon.runUpdate(updateSql,connectionKey);
                if(flag){
                    jsobj.put("errcode", "200");
                    jsobj.put("errmsg", "clear success");
                }else{
                    jsobj.put("errcode", "400");
                    jsobj.put("errmsg", "clear failure by sql");
                }
            }else{
                jsobj.put("errcode", "300");
                jsobj.put("errmsg", "No data clear");
            }
        }catch (Exception ee){
            jsobj.put("errcode", "500");
            jsobj.put("errmsg", "upload failure,"+ee.getMessage());
            throw ee;
        }finally {
            return jsobj;
        }

    }


    /**
     * 在线任务-查收
     * @param jsonObject
     * @return
     */
    @POST
    @Path("/taskOnline")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONArray taskOnline(JSONObject jsonObject) {
        JSONArray returndata = new JSONArray();
        JSONArray alldataArr = new JSONArray();
        JSONObject jsobj = new JSONObject();
        StringBuffer sbf = new StringBuffer();
        try {
            ConnectionKey connectionKey = MXServer.getMXServer().getSystemUserInfo().getConnectionKey();
//            ArrayList dataAll = DBCon.DBSelect(sql,connectionKey);//查询数据库
            System.out.println("-------------online-taskDownload--------------");
            //根据今天日期和登录人员获取当天任务---后面用 ”人员“和当前日期 作为查询条件
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String CurrentDate1 = sdf.format(new Date()); //当前的登录日期
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.HOUR,-8);//减去8小时
            Date date = cal.getTime();
            String CurrentDate = sdf.format(date);//当前的登录日期-8小时

            String userid = jsonObject.getString("USERID");//APP传过来的当前用户工号
            String LANGCODE = jsonObject.getString("LANGCODE");//登录环境

            if(null==LANGCODE || "".equalsIgnoreCase(LANGCODE) || " ".equalsIgnoreCase(LANGCODE)){
                LANGCODE="ZH";
            }

            if("ZH".equalsIgnoreCase(LANGCODE)){
                String TaskSql="SELECT " +
                        "  s.SPOTRUNID as SPOTRUNID, " +
                        "  s.SPOTRUNNUM as SPOTRUNNUM," +
                        "  ss.DESCRIPTION as DESCRIPTION," +
                        "  s.POINTROUTE as POINTROUTE," +
                        "  rr.DESCRIPTION as ROUTE," +
                        "  s.CREATEDATE as CREATEDATE," +
                        "  s.EQUPMNTDESC as EQUPMNTDESC, "+
                        "  s.orgid as ORGID," +
                        "  s.siteid as SITEID," +
                        "  s.POINTTOOLS as EXEUSERID,"+
                        "  p1.displayname as EXEUSERIDDESC,"+
                       // "  DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH) as zxz," +
                        "  u.UDZXZGH as UDZXZGH," +
                       // "  z.UDZXZGH as UDZXZGH," +
                        "  t.RESPPARTYGROUP " +
                        " FROM " +
                        " SPOTRUNLINES a " +
                        " LEFT JOIN SPOTRUN s ON s.SPOTRUNNUM = a.SPOTRUNNUM AND s.orgid = a.orgid AND s.siteid = a.siteid" +
                        " left join L_SPOTRUN ss on s.SPOTRUNID=ss.ownerid and ss.langcode='ZH' "+
                        " left join ROUTES r on r.ROUTE=s.POINTROUTE and r.orgid=s.orgid and r.siteid=s.siteid" +
                        " left join L_ROUTES rr on r.ROUTESID=rr.ownerid and rr.langcode='ZH' "+
                        " left join ASSET b on a.assetnum=b.assetnum and a.orgid=b.orgid and a.siteid=b.siteid" +
                        " left join UDCJZ u on b.assetnum=u.assetid and b.orgid=u.orgid and b.siteid=u.siteid and u.TYPE=a.SDYRZY " +
                        //" left join UDZXZ z on b.assetnum=z.assetid and b.orgid=z.orgid and b.siteid=z.siteid" +
                        //" left join PERSONGROUP p on p.PERSONGROUP=DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH)" +
                        " left join PERSONGROUP p on p.PERSONGROUP=u.UDZXZGH " +
                        " left join PERSONGROUPTEAM t on p.PERSONGROUP=t.PERSONGROUP " +
                        " left join person p1 on s.POINTTOOLS=p1.personid "+
                        " where TO_char(s.CREATEDATE,'yyyy-MM-dd')= '"+CurrentDate+"' and t.RESPPARTYGROUP='"+userid+"' ";
//                " where TO_char(s.CREATEDATE,'yyyy-MM-dd')= '"+CurrentDate+"' and t.RESPPARTYGROUP='"+userid+"' and (s.EQUPMNTDESC='Appr' or s.EQUPMNTDESC is NULL)";
                sbf.append(TaskSql);
            }else if("EN".equalsIgnoreCase(LANGCODE)){//英文环境----默认表都是英文环境----英文查：不加L_的表
                String TaskSql="SELECT " +
                        "  s.SPOTRUNID as SPOTRUNID, " +
                        "  s.SPOTRUNNUM as SPOTRUNNUM," +
                        "  s.DESCRIPTION as DESCRIPTION," +
                        "  s.POINTROUTE as POINTROUTE," +
                        "  s.DESCRIPTION as ROUTE," +
                        "  s.CREATEDATE as CREATEDATE," +
                        "  s.EQUPMNTDESC as EQUPMNTDESC, "+
                        "  s.orgid as ORGID," +
                        "  s.siteid as SITEID," +
                        "  s.POINTTOOLS as EXEUSERID,"+
                        "  p1.displayname as EXEUSERIDDESC,"+
                    //    "  DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH) as zxz," +
                        "  u.UDZXZGH as UDZXZGH," +
                     //   "  z.UDZXZGH as UDZXZGH," +
                        "  t.RESPPARTYGROUP " +
                        " FROM " +
                        " SPOTRUNLINES a " +
                        " LEFT JOIN SPOTRUN s ON s.SPOTRUNNUM = a.SPOTRUNNUM AND s.orgid = a.orgid AND s.siteid = a.siteid" +
                        " left join ROUTES r on r.ROUTE=s.POINTROUTE and r.orgid=s.orgid and r.siteid=s.siteid" +
                        " left join ASSET b on a.assetnum=b.assetnum and a.orgid=b.orgid and a.siteid=b.siteid" +
                        " left join UDCJZ u on b.assetnum=u.assetid and b.orgid=u.orgid and b.siteid=u.siteid and u.TYPE=a.SDYRZY" +
                       // " left join UDZXZ z on b.assetnum=z.assetid and b.orgid=z.orgid and b.siteid=z.siteid" +
                       // " left join PERSONGROUP p on p.PERSONGROUP=DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH)" +
                        " left join PERSONGROUP p on p.PERSONGROUP=u.UDZXZGH " +
                        " left join PERSONGROUPTEAM t on p.PERSONGROUP=t.PERSONGROUP " +
                        " left join person p1 on s.POINTTOOLS=p1.personid "+
                        " where TO_char(s.CREATEDATE,'yyyy-MM-dd')= '"+CurrentDate+"' and t.RESPPARTYGROUP='"+userid+"' ";
//                " where TO_char(s.CREATEDATE,'yyyy-MM-dd')= '"+CurrentDate+"' and t.RESPPARTYGROUP='"+userid+"' and (s.EQUPMNTDESC='Appr' or s.EQUPMNTDESC is NULL)";
                sbf.append(TaskSql);
            }else if("FR".equalsIgnoreCase(LANGCODE)) {//法文环境

            }
            List<Map<String, Object>> Tasklist = DBCon.DBSelect(sbf.toString(),connectionKey);//查询
            List<String> mainList = new ArrayList<String>();
            if(Tasklist!=null && Tasklist.size()>0){
                for(int i=0;i<Tasklist.size();i++) {
                    JSONObject mainJson = new JSONObject();//主对象json
                    Map map = Tasklist.get(i);//每条对象
                    String SPOTRUNID = String.valueOf(map.get("SPOTRUNID"));//主表id
                    if(!mainList.contains(SPOTRUNID)){
                        //主表对象-点检保养任务
                        mainList.add(SPOTRUNID);
                        mainJson.put("SPOTRUNID",map.get("SPOTRUNID"));//主表id
                        mainJson.put("SPOTRUNNUM",map.get("SPOTRUNNUM"));//--任务单号
                        mainJson.put("DESCRIPTION",map.get("DESCRIPTION"));//任务描述
                        mainJson.put("POINTROUTE",map.get("POINTROUTE"));//路线编号
                        mainJson.put("ROUTE",map.get("ROUTE"));//路线描述
                        mainJson.put("EQUPMNTDESC",map.get("EQUPMNTDESC"));//路线描述
                        mainJson.put("CREATEDATE",map.get("CREATEDATE"));//生成日期
                        mainJson.put("EXEUSERID",map.get("EXEUSERID"));//任务下载工号
                        mainJson.put("EXEUSERIDDESC",map.get("EXEUSERIDDESC"));//任务下载人员
                        alldataArr.add(mainJson);
                    }
                }
                //-日志记录表------------------------------------------------------
                String strNum = alldataArr.getJSONObject(0).getString("SPOTRUNNUM");
                String strDesc = alldataArr.getJSONObject(0).getString("DESCRIPTION");
                String ROUTEStr = alldataArr.getJSONObject(0).getString("ROUTE");
                MboSetRemote appparamlogSet = MXServer.getMXServer().getMboSet("APPPARAMLOG",MXServer.getMXServer().getSystemUserInfo());
             /*   if(null!=appparamlogSet){
                    MboRemote appLogMbo=appparamlogSet.addAtEnd(2L);
                    appLogMbo.setValue("DESCRIPTION", "taskOnline/"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), 2L);
                    appLogMbo.setValue("USERID", userid, 2L);
                    appLogMbo.setValue("CURRENTDATE", CurrentDate, 2L);
                    appLogMbo.setValue("LANGCODE", LANGCODE, 2L);
                    appLogMbo.setValue("PCRETRUN", strNum+strDesc+ROUTEStr, 2L);
                    appLogMbo.getThisMboSet().save();
                    appLogMbo.getThisMboSet().close();
                }*/
                //-------------------------------------------------------
            }
            sbf.setLength(0);//清空stringbuffer
            Tasklist.clear();//清空List
        }catch (Exception e){
            System.out.println("-------->Exception Message="+e.getMessage());
            jsobj.put("errcode", "500");
            jsobj.put("errmsg", "downLoad failure");
            alldataArr.add(jsobj);
        }finally {
            return alldataArr;
        }
    }

    /**
     * 点检保养任务下载
     * @return
     */
    @POST
    @Path("/taskDownload")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONArray taskDownload(JSONObject jsonObject) {
        JSONArray alldataArr = new JSONArray();
        JSONObject jsobj = new JSONObject();
        StringBuffer sbf = new StringBuffer();
        try {
            ConnectionKey connectionKey = MXServer.getMXServer().getSystemUserInfo().getConnectionKey();
//            ArrayList dataAll = DBCon.DBSelect(sql,connectionKey);//查询数据库
            //根据今天日期和登录人员获取当天任务---后面用 ”人员“和当前日期 作为查询条件
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String CurrentDate = sdf.format(new Date()); //当前的登录日期
            String userid = jsonObject.getString("USERID");//APP传过来的当前用户工号
            JSONArray dataArr = jsonObject.getJSONArray("SPOTRUNIDLIST");
            String LANGCODE = jsonObject.getString("LANGCODE");//登录环境
            String strID = "";
            if(dataArr!=null && !dataArr.isEmpty()){
                for(int i=0;i<dataArr.size();i++){
                    strID +=dataArr.get(i) + ",";
                }
                strID = strID.trim();
                strID = strID.substring(0,strID.length()-1);
            } else {
                jsobj.put("errcode", "100");
                jsobj.put("errmsg", "No data downLoad");
                alldataArr.add(jsobj);
                return alldataArr;
            }

            if(null==LANGCODE || "".equalsIgnoreCase(LANGCODE) || " ".equalsIgnoreCase(LANGCODE)){
                LANGCODE="ZH";
            }

            if("ZH".equalsIgnoreCase(LANGCODE)){//中文环境
                String TaskSql = "SELECT" +
                        "  s.SPOTRUNID as SPOTRUNID," + //--主表id
                        "  s.SPOTRUNNUM as SPOTRUNNUM," + //--任务单号
                        "  ss.DESCRIPTION as DESCRIPTION," + //--任务描述
                        "  s.POINTROUTE as POINTROUTE," + //--路线编号
                        "  rr.DESCRIPTION as ROUTE," + //--路线描述
                        "  s.CREATEDATE as CREATEDATE," + //--生成日期
                        "  s.orgid as ORGID," + //--组织
                        "  s.siteid as SITEID," + //--地点
                        "  a.SPOTRUNLINESID as SPOTRUNLINESID,"+ //--子表id
                        "  a.SPOTRUNLINENUM as SPOTRUNLINENUM," + //--点检行号
                        "  a.STOPSEQUENCE as STOPSEQUENCE,"+ //--排序
                        "  aa.DESCRIPTION as LINEDESCRIPTION," + //--点检任务描述
                        "  a.PROJECTNUM as PROJECTNUM," + //--点检标准行号
                        "  a.PMPOINTNUM as PMPOINTNUM," + //--点检标准编号
                        "  aa.POSITION as POSITION," + //--部位
                        "  a.POINTDATUM as POINTDATUM," + //--判断基准
                        "  aa.POINTMETHOD as POINTMETHOD," + //--点检方法
                        "  a.SDYRZY as SDYRZY," + //--执行组 车间组WorkGroup 维修组MainGroup
                    //    "  DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH) as ZXZ," + //if判断语句如果是WorkGroup（车间组），就查询车间组表，否则查询维修组表
                        "  u.UDZXZGH as UDCJZGH," + //--执行组
                    //    "  z.UDZXZGH as UDZXZGH," + //--维修组
                        "  a.ASSETNUM as ASSETNUM," + //--设备编号
                        "  bb.description as ASSETDESC," + //--设备名称
                        "  b.MEMORYCODE as MEMORYCODE," + //--助记码
                        "  a.EXCEPTIONSTATUS as EXCEPTIONSTATUS," + //--点检状态 正常UNEXC 异常ISEXC
                        "  a.FWAY as FWAY, " + //--点检方式----新增
                        "  a.SCANRESULT as SCANRESULT, " + //--扫码结果----新增
                        "  a.UPPERACTION as UPPERACTION, " + //--操作上限----新增
                        "  a.LOWERACTION as LOWERACTION, " + //--操作下限----新增
                        "  a.VALUENUMBER as VALUENUMBER," + //--数值记录
                        "  a.RECORDDESC as RECORDDESC, " + //--点检说明
                        "  t.RESPPARTYGROUP as RESPPARTYGROUP" + //--当前执行人
                        " FROM " +
                        " SPOTRUNLINES a " +
                        " left join L_SPOTRUNLINES aa on a.SPOTRUNLINESID=aa.OWNERID and aa.LANGCODE='ZH' "+
                        " LEFT JOIN SPOTRUN s ON s.SPOTRUNNUM = a.SPOTRUNNUM AND s.orgid = a.orgid AND s.siteid = a.siteid " +
                        " left join L_SPOTRUN ss on s.SPOTRUNID=ss.ownerid and ss.langcode='ZH' "+
                        " left join ROUTES r on r.ROUTE=s.POINTROUTE and r.orgid=s.orgid and r.siteid=s.siteid" +
                        " left join L_ROUTES rr on r.ROUTESID=rr.ownerid and rr.langcode='ZH' "+
                        " left join ASSET b on a.assetnum=b.assetnum and a.orgid=b.orgid and a.siteid=b.siteid " +
                        " left join L_ASSET bb on b.ASSETUID=bb.ownerid and bb.langcode='ZH' "+ //--设备ASSET的多语言表
                        " left join UDCJZ u on b.assetnum=u.assetid and b.orgid=u.orgid and b.siteid=u.siteid and u.TYPE=a.SDYRZY " +
                    //    " left join UDZXZ z on b.assetnum=z.assetid and b.orgid=z.orgid and b.siteid=z.siteid" +
                        " left join PERSONGROUP p on p.PERSONGROUP=u.UDZXZGH " +
                    //    " left join PERSONGROUP p on p.PERSONGROUP=DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH)" +
                        " left join PERSONGROUPTEAM t on p.PERSONGROUP=t.PERSONGROUP" +
                        " where s.spotrunid in ("+strID+") and t.RESPPARTYGROUP='"+userid+"'";
                sbf.append(TaskSql);
            }else if("EN".equalsIgnoreCase(LANGCODE)){//英文环境----默认表都是英文环境
                String TaskSql = "SELECT" +
                        "  s.SPOTRUNID as SPOTRUNID," + //--主表id
                        "  s.SPOTRUNNUM as SPOTRUNNUM," + //--任务单号
                        "  s.DESCRIPTION as DESCRIPTION," + //--任务描述
                        "  s.POINTROUTE as POINTROUTE," + //--路线编号
                        "  s.DESCRIPTION as ROUTE," + //--路线描述
                        "  s.CREATEDATE as CREATEDATE," + //--生成日期
                        "  s.orgid as ORGID," + //组织
                        "  s.siteid as SITEID," + //地点
                        "  a.SPOTRUNLINESID as SPOTRUNLINESID,"+ //子表id
                        "  a.SPOTRUNLINENUM as SPOTRUNLINENUM," + //--点检行号
                        "  a.STOPSEQUENCE as STOPSEQUENCE,"+ //排序
                        "  a.DESCRIPTION as LINEDESCRIPTION," + //--点检任务描述
                        "  a.PROJECTNUM as PROJECTNUM," + //--点检标准行号
                        "  a.PMPOINTNUM as PMPOINTNUM," + //--点检标准编号
                        "  a.POSITION as POSITION," + //--部位
                        "  a.POINTDATUM as POINTDATUM," + //--判断基准
                        "  a.POINTMETHOD as POINTMETHOD," + //--点检方法
                        "  a.SDYRZY as SDYRZY," + //--执行组 车间组WorkGroup 维修组MainGroup
                     //   "  DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH) as ZXZ," + //if判断语句如果是WorkGroup（车间组），就查询车间组表，否则查询维修组表
                        "  u.UDZXZGH as UDCJZGH," + //--车间组
                       // "  z.UDZXZGH as UDZXZGH," + //--维修组
                        "  a.ASSETNUM as ASSETNUM," + //--设备编号
                        "  b.description as ASSETDESC," + //--设备名称
                        "  b.MEMORYCODE as MEMORYCODE," + //--助记码
                        "  a.EXCEPTIONSTATUS as EXCEPTIONSTATUS," + //--点检状态 正常UNEXC 异常ISEXC
                        "  a.FWAY as FWAY, " + //点检方式----新增
                        "  a.SCANRESULT as SCANRESULT, " + //扫码结果----新增
                        "  a.UPPERACTION as UPPERACTION, " + //操作上限----新增
                        "  a.LOWERACTION as LOWERACTION, " + //操作下限----新增
                        "  a.VALUENUMBER as VALUENUMBER," + //--数值记录
                        "  a.RECORDDESC as RECORDDESC, " + //--点检说明
                        "  t.RESPPARTYGROUP as RESPPARTYGROUP" + //--当前执行人
                        " FROM " +
                        " SPOTRUNLINES a " +
                        " LEFT JOIN SPOTRUN s ON s.SPOTRUNNUM = a.SPOTRUNNUM AND s.orgid = a.orgid AND s.siteid = a.siteid " +
                        " left join ROUTES r on r.ROUTE=s.POINTROUTE and r.orgid=s.orgid and r.siteid=s.siteid" +
                        " left join ASSET b on a.assetnum=b.assetnum and a.orgid=b.orgid and a.siteid=b.siteid " +
                        " left join UDCJZ u on b.assetnum=u.assetid and b.orgid=u.orgid and b.siteid=u.siteid and u.TYPE=a.SDYRZY " +
                     //   " left join UDZXZ z on b.assetnum=z.assetid and b.orgid=z.orgid and b.siteid=z.siteid" +
                        " left join PERSONGROUP p on p.PERSONGROUP=u.UDZXZGH " +
                      //  " left join PERSONGROUP p on p.PERSONGROUP=DECODE(a.SDYRZY,'WorkGroup',u.UDZXZGH,z.UDZXZGH)" +
                        " left join PERSONGROUPTEAM t on p.PERSONGROUP=t.PERSONGROUP" +
                        " where s.spotrunid in ("+strID+") and t.RESPPARTYGROUP='"+userid+"'";
                sbf.append(TaskSql);
            }else if("FR".equalsIgnoreCase(LANGCODE)){//法文环境

            }

            List<Map<String, Object>> Tasklist = DBCon.DBSelect(sbf.toString(),connectionKey);
            if(Tasklist!=null && Tasklist.size()>0){
                //主对象的循环
                List<String> mainList = new ArrayList<String>();
                for(int i=0;i<Tasklist.size();i++){
                    Map map = Tasklist.get(i);
                    if(map!=null && map.size()>0){
                        String SPOTRUNID = String.valueOf(map.get("SPOTRUNID"));//主表id
                        if(!mainList.contains(SPOTRUNID)){
                            //主表对象-点检保养任务
                            mainList.add(SPOTRUNID);
                           /* //下载任务时候，需要将状态变为Appr,POINTTOOLS用来存放当前任务的下载人工号
                            String updateSql = "update SPOTRUN set EQUPMNTDESC='Appr',POINTTOOLS='"+userid+"' where SPOTRUNID='"+SPOTRUNID+"' ";
                            DBCon.runUpdate(updateSql,connectionKey);*/
                        }
                    }
                }

                if(mainList!=null && mainList.size()>0){
                    for(int i=0;i<mainList.size();i++){
                        String SPOTRUNID = (String) mainList.get(i);
                        JSONObject mainJson = new JSONObject();//主对象json
                        JSONArray linedataArr = new JSONArray();//子对象json数组
                        String tasklineSQL = sbf.toString() + " and s.SPOTRUNID='"+SPOTRUNID+"' order by a.STOPSEQUENCE asc";
                        List<Map<String, Object>> tasklinelist = DBCon.DBSelect(tasklineSQL,connectionKey);
                        if(tasklinelist!=null && tasklinelist.size()>0 && tasklinelist.get(0)!=null && !tasklinelist.get(0).isEmpty()){
                            mainJson.put("SPOTRUNID",tasklinelist.get(0).get("SPOTRUNID"));//主表id
                            mainJson.put("SPOTRUNNUM",tasklinelist.get(0).get("SPOTRUNNUM"));//--任务单号
                            mainJson.put("DESCRIPTION",tasklinelist.get(0).get("DESCRIPTION"));//任务描述
                            mainJson.put("POINTROUTE",tasklinelist.get(0).get("POINTROUTE"));//路线编号
                            mainJson.put("ROUTE",tasklinelist.get(0).get("ROUTE"));//路线描述
                            mainJson.put("CREATEDATE",tasklinelist.get(0).get("CREATEDATE"));//生成日期
                            for(int j=0;j<tasklinelist.size();j++){
                                Map map = tasklinelist.get(j);
                                JSONObject lineJson = new JSONObject();//子对象json
                                String SPOTRUNNUM = (String) map.get("SPOTRUNNUM");//--任务单号
                                String ORGID = (String) map.get("ORGID");//组织
                                String SITEID = (String) map.get("SITEID");//地点
                                String SPOTRUNLINESID = String.valueOf(map.get("SPOTRUNLINESID"));//子表id
                                String SPOTRUNLINENUM = (String)(map.get("SPOTRUNLINENUM")==null?"":map.get("SPOTRUNLINENUM"));//点检行号
                                String LINEDESCRIPTION = (String)(map.get("LINEDESCRIPTION")==null?"":map.get("LINEDESCRIPTION"));//点检任务描述
                                String PROJECTNUM = (String)(map.get("PROJECTNUM")==null?"":map.get("PROJECTNUM"));//点检标准行号
                                String PMPOINTNUM = (String)(map.get("PMPOINTNUM")==null?"":map.get("PMPOINTNUM"));//点检标准编号
                                String POSITION = (String)(map.get("POSITION")==null?"":map.get("POSITION"));//部位
                                String POINTDATUM = (String)(map.get("POINTDATUM")==null?"":map.get("POINTDATUM"));//判断基准
                                String POINTMETHOD = (String)(map.get("POINTMETHOD")==null?"":map.get("POINTMETHOD"));//点检方法
                                String ASSETNUM = (String)(map.get("ASSETNUM")==null?"":map.get("ASSETNUM"));//设备编号
                                String ASSETDESC = (String)(map.get("ASSETDESC")==null?"":map.get("ASSETDESC"));//设备名称
                                String MEMORYCODE = (String)(map.get("MEMORYCODE")==null?"":map.get("MEMORYCODE"));//助记码
                                String EXCEPTIONSTATUS = (String)(map.get("EXCEPTIONSTATUS")==null?"":map.get("EXCEPTIONSTATUS"));//点检状态 正常UNEXC 异常ISEXC
                                String FWAY = (String)(map.get("FWAY")==null?"":map.get("FWAY"));//点检方式
                                String UPPERACTION = String.valueOf((map.get("UPPERACTION")==null?"":map.get("UPPERACTION")));//上限
                                String LOWERACTION = String.valueOf(map.get("LOWERACTION")==null?"":map.get("LOWERACTION"));//下限
                                lineJson.put("SPOTRUNID",SPOTRUNID);//主表id
                                lineJson.put("SPOTRUNLINESID",SPOTRUNLINESID);//子表id
                                lineJson.put("SPOTRUNNUM",SPOTRUNNUM);//--任务单号
                                lineJson.put("ORGID",ORGID);//组织
                                lineJson.put("SITEID",SITEID);//地点
                                lineJson.put("SPOTRUNLINENUM",SPOTRUNLINENUM);//点检行号
                                lineJson.put("LINEDESCRIPTION",LINEDESCRIPTION);//点检任务描述
                                lineJson.put("POSITION",POSITION);//部位
                                lineJson.put("POINTDATUM",POINTDATUM);//判断基准
                                lineJson.put("POINTMETHOD",POINTMETHOD);//点检方法
                                lineJson.put("ASSETNUM",ASSETNUM);//设备编号
                                lineJson.put("ASSETDESC",ASSETDESC);//设备名称
                                lineJson.put("MEMORYCODE",MEMORYCODE);//助记码
                                lineJson.put("EXCEPTIONSTATUS",EXCEPTIONSTATUS);//点检状态
                                lineJson.put("FWAY",FWAY);//点检方式
                                lineJson.put("UPPERACTION",UPPERACTION);//上限
                                lineJson.put("LOWERACTION",LOWERACTION);//下限
                                linedataArr.add(lineJson);
                            }
                            if(linedataArr.isEmpty()){
                                jsobj.put("errcode", "550");
                                jsobj.put("errmsg", "downLoad failure by Network is not connection");
                                alldataArr.add(jsobj);
                                return alldataArr;
                            }else{
                                mainJson.put("taskline",linedataArr);
                                //下载任务时候，需要将状态变为Appr,POINTTOOLS用来存放当前任务的下载人工号
                                String updateSql = "update SPOTRUN set EQUPMNTDESC='Appr',POINTTOOLS='"+userid+"' where SPOTRUNID='"+SPOTRUNID+"' ";
                                DBCon.runUpdate(updateSql,connectionKey);
                            }
                        }
                        alldataArr.add(mainJson);
                    }
                    //---日志记录-------------------------------
         /*           String strNum = alldataArr.getJSONObject(0).getString("SPOTRUNNUM");
                    String strDesc = alldataArr.getJSONObject(0).getString("DESCRIPTION");
                    String LINEDESCRIPTIONStr =  alldataArr.getJSONObject(0).getJSONArray("taskline").getJSONObject(0).getString("LINEDESCRIPTION");
                    MboSetRemote appparamlogSet = MXServer.getMXServer().getMboSet("APPPARAMLOG",MXServer.getMXServer().getSystemUserInfo());
                    if(null!=appparamlogSet){
                        MboRemote appLogMbo=appparamlogSet.addAtEnd(2L);
                        appLogMbo.setValue("DESCRIPTION", "taskDownload/"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), 2L);
                        appLogMbo.setValue("USERID", userid, 2L);
                        appLogMbo.setValue("CURRENTDATE", CurrentDate, 2L);
                        appLogMbo.setValue("LANGCODE", LANGCODE, 2L);
                        appLogMbo.setValue("PCRETRUN", strNum+strDesc+LINEDESCRIPTIONStr, 2L);
                        appLogMbo.getThisMboSet().save();
                        appLogMbo.getThisMboSet().close();
                    }*/

                    //---------------------------------
                }
                sbf.setLength(0);
                Tasklist.clear();
            }else {
                jsobj.put("errcode", "100");
                jsobj.put("errmsg", "No data downLoad");
                alldataArr.add(jsobj);
            }
        }catch (Exception ee){
            jsobj.put("errcode", "500");
            jsobj.put("errmsg", "downLoad failure");
            alldataArr.add(jsobj);
            System.out.println("------------->Failure Message = "+ ee.getMessage());
        }finally {
            return alldataArr;
        }
    }

    /**
     * 点检保养任务上传
     * @return
     */
    @POST
    @Path("/taskUpload")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject taskupLoad(JSONArray jsonArray) throws Exception {
        JSONObject jsobj = new JSONObject();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        try {
            Calendar cal = Calendar.getInstance();
            ConnectionKey connectionKey = MXServer.getMXServer().getSystemUserInfo().getConnectionKey();
//            ArrayList dataAll = DBCon.DBSelect(sql,connectionKey);
            if(jsonArray!=null && jsonArray.size()>0){
                for(int i=0;i<jsonArray.size();i++){
                    JSONObject obj = jsonArray.getJSONObject(i);
                    String SPOTRUNID = (String) obj.get("SPOTRUNID");//主表字
                    String SPOTRUNNUM = (String) obj.get("SPOTRUNNUM");//主表字段-关联字段
                    String SPOTRUNLINESID = (String) obj.get("SPOTRUNLINESID");//子表iD
                    String ORGID = (String) obj.get("ORGID");//组织
                    String SITEID = (String) obj.get("SITEID");//地点
                    String USERID = (String) (obj.get("USERID")==null?"":obj.get("USERID"));//实际执行人--登录人
                    String EXCEPTIONSTATUS = (String) (obj.get("EXCEPTIONSTATUS")==null?"":obj.get("EXCEPTIONSTATUS"));//子表-是否异常
                    String VALUENUMBER = (String) (obj.get("VALUENUMBER")==null?"":obj.get("VALUENUMBER"));//子表-数值记录
                    String RECORDDESC = (String) (obj.get("RECORDDESC")==null?"":obj.get("RECORDDESC"));//子表-记录说明
                    String SCANRESULT = (String) (obj.get("SCANRESULT")==null?"":obj.get("SCANRESULT"));//子表-扫码记录
                    String ACTDATE = (String) (obj.get("ACTDATE")==null?"":obj.get("ACTDATE"));//实际执行时间
                    String updateSql = "update SPOTRUNLINES set PERACTUAL='"+USERID+"',ACTDATE = TO_DATE('"+ACTDATE+"','yyyy-MM-dd hh24:mi:ss'), EXCEPTIONSTATUS='"+EXCEPTIONSTATUS+"',VALUENUMBER='"+VALUENUMBER+"',RECORDDESC='"+RECORDDESC+"',SCANRESULT='"+SCANRESULT+"' where SPOTRUNLINESID='"+SPOTRUNLINESID+"'";
                    DBCon.runUpdate(updateSql,connectionKey);
                    String updaSql = "update SPOTRUN set EQUPMNTDESC='COMP' where SPOTRUNID='"+SPOTRUNID+"'";
                    DBCon.runUpdate(updaSql,connectionKey);
                   /* String updaSql = "";
                    if(flag){
                        updaSql = "update SPOTRUN set EQUPMNTDESC='COMP' where SPOTRUNID='"+SPOTRUNID+"'";
                    }else{
                        updaSql = "update SPOTRUN set EQUPMNTDESC='Appr' where SPOTRUNID='"+SPOTRUNID+"'";
                    }
                    DBCon.runUpdate(updaSql,connectionKey);*/
                }
            }else{
                jsobj.put("errcode", "300");
                jsobj.put("errmsg", "No data uploaded");
            }
        }catch (Exception ee){
            jsobj.put("errcode", "500");
            jsobj.put("errmsg", "upload failure,"+ee.getMessage());
            throw ee;
        }finally {
            jsobj.put("errcode", "200");
            jsobj.put("errmsg", "upload success");
        }
        return jsobj;
    }
}
