package psdi.app.iface.mobile;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXException;

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.nio.charset.StandardCharsets;
import java.rmi.RemoteException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 安全点检任务
 * createBy liuxq
 * 2024-7-11
 */
@Path("/aqdj")
public class AqDjRwAppService {
    /**
     * @param localTime 非洲当地时间
     * @param SITEID  地点
     * 非洲当地时间转为北京时间
     */
    public static String AfricaconvertToBeijingTime(String localTime,String SITEID) {
        ZoneId ghanaZone = null;
        ZoneId beijingZone = null;
        if("GF03".equalsIgnoreCase(SITEID) || "GF51".equalsIgnoreCase(SITEID) || "GF02".equalsIgnoreCase(SITEID) || "GF08".equalsIgnoreCase(SITEID) || "GH01".equalsIgnoreCase(SITEID)){
            //加纳陶瓷，加纳纸尿裤，加纳五金，加纳洁具、加纳贸易 同一个时区
            ghanaZone = ZoneId.of("Africa/Accra");
            beijingZone = ZoneId.of("Asia/Shanghai");
        }else if("CM61".equalsIgnoreCase(SITEID)){
            //喀麦隆（CM61）
            ghanaZone = ZoneId.of("Africa/Douala");
            beijingZone = ZoneId.of("Asia/Shanghai");
        }else {
            //肯尼亚陶瓷（KF61），肯尼亚纸尿裤(KF51)，坦桑洗衣粉(TF01)，坦桑纸尿裤(TF51),坦桑贸易(TZ01) 同一个时区
            ghanaZone = ZoneId.of("Africa/Nairobi");
            beijingZone = ZoneId.of("Asia/Shanghai");
        }
        // 定义时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 解析国外当地时间字符串为 ZonedDateTime 对象
        ZonedDateTime ghanaZonedDateTime = ZonedDateTime.parse(localTime, formatter.withZone(ghanaZone));
        // 将国外时间转换为北京时间
        ZonedDateTime beijingZonedDateTime = ghanaZonedDateTime.withZoneSameInstant(beijingZone);
        // 格式化北京时间为字符串
        String beijingTimeString = beijingZonedDateTime.format(formatter);
        // 打印结果
        System.out.println("local datetime" + localTime);
        System.out.println("beijing datetime" + beijingTimeString);
        return beijingTimeString;
    }
    /**
     * 在线任务
     * @param
     */
    @POST
    @Path("/taskOnline")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject taskData(JSONObject jsonObject) throws RemoteException, MXException, ParseException {
        JSONObject returnDate = new JSONObject();
        JSONArray taskDataArr = new JSONArray();//放任务
        System.out.println("aqdj taskOnline start....");//
        //--接收参数---start--------------------------------
        String USERID = jsonObject.getString("USERID");//APP传过来的当前用户工号
        String LANGCODE = jsonObject.getString("LANGCODE");//登录环境（ZH中文，EN英文，FR法文）
        String LOGTIME1 = jsonObject.getString("LOGTIME1");//当地时间（海外时间）
        String ORGID = jsonObject.getString("ORGID");//组织
        String SITEID = jsonObject.getString("SITEID");//地点
        //-接收参数---end--------------------------------
        //验证-开始-----
        if(USERID==null || "".equals(USERID)){
            returnDate.put("errcode","201");
            returnDate.put("errmsg","User ID Lost");
            return returnDate;
        }
        if(LANGCODE==null || "".equals(LANGCODE)){
            returnDate.put("errcode","202");
            returnDate.put("errmsg","Language Environment Lost");
            return returnDate;
        }
        if(ORGID==null || "".equals(ORGID)){
            returnDate.put("errcode","203");
            returnDate.put("errmsg","ORGID Lost");
            return returnDate;
        }
        if(SITEID==null || "".equals(SITEID)){
            returnDate.put("errcode","204");
            returnDate.put("errmsg","SITEID Lost");
            return returnDate;
        }
        String LocalStartTime = "";//当地的开始时间
        String LocalEndTime = "";//当地的结束时间
        //时间判断----------------------------------------
        Calendar calendar = Calendar.getInstance();
        // 定义日期时间格式：
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 定义时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 解析当前时间字符串为 LocalDateTime 对象
        LocalDateTime currentDateTime = LocalDateTime.parse(LOGTIME1, formatter);
        if("TILE".equalsIgnoreCase(ORGID)){
            LocalTime startTime = LocalTime.of(7, 0); // 设置开始时间为早上7点
            LocalTime endTime = LocalTime.of(7, 0);// 设置开始时间为早上7点
            LocalDateTime startDateTime;
            LocalDateTime endDateTime;
            if (currentDateTime.toLocalTime().isBefore(startTime)) {
                // 如果当前时间在早上7点之前，则结束时间为今天的早上7点，开始时间为前一天的早上7点
                endDateTime  = currentDateTime.with(endTime);
                startDateTime = currentDateTime.with(endTime).minusHours(24);
            } else {
                // 如果当前时间在早上7点之后，则开始时间为今天的早上7点，结束时间为明天的早上7点
                startDateTime = currentDateTime.with(startTime);
                endDateTime = currentDateTime.with(startTime).plusHours(24);
            }
            //判断
            if (currentDateTime.isAfter(startDateTime) && currentDateTime.isBefore(endDateTime)) {
                System.out.println("at beforeDay 7am to toDay 7am");
                LocalStartTime = startDateTime.format(formatter);
                LocalEndTime = endDateTime.format(formatter);
            } else {
                System.out.println("at toDay 7am to nextDay 7am");
                LocalStartTime = startDateTime.format(formatter);
                LocalEndTime = endDateTime.format(formatter);
            }
        }else{
            //快消和五金是12小时一检
            // 定义晚上8点和第二天早上8点的时间范围---夜班
            LocalTime nightStart = LocalTime.of(20, 0, 0);
            LocalTime nextDayMorningStart = LocalTime.of(8, 0, 0);
            // 定义当天早上8点和晚上20点的时间范围0---早班
            LocalTime morningStart = LocalTime.of(8, 0, 0);
            LocalTime eveningStart = LocalTime.of(20, 0, 0);
            // 构造开始和结束的日期时间范围
            LocalDateTime nightRangeStart;
            LocalDateTime nightRangeEnd;
            LocalDateTime dayRangeStart;
            LocalDateTime dayRangeEnd;
            if (currentDateTime.toLocalTime().isBefore(nextDayMorningStart)) {
                nightRangeStart = LocalDateTime.of(currentDateTime.toLocalDate().minusDays(1), nightStart);
                nightRangeEnd = LocalDateTime.of(currentDateTime.toLocalDate(), nextDayMorningStart);
                dayRangeStart = LocalDateTime.of(currentDateTime.toLocalDate(), morningStart);
                dayRangeEnd = LocalDateTime.of(currentDateTime.toLocalDate(), eveningStart);
            } else {
                nightRangeStart = LocalDateTime.of(currentDateTime.toLocalDate(), nightStart);
                nightRangeEnd = LocalDateTime.of(currentDateTime.toLocalDate().plusDays(1), nextDayMorningStart);
                dayRangeStart = LocalDateTime.of(currentDateTime.toLocalDate(), morningStart);
                dayRangeEnd = LocalDateTime.of(currentDateTime.toLocalDate(), eveningStart);
            }
            // 判断并输出时间段
            if (currentDateTime.isAfter(nightRangeStart) && currentDateTime.isBefore(nightRangeEnd)) {
                LocalStartTime = nightRangeStart.format(formatter);
                LocalEndTime = nightRangeEnd.format(formatter);
                System.out.println("at toNight 20 to nextDay Morning 8");//当前时间在晚上8点到第二天早上8点之间
            } else if (currentDateTime.isAfter(dayRangeStart) && currentDateTime.isBefore(dayRangeEnd)) {
                LocalStartTime = dayRangeStart.format(formatter);
                LocalEndTime = dayRangeEnd.format(formatter);
                System.out.println("at toDay 8 at toDay 20");//当前时间在当天早上8点到晚上20点之间
            } else {
                LocalStartTime = "";
                LocalEndTime = "";
                System.out.println("no range");//当前时间不在指定范围内
            }
            System.out.println("starttime：" + LocalStartTime);
            System.out.println("endtime：" + LocalEndTime);
        }
        //转北京时间------
        String bjstartDate = AfricaconvertToBeijingTime(LocalStartTime,SITEID);
        String bjendDate = AfricaconvertToBeijingTime(LocalEndTime,SITEID);
        //--********************************************************************************
        //-验证---结束--------------------------------

        //获取任务单
        MboSetRemote spotRunSet = MXServer.getMXServer().getMboSet("UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());//点检任务表
        spotRunSet.setWhere(" ORGID='"+ORGID+"' and SITEID='"+SITEID+"' and CREATEDATE BETWEEN TO_TIMESTAMP('"+bjstartDate+"','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP ('"+bjendDate+"','YYYY-MM-DD HH24:MI:SS') and RYZ in (select PERSONGROUP from PERSONGROUPTEAM where RESPPARTYGROUP='"+USERID+"')");
        spotRunSet.reset();
        spotRunSet.setOrderBy("CREATEDATE desc");
        if(spotRunSet!=null && !spotRunSet.isEmpty()){
            //任务描述的多语言查询
            MboSetRemote spotRunLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
            //路线多语言查询
            MboSetRemote routesSet = MXServer.getMXServer().getMboSet("UDAQDJLX",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote routesLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJLX",MXServer.getMXServer().getSystemUserInfo());
            //部门多语言查询
            MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote deptLangSet = MXServer.getMXServer().getMboSet("L_DEPT",MXServer.getMXServer().getSystemUserInfo());
            //人员名称-没有多语言
            MboSetRemote personSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());
            //任务执行组-没有多语言表
            MboSetRemote persongroupSet = MXServer.getMXServer().getMboSet("PERSONGROUP",MXServer.getMXServer().getSystemUserInfo());
            //任务状态多语言查询
            MboSetRemote alndomainSet = MXServer.getMXServer().getMboSet("ALNDOMAIN",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote alndomainLangSet = MXServer.getMXServer().getMboSet("L_ALNDOMAIN",MXServer.getMXServer().getSystemUserInfo());
            for(int i=0;i<spotRunSet.count();i++){
                JSONObject taskData = new JSONObject();//单个任务
                MboRemote mbo = spotRunSet.getMbo(i);
                Integer UDAQDJRWID = mbo.getInt("UDAQDJRWID");//主表ID
                String UDAQDJRWNUM = mbo.getString("UDAQDJRWNUM");//任务单号
                String DESCRIPTION = mbo.getString("DESCRIPTION");//任务描述
                String ROUTE = mbo.getString("ROUTE");//路线编号
                String DEPTNUM =  mbo.getString("DEPTNUM");//部门
                String STATUS =  mbo.getString("STATUS");//任务单状态
                String XZR =  mbo.getString("XZR");//任务下载人编号
                String RYZ =  mbo.getString("RYZ");//任务执行组
                String ZXZLX =  mbo.getString("ZXZLX");//执行组类型
                String RWHS =  mbo.getString("RWHS");//任务耗时
                //默认英文环境---------------------------------------------------------
                String XZRNAME = "";//任务下载人员名称
                String DEPTNAME = "";//部门描述
                String ROUTENAME = "";//路线描述
                String RYZNAME = "";//执行组名称
                Integer ALNDOMAINID = null;
                String STATUSNAME = "";//状态描述
                if("EN".equalsIgnoreCase(LANGCODE) || "FR".equalsIgnoreCase(LANGCODE)){
                    if("EDIT".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Undownload";
                    }else if("Appr".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Download";
                    }else if("COMP".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Upload";
                    }
                }
                //查询路线的英文描述和表ID
                routesSet.setWhere("route='"+ROUTE+"' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");
                routesSet.reset();
                Integer ROUTESID = null;
                if(routesSet!=null && !routesSet.isEmpty()){
                   MboRemote routeMbo = routesSet.getMbo(0);
                    ROUTESID = routeMbo.getInt("UDAQDJLXID");
                    ROUTENAME = routeMbo.getString("DESCRIPTION");
                }
                //查询部门的英文描述和表ID
                deptSet.setWhere("deptnum='"+DEPTNUM+"' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");
                deptSet.reset();
                Integer DEPTID = null;
                if(deptSet!=null && !deptSet.isEmpty()){
                    MboRemote routeMbo = deptSet.getMbo(0);
                    DEPTID = routeMbo.getInt("DEPTID");
                    DEPTNAME = routeMbo.getString("DESCRIPTION");
                }
                //查询下载人员名称
                personSet.setWhere("personid='"+XZR+"'");
                personSet.reset();
                if(personSet!=null && !personSet.isEmpty()){
                    MboRemote mboDesc = personSet.getMbo(0);
                    XZRNAME = mboDesc.getString("DISPLAYNAME");
                }
                //查询执行组名称
                persongroupSet.setWhere("PERSONGROUP='"+RYZ+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");
                persongroupSet.reset();
                if(persongroupSet!=null && !persongroupSet.isEmpty()){
                    MboRemote mboDesc = persongroupSet.getMbo(0);
                    RYZNAME = mboDesc.getString("DESCRIPTION");
                }
                //查询域表
                alndomainSet.setWhere("value='"+STATUS+"' and DOMAINID='SPOTSTATUS'");
                alndomainSet.reset();
                if(alndomainSet!=null && !alndomainSet.isEmpty()){
                    MboRemote mboDesc = alndomainSet.getMbo(0);
                    ALNDOMAINID = mboDesc.getInt("ALNDOMAINID");
                }
                //-非英文状态下，需要进行查询----------------------------------------------------------
                if(!"EN".equalsIgnoreCase(LANGCODE)){
                    //任务描述
                    spotRunLangSet.setWhere(" OWNERID="+UDAQDJRWID+" and LANGCODE='"+LANGCODE+"'");
                    spotRunLangSet.reset();
                    if(spotRunLangSet!=null && !spotRunLangSet.isEmpty()){
                        MboRemote mboDesc = spotRunLangSet.getMbo(0);
                        DESCRIPTION = mboDesc.getString("DESCRIPTION");
                    }
                    //路线描述
                    routesLangSet.setWhere(" OWNERID="+ROUTESID+" and LANGCODE='"+LANGCODE+"'");
                    routesLangSet.reset();
                    if(routesLangSet!=null && !routesLangSet.isEmpty()){
                        MboRemote mboDesc = routesLangSet.getMbo(0);
                        ROUTE = mboDesc.getString("DESCRIPTION");
                    }
                    //部门描述
                    deptLangSet.setWhere(" OWNERID="+DEPTID+" and LANGCODE='"+LANGCODE+"'");
                    deptLangSet.reset();
                    if(deptLangSet!=null && !deptLangSet.isEmpty()){
                        MboRemote mboDesc = deptLangSet.getMbo(0);
                        DEPTNAME = mboDesc.getString("DESCRIPTION");
                    }
                    //状态描述
                    alndomainLangSet.setWhere(" OWNERID="+ALNDOMAINID+" and LANGCODE='"+LANGCODE+"'");
                    alndomainLangSet.reset();
                    if(alndomainLangSet!=null && !alndomainLangSet.isEmpty()){
                        MboRemote mboDesc = alndomainLangSet.getMbo(0);
                        STATUSNAME = mboDesc.getString("DESCRIPTION");
                    }
                }
                //返回任务
                taskData.put("UDAQDJRWID",UDAQDJRWID);//主表ID
                taskData.put("UDAQDJRWNUM",UDAQDJRWNUM);//任务单号
                taskData.put("DESCRIPTION",DESCRIPTION);//任务描述
                taskData.put("ROUTE",ROUTE);//路线编号
                taskData.put("ROUTENAME",ROUTENAME);//路线名称
                taskData.put("DEPTNUM",DEPTNUM);//部门编号
                taskData.put("DEPTNAME",DEPTNAME);//部门描述
                taskData.put("XZR",XZR);//下载人
                taskData.put("XZRNAME",XZRNAME);//下载人名称
                taskData.put("STATUS",STATUS);//状态编号
                taskData.put("STATUSNAME",STATUSNAME);//状态描述
                taskData.put("RYZ",RYZ);//执行组编号
                taskData.put("RYZNAME",RYZNAME);//执行组描述
                taskData.put("RWHS",RWHS);//任务耗时
                taskDataArr.add(taskData);//加入数组中
            }
            returnDate.put("errcode","200");
            returnDate.put("errmsg","success");
            returnDate.put("taskdata",taskDataArr);//返回任务
        }else{
            returnDate.put("errcode","201");
            returnDate.put("errmsg","No Task...");//1、今天确实没有任务 2、人员不在执行组中
        }
        //-日志记录表------------------------------------------------------
        MboSetRemote appparamlogSet = MXServer.getMXServer().getMboSet("APPPARAMLOG",MXServer.getMXServer().getSystemUserInfo());
        if(null!=appparamlogSet){
            MboRemote appLogMbo=appparamlogSet.addAtEnd(2L);
            appLogMbo.setValue("DESCRIPTION", "taskOnline-"+bjstartDate+"-"+bjendDate, 2L);
            appLogMbo.setValue("USERID",USERID, 2L);
            appLogMbo.setValue("CURRENTDATE","localTime-"+LOGTIME1+"-"+ORGID+"-"+SITEID, 2L);
            appLogMbo.setValue("LANGCODE",LANGCODE, 2L);
            if(returnDate.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                appLogMbo.setValue("PCRETRUN","all-"+returnDate.toString(), 2L);
            }else {
                appLogMbo.setValue("PCRETRUN","substring-"+returnDate.toString().substring(0, 3000), 2L);
            }
            appLogMbo.getThisMboSet().save();
            appLogMbo.getThisMboSet().close();
        }
        //-------------------------------------------------------
//        System.out.println("returndata="+returnDate.toString());
        return returnDate;
    }

    /**
     * 点检保养任务下载
     * @return
     */
    @POST
    @Path("/taskDownload")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject taskDownload(JSONObject jsonObject) throws RemoteException, MXException {
        JSONObject returnDate = new JSONObject();
        //接收参数---start--------------------------------------------------------
        String USERID = jsonObject.getString("USERID");//APP传过来的当前用户工号
        JSONArray dataArr = jsonObject.getJSONArray("SPOTRUNIDLIST");//勾选的主表ID放到一个数组
        String LANGCODE = jsonObject.getString("LANGCODE");//登录环境
        String ORGID = jsonObject.getString("ORGID");//组织
        String SITEID = jsonObject.getString("SITEID");//地点
        //接收参数---end-------------------------------------------------------
        //验证
        if(USERID==null || "".equals(USERID)){
            returnDate.put("errcode","201");
            returnDate.put("errmsg","User ID Lost");
            return returnDate;
        }
        if(LANGCODE==null || "".equals(LANGCODE)){
            returnDate.put("errcode","202");
            returnDate.put("errmsg","Language Environment Lost");
            return returnDate;
        }
        if(ORGID==null || "".equals(ORGID)){
            returnDate.put("errcode","203");
            returnDate.put("errmsg","ORGID Lost");
            return returnDate;
        }
        if(SITEID==null || "".equals(SITEID)){
            returnDate.put("errcode","204");
            returnDate.put("errmsg","SITEID Lost");
            return returnDate;
        }
        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 {
            returnDate.put("errcode", "100");
            returnDate.put("errmsg", "No data downLoad");
            return returnDate;
        }
        //-验证---end--------------------------------
        //获取任务单
        MboSetRemote spotRunSet = MXServer.getMXServer().getMboSet("UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
        spotRunSet.setWhere("UDAQDJRWID in("+strID+")");
        spotRunSet.reset();
        if(spotRunSet!=null && !spotRunSet.isEmpty()){
            //任务描述的多语言查询
            MboSetRemote spotRunLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
            //路线多语言查询
            MboSetRemote routesSet = MXServer.getMXServer().getMboSet("UDAQDJLX",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote routesLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJLX",MXServer.getMXServer().getSystemUserInfo());
            //部门多语言查询
            MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote deptLangSet = MXServer.getMXServer().getMboSet("L_DEPT",MXServer.getMXServer().getSystemUserInfo());
            //人员名称-没有多语言
            MboSetRemote personSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());
            //任务执行组-没有多语言表
            MboSetRemote persongroupSet = MXServer.getMXServer().getMboSet("PERSONGROUP",MXServer.getMXServer().getSystemUserInfo());
            //任务状态多语言查询
            MboSetRemote alndomainSet = MXServer.getMXServer().getMboSet("ALNDOMAIN",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote alndomainLangSet = MXServer.getMXServer().getMboSet("L_ALNDOMAIN",MXServer.getMXServer().getSystemUserInfo());
            //-子表相关查询------------------------------------------------------------------------------------------------------
            MboSetRemote spotrunlineLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJRWLINE",MXServer.getMXServer().getSystemUserInfo());//安全点检明细-多语言表
            MboSetRemote assetSet = MXServer.getMXServer().getMboSet("UDAQDJWZ",MXServer.getMXServer().getSystemUserInfo());//安全点检位置
            MboSetRemote assetLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJWZ",MXServer.getMXServer().getSystemUserInfo());//安全点检位置-多语言表
            //-----------------------------------------
            //主表任务循环
            JSONArray taskDataArr = new JSONArray();//放主表任务
            for(int i=0;i<spotRunSet.count();i++){
                JSONObject taskData = new JSONObject();//单个任务
                MboRemote mbo = spotRunSet.getMbo(i);
                Integer UDAQDJRWID = mbo.getInt("UDAQDJRWID");//主表ID
                String UDAQDJRWNUM = mbo.getString("UDAQDJRWNUM");//任务单号
                String DESCRIPTION = mbo.getString("DESCRIPTION");//任务描述
                String ROUTE = mbo.getString("ROUTE");//路线编号
                String DEPTNUM =  mbo.getString("DEPTNUM");//部门
                String STATUS =  mbo.getString("STATUS");//任务单状态
                String XZR =  mbo.getString("XZR");//任务下载人编号
                String RYZ =  mbo.getString("RYZ");//任务执行组
                String ZXZLX =  mbo.getString("ZXZLX");//执行组类型
                String RWHS =  mbo.getString("RWHS");//任务耗时
                //默认英文环境---------------------------------------------------------
                String XZRNAME = "";//任务下载人员名称
                String DEPTNAME = "";//部门描述
                String ROUTENAME = "";//路线描述
                String RYZNAME = "";//执行组名称
                Integer ALNDOMAINID = null;
                String STATUSNAME = "";//状态描述
                if("EN".equalsIgnoreCase(LANGCODE) || "FR".equalsIgnoreCase(LANGCODE)){
                    if("EDIT".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Undownload";
                    }else if("Appr".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Download";
                    }else if("COMP".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Upload";
                    }
                }
                //查询路线的英文描述和表ID
                routesSet.setWhere("route='"+ROUTE+"' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");
                routesSet.reset();
                Integer ROUTESID = null;
                if(routesSet!=null && !routesSet.isEmpty()){
                    MboRemote routeMbo = routesSet.getMbo(0);
                    ROUTESID = routeMbo.getInt("UDAQDJLXID");
                    ROUTENAME = routeMbo.getString("DESCRIPTION");
                }
                //查询部门的英文描述和表ID
                deptSet.setWhere("deptnum='"+DEPTNUM+"' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");
                deptSet.reset();
                Integer DEPTID = null;
                if(deptSet!=null && !deptSet.isEmpty()){
                    MboRemote routeMbo = deptSet.getMbo(0);
                    DEPTID = routeMbo.getInt("DEPTID");
                    DEPTNAME = routeMbo.getString("DESCRIPTION");
                }
                //查询下载人员名称
                personSet.setWhere("personid='"+XZR+"'");
                personSet.reset();
                if(personSet!=null && !personSet.isEmpty()){
                    MboRemote mboDesc = personSet.getMbo(0);
                    XZRNAME = mboDesc.getString("DISPLAYNAME");
                }
                //查询执行组名称
                persongroupSet.setWhere("PERSONGROUP='"+RYZ+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");
                persongroupSet.reset();
                if(persongroupSet!=null && !persongroupSet.isEmpty()){
                    MboRemote mboDesc = persongroupSet.getMbo(0);
                    RYZNAME = mboDesc.getString("DESCRIPTION");
                }
                //查询域表
                alndomainSet.setWhere("value='"+STATUS+"' and DOMAINID='SPOTSTATUS'");
                alndomainSet.reset();
                if(alndomainSet!=null && !alndomainSet.isEmpty()){
                    MboRemote mboDesc = alndomainSet.getMbo(0);
                    ALNDOMAINID = mboDesc.getInt("ALNDOMAINID");
                }
                //-非英文状态下，需要进行查询----------------------------------------------------------
                if(!"EN".equalsIgnoreCase(LANGCODE)){
                    //任务描述
                    spotRunLangSet.setWhere(" OWNERID="+UDAQDJRWID+" and LANGCODE='"+LANGCODE+"'");
                    spotRunLangSet.reset();
                    if(spotRunLangSet!=null && !spotRunLangSet.isEmpty()){
                        MboRemote mboDesc = spotRunLangSet.getMbo(0);
                        DESCRIPTION = mboDesc.getString("DESCRIPTION");
                    }
                    //路线描述
                    routesLangSet.setWhere(" OWNERID="+ROUTESID+" and LANGCODE='"+LANGCODE+"'");
                    routesLangSet.reset();
                    if(routesLangSet!=null && !routesLangSet.isEmpty()){
                        MboRemote mboDesc = routesLangSet.getMbo(0);
                        ROUTE = mboDesc.getString("DESCRIPTION");
                    }
                    //部门描述
                    deptLangSet.setWhere(" OWNERID="+DEPTID+" and LANGCODE='"+LANGCODE+"'");
                    deptLangSet.reset();
                    if(deptLangSet!=null && !deptLangSet.isEmpty()){
                        MboRemote mboDesc = deptLangSet.getMbo(0);
                        DEPTNAME = mboDesc.getString("DESCRIPTION");
                    }
                    //状态描述
                    alndomainLangSet.setWhere(" OWNERID="+ALNDOMAINID+" and LANGCODE='"+LANGCODE+"'");
                    alndomainLangSet.reset();
                    if(alndomainLangSet!=null && !alndomainLangSet.isEmpty()){
                        MboRemote mboDesc = alndomainLangSet.getMbo(0);
                        STATUSNAME = mboDesc.getString("DESCRIPTION");
                    }
                }
                //返回任务
                taskData.put("UDAQDJRWID",UDAQDJRWID);//主表ID
                taskData.put("UDAQDJRWNUM",UDAQDJRWNUM);//任务单号
                taskData.put("DESCRIPTION",DESCRIPTION);//任务描述
                taskData.put("ROUTE",ROUTE);//路线编号
                taskData.put("ROUTENAME",ROUTENAME);//路线名称
                taskData.put("DEPTNUM",DEPTNUM);//部门编号
                taskData.put("DEPTNAME",DEPTNAME);//部门描述
                taskData.put("XZR",XZR);//下载人
                taskData.put("XZRNAME",XZRNAME);//下载人名称
                taskData.put("STATUS",STATUS);//状态编号
                taskData.put("STATUSNAME",STATUSNAME);//状态描述
                taskData.put("RYZ",RYZ);//执行组编号
                taskData.put("RYZNAME",RYZNAME);//执行组描述
                taskData.put("RWHS",RWHS);//任务耗时
                taskDataArr.add(taskData);//加入数组中
                //-循环子表任务------------------------------------------------------------------------------------------------------
                MboSetRemote spotrunlineSet = MXServer.getMXServer().getMboSet("UDAQDJRWLINE",MXServer.getMXServer().getSystemUserInfo());
                spotrunlineSet.setWhere("parentid="+UDAQDJRWID+"");
                spotrunlineSet.reset();
                spotrunlineSet.setOrderBy("XH ASC");//升序
                if(spotrunlineSet!=null && !spotrunlineSet.isEmpty()){
                    JSONArray taskLineDataArr = new JSONArray();//放子表任务
                    for(int m=0;m<spotrunlineSet.count();m++){
                        JSONObject taskLineData = new JSONObject();//单个子表任务
                        MboRemote lineMbo = spotrunlineSet.getMbo(m);//每个子表对象
                        Integer UDAQDJRWLINEID = lineMbo.getInt("UDAQDJRWLINEID");//子表主键
                        Integer XH = lineMbo.getInt("XH");//点检项序号
                        Integer LOCATION = lineMbo.getInt("LOCATION");//位置编号
                        String JCXM = lineMbo.getString("JCXM");//检查项目-EN
                        String JCNR = lineMbo.getString("DESCRIPTION");//检查内容及要求-EN
                        String JCFS = lineMbo.getString("JCFS");//检查方式
                        Integer PL = lineMbo.getInt("PL");//频率
                        String PLDW = lineMbo.getString("PLDW");//单位
                        //-英文状态下-位置查询---------------------------------------------------------
                        Integer UDAQDJWZID = null;
                        String LOCATIONDESC = "";//设备名称
                        assetSet.setWhere("LOCATION='"+LOCATION+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");
                        assetSet.reset();
                        if(assetSet!=null && !assetSet.isEmpty()){
                            MboRemote mboDesc = assetSet.getMbo(0);
                            UDAQDJWZID = mboDesc.getInt("UDAQDJWZID");
                            LOCATIONDESC = mboDesc.getString("DESCRIPTION");
                        }
                        //-非英文状态下--位置和任务明细查询--------------------------------------------------------
                        if(!"EN".equalsIgnoreCase(LANGCODE)){
                            //位置
                            assetLangSet.setWhere(" OWNERID="+UDAQDJWZID+" and LANGCODE='"+LANGCODE+"'");
                            assetLangSet.reset();
                            if(assetLangSet!=null && !assetLangSet.isEmpty()){
                                MboRemote mboDesc = assetLangSet.getMbo(0);
                                LOCATIONDESC = mboDesc.getString("DESCRIPTION");//位置名称
                            }
                            //点检任务项的查询
                            spotrunlineLangSet.setWhere(" OWNERID="+UDAQDJRWLINEID+" and LANGCODE='"+LANGCODE+"'");
                            spotrunlineLangSet.reset();
                            if(spotrunlineLangSet!=null && !spotrunlineLangSet.isEmpty()){
                                MboRemote mboDesc = spotrunlineLangSet.getMbo(0);
                                JCXM = mboDesc.getString("JCXM");//检查项目
                                JCNR = mboDesc.getString("DESCRIPTION");//检查内容及要求
                                JCFS = mboDesc.getString("JCFS");//检查方式
                            }
                        }
                        taskLineData.put("UDAQDJRWID",UDAQDJRWID);//主表id
                        taskLineData.put("UDAQDJRWLINEID",UDAQDJRWLINEID);//子表id
                        taskLineData.put("UDAQDJRWNUM",UDAQDJRWNUM);//--任务单号
                        taskLineData.put("ORGID",ORGID);//组织
                        taskLineData.put("SITEID",SITEID);//地点
                        taskLineData.put("XH",XH);//点检任务序号
                        taskLineData.put("LOCATION",LOCATION);//位置编号
                        taskLineData.put("LOCATIONDESC",LOCATIONDESC);//位置名称
                        taskLineData.put("PL",PL);//频率
                        taskLineData.put("PLDW",PLDW);//频率单位
                        taskLineData.put("JCXM",JCXM);//检查项目
                        taskLineData.put("JCNR",JCNR);//检查内容及要求
                        taskLineData.put("JCFS",JCFS);//检查方式
                        taskLineDataArr.add(taskLineData);
                    }
                    taskData.put("taskline",taskLineDataArr);//一个主表任务对应多个点检项目
                }
                taskDataArr.add(taskData);//主表任务加入数组中
                //下载后变更状态和执行人
                mbo.setValue("STATUS","Appr");//状态变为已下载
                mbo.setValue("XZR",USERID);//下载人
                mbo.getThisMboSet().save();
                //----------------------------------------------------------------------------------------------------------
            }
            returnDate.put("errcode","200");
            returnDate.put("errmsg","success");
            returnDate.put("taskdata",taskDataArr);//返回任务
        }
        //-日志记录表------------------------------------------------------
        MboSetRemote appparamlogSet = MXServer.getMXServer().getMboSet("APPPARAMLOG",MXServer.getMXServer().getSystemUserInfo());
        if(null!=appparamlogSet){
            MboRemote appLogMbo=appparamlogSet.addAtEnd(2L);
            appLogMbo.setValue("DESCRIPTION", "taskDownload-"+dataArr.toString(), 2L);
            appLogMbo.setValue("USERID",USERID, 2L);
            appLogMbo.setValue("CURRENTDATE","beijingTime-"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"-"+ORGID+"-"+SITEID,2L);
            appLogMbo.setValue("LANGCODE",LANGCODE, 2L);
            if(returnDate.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                appLogMbo.setValue("PCRETRUN","all-"+returnDate.toString(), 2L);
            }else {
                appLogMbo.setValue("PCRETRUN","substring-"+returnDate.toString().substring(0, 3000), 2L);
            }
            appLogMbo.getThisMboSet().save();
            appLogMbo.getThisMboSet().close();
        }
        //-------------------------------------------------------
//        System.out.println("returndata="+returnDate.toString());
        return returnDate;
    }

    /**
     * 点检保养任务在线查看明细
     * @return
     */
    @POST
    @Path("/taskLines")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject taskLines(JSONObject jsonObject) throws RemoteException, MXException {
        JSONObject returnDate = new JSONObject();
        //接收参数---start--------------------------------------------------------
        String USERID = jsonObject.getString("USERID");//APP传过来的当前用户工号
        JSONArray dataArr = jsonObject.getJSONArray("SPOTRUNIDLIST");//勾选的主表ID放到一个数组
        String LANGCODE = jsonObject.getString("LANGCODE");//登录环境
        String ORGID = jsonObject.getString("ORGID");//组织
        String SITEID = jsonObject.getString("SITEID");//地点
        //接收参数---end-------------------------------------------------------
        //验证
        if(USERID==null || "".equals(USERID)){
            returnDate.put("errcode","201");
            returnDate.put("errmsg","User ID Lost");
            return returnDate;
        }
        if(LANGCODE==null || "".equals(LANGCODE)){
            returnDate.put("errcode","202");
            returnDate.put("errmsg","Language Environment Lost");
            return returnDate;
        }
        if(ORGID==null || "".equals(ORGID)){
            returnDate.put("errcode","203");
            returnDate.put("errmsg","ORGID Lost");
            return returnDate;
        }
        if(SITEID==null || "".equals(SITEID)){
            returnDate.put("errcode","204");
            returnDate.put("errmsg","SITEID Lost");
            return returnDate;
        }
        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 {
            returnDate.put("errcode", "100");
            returnDate.put("errmsg", "No data downLoad");
            return returnDate;
        }
        //-验证---end--------------------------------
        //获取任务单
        MboSetRemote spotRunSet = MXServer.getMXServer().getMboSet("UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
        spotRunSet.setWhere("UDAQDJRWID in("+strID+")");
        spotRunSet.reset();
        if(spotRunSet!=null && !spotRunSet.isEmpty()){
            //任务描述的多语言查询
            MboSetRemote spotRunLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
            //路线多语言查询
            MboSetRemote routesSet = MXServer.getMXServer().getMboSet("UDAQDJLX",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote routesLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJLX",MXServer.getMXServer().getSystemUserInfo());
            //部门多语言查询
            MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote deptLangSet = MXServer.getMXServer().getMboSet("L_DEPT",MXServer.getMXServer().getSystemUserInfo());
            //人员名称-没有多语言
            MboSetRemote personSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());
            //任务执行组-没有多语言表
            MboSetRemote persongroupSet = MXServer.getMXServer().getMboSet("PERSONGROUP",MXServer.getMXServer().getSystemUserInfo());
            //任务状态多语言查询
            MboSetRemote alndomainSet = MXServer.getMXServer().getMboSet("ALNDOMAIN",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote alndomainLangSet = MXServer.getMXServer().getMboSet("L_ALNDOMAIN",MXServer.getMXServer().getSystemUserInfo());
            //-子表相关查询------------------------------------------------------------------------------------------------------
            MboSetRemote spotrunlineLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJRWLINE",MXServer.getMXServer().getSystemUserInfo());//安全点检明细-多语言表
            MboSetRemote assetSet = MXServer.getMXServer().getMboSet("UDAQDJWZ",MXServer.getMXServer().getSystemUserInfo());//安全点检位置
            MboSetRemote assetLangSet = MXServer.getMXServer().getMboSet("L_UDAQDJWZ",MXServer.getMXServer().getSystemUserInfo());//安全点检位置-多语言表
            //-----------------------------------------
            //主表任务循环
            JSONArray taskDataArr = new JSONArray();//放主表任务
            for(int i=0;i<spotRunSet.count();i++){
                JSONObject taskData = new JSONObject();//单个任务
                MboRemote mbo = spotRunSet.getMbo(i);
                Integer UDAQDJRWID = mbo.getInt("UDAQDJRWID");//主表ID
                String UDAQDJRWNUM = mbo.getString("UDAQDJRWNUM");//任务单号
                String DESCRIPTION = mbo.getString("DESCRIPTION");//任务描述
                String ROUTE = mbo.getString("ROUTE");//路线编号
                String DEPTNUM =  mbo.getString("DEPTNUM");//部门
                String STATUS =  mbo.getString("STATUS");//任务单状态
                String XZR =  mbo.getString("XZR");//任务下载人编号
                String RYZ =  mbo.getString("RYZ");//任务执行组
                String ZXZLX =  mbo.getString("ZXZLX");//执行组类型
                String RWHS =  mbo.getString("RWHS");//任务耗时
                //默认英文环境---------------------------------------------------------
                String XZRNAME = "";//任务下载人员名称
                String DEPTNAME = "";//部门描述
                String ROUTENAME = "";//路线描述
                String RYZNAME = "";//执行组名称
                Integer ALNDOMAINID = null;
                String STATUSNAME = "";//状态描述
                if("EN".equalsIgnoreCase(LANGCODE) || "FR".equalsIgnoreCase(LANGCODE)){
                    if("EDIT".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Undownload";
                    }else if("Appr".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Download";
                    }else if("COMP".equalsIgnoreCase(STATUS)){
                        STATUSNAME = "Upload";
                    }
                }
                //查询路线的英文描述和表ID
                routesSet.setWhere("route='"+ROUTE+"' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");
                routesSet.reset();
                Integer ROUTESID = null;
                if(routesSet!=null && !routesSet.isEmpty()){
                    MboRemote routeMbo = routesSet.getMbo(0);
                    ROUTESID = routeMbo.getInt("UDAQDJLXID");
                    ROUTENAME = routeMbo.getString("DESCRIPTION");
                }
                //查询部门的英文描述和表ID
                deptSet.setWhere("deptnum='"+DEPTNUM+"' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");
                deptSet.reset();
                Integer DEPTID = null;
                if(deptSet!=null && !deptSet.isEmpty()){
                    MboRemote routeMbo = deptSet.getMbo(0);
                    DEPTID = routeMbo.getInt("DEPTID");
                    DEPTNAME = routeMbo.getString("DESCRIPTION");
                }
                //查询下载人员名称
                personSet.setWhere("personid='"+XZR+"'");
                personSet.reset();
                if(personSet!=null && !personSet.isEmpty()){
                    MboRemote mboDesc = personSet.getMbo(0);
                    XZRNAME = mboDesc.getString("DISPLAYNAME");
                }
                //查询执行组名称
                persongroupSet.setWhere("PERSONGROUP='"+RYZ+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");
                persongroupSet.reset();
                if(persongroupSet!=null && !persongroupSet.isEmpty()){
                    MboRemote mboDesc = persongroupSet.getMbo(0);
                    RYZNAME = mboDesc.getString("DESCRIPTION");
                }
                //查询域表
                alndomainSet.setWhere("value='"+STATUS+"' and DOMAINID='SPOTSTATUS'");
                alndomainSet.reset();
                if(alndomainSet!=null && !alndomainSet.isEmpty()){
                    MboRemote mboDesc = alndomainSet.getMbo(0);
                    ALNDOMAINID = mboDesc.getInt("ALNDOMAINID");
                }
                //-非英文状态下，需要进行查询----------------------------------------------------------
                if(!"EN".equalsIgnoreCase(LANGCODE)){
                    //任务描述
                    spotRunLangSet.setWhere(" OWNERID="+UDAQDJRWID+" and LANGCODE='"+LANGCODE+"'");
                    spotRunLangSet.reset();
                    if(spotRunLangSet!=null && !spotRunLangSet.isEmpty()){
                        MboRemote mboDesc = spotRunLangSet.getMbo(0);
                        DESCRIPTION = mboDesc.getString("DESCRIPTION");
                    }
                    //路线描述
                    routesLangSet.setWhere(" OWNERID="+ROUTESID+" and LANGCODE='"+LANGCODE+"'");
                    routesLangSet.reset();
                    if(routesLangSet!=null && !routesLangSet.isEmpty()){
                        MboRemote mboDesc = routesLangSet.getMbo(0);
                        ROUTE = mboDesc.getString("DESCRIPTION");
                    }
                    //部门描述
                    deptLangSet.setWhere(" OWNERID="+DEPTID+" and LANGCODE='"+LANGCODE+"'");
                    deptLangSet.reset();
                    if(deptLangSet!=null && !deptLangSet.isEmpty()){
                        MboRemote mboDesc = deptLangSet.getMbo(0);
                        DEPTNAME = mboDesc.getString("DESCRIPTION");
                    }
                    //状态描述
                    alndomainLangSet.setWhere(" OWNERID="+ALNDOMAINID+" and LANGCODE='"+LANGCODE+"'");
                    alndomainLangSet.reset();
                    if(alndomainLangSet!=null && !alndomainLangSet.isEmpty()){
                        MboRemote mboDesc = alndomainLangSet.getMbo(0);
                        STATUSNAME = mboDesc.getString("DESCRIPTION");
                    }
                }
                //返回任务
                taskData.put("UDAQDJRWID",UDAQDJRWID);//主表ID
                taskData.put("UDAQDJRWNUM",UDAQDJRWNUM);//任务单号
                taskData.put("DESCRIPTION",DESCRIPTION);//任务描述
                taskData.put("ROUTE",ROUTE);//路线编号
                taskData.put("ROUTENAME",ROUTENAME);//路线名称
                taskData.put("DEPTNUM",DEPTNUM);//部门编号
                taskData.put("DEPTNAME",DEPTNAME);//部门描述
                taskData.put("XZR",XZR);//下载人
                taskData.put("XZRNAME",XZRNAME);//下载人名称
                taskData.put("STATUS",STATUS);//状态编号
                taskData.put("STATUSNAME",STATUSNAME);//状态描述
                taskData.put("RYZ",RYZ);//执行组编号
                taskData.put("RYZNAME",RYZNAME);//执行组描述
                taskData.put("RWHS",RWHS);//任务耗时
                taskDataArr.add(taskData);//加入数组中
                //-循环子表任务------------------------------------------------------------------------------------------------------
                MboSetRemote spotrunlineSet = MXServer.getMXServer().getMboSet("UDAQDJRWLINE",MXServer.getMXServer().getSystemUserInfo());
                spotrunlineSet.setWhere("parentid="+UDAQDJRWID+"");
                spotrunlineSet.reset();
                spotrunlineSet.setOrderBy("XH ASC");//升序
                if(spotrunlineSet!=null && !spotrunlineSet.isEmpty()){
                    JSONArray taskLineDataArr = new JSONArray();//放子表任务
                    for(int m=0;m<spotrunlineSet.count();m++){
                        JSONObject taskLineData = new JSONObject();//单个子表任务
                        MboRemote lineMbo = spotrunlineSet.getMbo(m);//每个子表对象
                        Integer UDAQDJRWLINEID = lineMbo.getInt("UDAQDJRWLINEID");//子表主键
                        Integer XH = lineMbo.getInt("XH");//点检项序号
                        Integer LOCATION = lineMbo.getInt("LOCATION");//位置编号
                        String JCXM = lineMbo.getString("JCXM");//检查项目-EN
                        String JCNR = lineMbo.getString("DESCRIPTION");//检查内容及要求-EN
                        String JCFS = lineMbo.getString("JCFS");//检查方式
                        Integer PL = lineMbo.getInt("PL");//频率
                        String PLDW = lineMbo.getString("PLDW");//单位
                        //-英文状态下-位置查询---------------------------------------------------------
                        Integer UDAQDJWZID = null;
                        String LOCATIONDESC = "";//设备名称
                        assetSet.setWhere("LOCATION='"+LOCATION+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");
                        assetSet.reset();
                        if(assetSet!=null && !assetSet.isEmpty()){
                            MboRemote mboDesc = assetSet.getMbo(0);
                            UDAQDJWZID = mboDesc.getInt("UDAQDJWZID");
                            LOCATIONDESC = mboDesc.getString("DESCRIPTION");
                        }
                        //-非英文状态下--位置和任务明细查询--------------------------------------------------------
                        if(!"EN".equalsIgnoreCase(LANGCODE)){
                            //位置
                            assetLangSet.setWhere(" OWNERID="+UDAQDJWZID+" and LANGCODE='"+LANGCODE+"'");
                            assetLangSet.reset();
                            if(assetLangSet!=null && !assetLangSet.isEmpty()){
                                MboRemote mboDesc = assetLangSet.getMbo(0);
                                LOCATIONDESC = mboDesc.getString("DESCRIPTION");//位置名称
                            }
                            //点检任务项的查询
                            spotrunlineLangSet.setWhere(" OWNERID="+UDAQDJRWLINEID+" and LANGCODE='"+LANGCODE+"'");
                            spotrunlineLangSet.reset();
                            if(spotrunlineLangSet!=null && !spotrunlineLangSet.isEmpty()){
                                MboRemote mboDesc = spotrunlineLangSet.getMbo(0);
                                JCXM = mboDesc.getString("JCXM");//检查项目
                                JCNR = mboDesc.getString("DESCRIPTION");//检查内容及要求
                                JCFS = mboDesc.getString("JCFS");//检查方式
                            }
                        }
                        taskLineData.put("UDAQDJRWID",UDAQDJRWID);//主表id
                        taskLineData.put("UDAQDJRWLINEID",UDAQDJRWLINEID);//子表id
                        taskLineData.put("UDAQDJRWNUM",UDAQDJRWNUM);//--任务单号
                        taskLineData.put("ORGID",ORGID);//组织
                        taskLineData.put("SITEID",SITEID);//地点
                        taskLineData.put("XH",XH);//点检任务序号
                        taskLineData.put("LOCATION",LOCATION);//位置编号
                        taskLineData.put("LOCATIONDESC",LOCATIONDESC);//位置名称
                        taskLineData.put("PL",PL);//频率
                        taskLineData.put("PLDW",PLDW);//频率单位
                        taskLineData.put("JCXM",JCXM);//检查项目
                        taskLineData.put("JCNR",JCNR);//检查内容及要求
                        taskLineData.put("JCFS",JCFS);//检查方式
                        taskLineDataArr.add(taskLineData);
                    }
                    taskData.put("taskline",taskLineDataArr);//一个主表任务对应多个点检项目
                }
                taskDataArr.add(taskData);//主表任务加入数组中
            }
            returnDate.put("errcode","200");
            returnDate.put("errmsg","success");
            returnDate.put("taskdata",taskDataArr);//返回任务
        }
        return returnDate;
    }

    /**
     * 任务上传
     * @param jsonArray
     */
    @POST
    @Path("/taskUpload")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject SaveData(JSONArray jsonArray) {
        //定义返回对象
        JSONObject returnDate = new JSONObject();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            //接收app数据
            if(jsonArray!=null && jsonArray.size()>0){
                //点检保养任务主表
                System.out.println("array="+jsonArray.toString());
                MboSetRemote mainSet = MXServer.getMXServer().getMboSet("UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
                //点检保养任务明细表
                MboSetRemote lineSet = MXServer.getMXServer().getMboSet("UDAQDJRWLINE",MXServer.getMXServer().getSystemUserInfo());
                List<Integer> mainList = new ArrayList<Integer>();
                for(int i=0;i<jsonArray.size();i++){
                    JSONObject obj = jsonArray.getJSONObject(i);
                    //-------------------
                    Integer UDAQDJRWID = obj.getInteger("UDAQDJRWID");//主表字
                    Integer UDAQDJRWLINEID = obj.getInteger("UDAQDJRWLINEID");//子表iD
                    String USERID = obj.getString("USERID");//实际执行人--登录人
                    String DJZT = obj.getString("DJZT");//点检任务明细状态-是否异常
                    if(DJZT==null || "".equals(DJZT) || "null".equals(DJZT) || "undefined".equalsIgnoreCase(DJZT)){
                        DJZT = "UNEXC"; //正常
                    }
                    String CLZ = obj.getString("CLZ");//子表-数值记录
                    String REMARKS = obj.getString("REMARKS");//子表-记录说明
                    String ACTDATEStr = obj.getString("ZXTIME");//实际执行时间
                    if(ACTDATEStr==null || "".equals(ACTDATEStr) || "null".equals(ACTDATEStr) || "undefined".equalsIgnoreCase(ACTDATEStr)){
                        ACTDATEStr = sdf.format(new Date());
                    }
                    Date ACTDATE = sdf.parse(ACTDATEStr);
                    //------------------
                    if(!mainList.contains(UDAQDJRWID)){
                        mainList.add(UDAQDJRWID);
                    }
                    //子表
                    lineSet.setWhere("UDAQDJRWLINEID="+UDAQDJRWLINEID+"");
                    lineSet.reset();
                    if(lineSet!=null && !lineSet.isEmpty()){
                        MboRemote lineMbo = lineSet.getMbo(0);
                        lineMbo.setValue("ZXTIME",ACTDATE,11L);
                        lineMbo.setValue("DJZT",DJZT,11L);
                        lineMbo.setValue("CLZ",CLZ,11L);
                        lineMbo.setValue("REMARKS",REMARKS,11L);
                        lineMbo.getThisMboSet().save();
                        //主表保存
                        mainSet.setWhere("UDAQDJRWID="+UDAQDJRWID+"");
                        mainSet.reset();
                        if(mainSet!=null && !mainSet.isEmpty()){
                            MboRemote mainMbo =  mainSet.getMbo(0);
                            mainMbo.setValue("STATUS","COMP",11L);
                            mainMbo.getThisMboSet().save();
                        }
                    }
                }
                //更新任务耗时--------------
                if(mainList!=null && mainList.size()>0) {
                    for (int i = 0; i < mainList.size(); i++) {
                        Integer UDAQDJRWID = mainList.get(i);//主表ID
                        //POINTEQUP 作为任务耗时记录
                        lineSet.setWhere("PARENTID="+UDAQDJRWID+" and ZXTIME is not null");
                        lineSet.setOrderBy(" ZXTIME ASC");
                        lineSet.reset();
                        MboRemote minMbo = lineSet.getMbo(0);
                        Date minACTDATE = null;
                        if(minMbo!=null){
                            minACTDATE =  minMbo.getDate("ZXTIME");
                        }
                        lineSet.clear();
                        lineSet.setOrderBy(" ZXTIME DESC");
                        lineSet.reset();
                        MboRemote maxMbo = lineSet.getMbo(0);
                        Date maxACTDATE = null;
                        if(maxMbo!=null){
                            maxACTDATE =  maxMbo.getDate("ZXTIME");
                        }
                        long totalMinutes= 0;
                        if(maxACTDATE!=null && minACTDATE!=null){
                            long timeDifferenceMillis = maxACTDATE.getTime() - minACTDATE.getTime();//比较差值
                            totalMinutes = timeDifferenceMillis / (1000 * 60);//转成分钟
                        }
                        String totalMinutesStr = String.valueOf(totalMinutes);
//                        System.out.println("minutes="+totalMinutes);
                        mainSet.setWhere("UDAQDJRWID="+UDAQDJRWID+"");
                        mainSet.reset();
                        if(mainSet!=null && !mainSet.isEmpty()){
                            MboRemote mainMbo =  mainSet.getMbo(0);
                            mainMbo.setValue("RWHS",totalMinutesStr,11L);//任务耗时
                            mainMbo.setValue("STATUS","COMP",11L);//任务状态
                            mainMbo.getThisMboSet().save();
                        }
                    }
                }
                //------------------------
            }
            returnDate.put("errcode","200");
            returnDate.put("errmsg","save success");
        }catch (Exception e){
            System.out.println("------faileMessage----->"+e.getMessage());
            returnDate.put("errcode","500");
            returnDate.put("errmsg","save failure");
        }finally {
            return returnDate;
        }
    }

    /**
     * app端清理内存
     */
    @POST
    @Path("/clearMemory")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject clearMemory(JSONObject jsonObject) throws Exception {
        JSONObject returnDate = new JSONObject();
        //接收参数----------------------
        Integer UDAQDJRWID = jsonObject.getInteger("UDAQDJRWID");//主表ID
        //接收参数---------------------
        if(UDAQDJRWID!=null){
            MboSetRemote mainSet = MXServer.getMXServer().getMboSet("UDAQDJRW",MXServer.getMXServer().getSystemUserInfo());
            mainSet.setWhere("UDAQDJRWID="+UDAQDJRWID+"");
            mainSet.reset();
            if(mainSet!=null && !mainSet.isEmpty()){
                MboRemote mbo = mainSet.getMbo(0);
                mbo.setValue("STATUS","EDIT",11L);
                mbo.setValue("XZR","",11L);//执行人置空
                mbo.getThisMboSet().save();
            }
            returnDate.put("errcode","200");
            returnDate.put("errmsg","success");
        }else{
            returnDate.put("errcode","201");
            returnDate.put("errmsg","UDAQDJRWID Lost");
            return returnDate;
        }
        return returnDate;
    }
}
