package psdi.app.iface.mobile;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import jnr.ffi.annotations.In;
import psdi.mbo.Mbo;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
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.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;

import static psdi.workflow.util.Resources.getInt;

/**
 * 领料单申请应用
 * createBy liuxq  2023-6-12
 */
@Path("/udlld")
public class UdLLDAppService {

    /**
     * 查看首页收件箱任务代办
     * @return
     */
    @POST
    @Path("/tobeDone")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public static com.alibaba.fastjson.JSONObject wfTaskAgent(JSONObject jsObject){
        com.alibaba.fastjson.JSONArray jsonArray = new JSONArray() ;
        com.alibaba.fastjson.JSONObject result = new com.alibaba.fastjson.JSONObject();
        com.alibaba.fastjson.JSONObject person = new com.alibaba.fastjson.JSONObject();
        String keyValue = "";
        try {
            keyValue = (String) jsObject.getString("USERID");//工号
            MboSetRemote wfAssign = MXServer.getMXServer().getMboSet("WFASSIGNMENT", MXServer.getMXServer().getSystemUserInfo());
            String sql="WFID != 0 and ASSIGNCODE='"+keyValue+"' and ASSIGNSTATUS='ACTIVE' ";
            wfAssign.setWhere(sql);
            wfAssign.reset();
            if(null!=wfAssign && !wfAssign.isEmpty()){
                for(int i=0;i<wfAssign.count();i++){
                    com.alibaba.fastjson.JSONObject jsonObject  = new JSONObject();
                    MboRemote wfAssignMbo=wfAssign.getMbo(i);
                    jsonObject.put("WFASSIGNMENTID", wfAssignMbo.getInt("WFASSIGNMENTID"));
                    jsonObject.put("ASSIGNID", wfAssignMbo.getInt("ASSIGNID"));
                    jsonObject.put("DESCRIPTION", wfAssignMbo.getString("DESCRIPTION"));
                    jsonObject.put("ASSIGNSTATUS", wfAssignMbo.getString("ASSIGNSTATUS"));
                    jsonObject.put("OWNERTABLE", wfAssignMbo.getString("OWNERTABLE"));
                    jsonObject.put("OWNERID", wfAssignMbo.getInt("OWNERID"));
                    jsonObject.put("ASSIGNCODE", wfAssignMbo.getString("ASSIGNCODE"));
                    jsonObject.put("APP", wfAssignMbo.getString("APP"));
                    jsonArray.add(jsonObject);
                }
                person.put("Task",jsonArray);
                result.put("keyValue", keyValue);
                person.put("errcode","200");
                person.put("errmsg","success");
                return person;
            }else{
                result.put("errcode", "300");
                result.put("errmsg","No Upcoming Task");
                result.put("keyValue", keyValue);
            }
        }catch (Exception e){
            result.put("errcode", "500");
            result.put("keyValue", keyValue);
            result.put("errmsg",e.getMessage());
        }
        return result;
    }

    /**
     * 流程调用
     * 启动流程
     */
    @POST
    @Path("/startWF")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject startWF(JSONObject jsonObject) {
        JSONObject returnDate = new JSONObject();
        //传参
        String processname ="" ;//工作流程名
        String mbo ="" ;//表名
        String key ="" ;//表ID
        String keyValue ="" ;//表ID值
        String LANGCODE = "";//语言环境
        try{
            LANGCODE = jsonObject.getString("LANGCODE");
            String APPNAME = (String) jsonObject.getString("APPNAME");
            String zxStr = jsonObject.getString("ZX")==null?"1":jsonObject.getString("ZX");
            int zx = Integer.parseInt(zxStr);//正向 1  反向(驳回) 0
            String loginid = (String) jsonObject.getString("USERID"); //登录人编号
            String desc = (String) jsonObject.getString("DESC"); //
            keyValue = String.valueOf(jsonObject.getInteger("OBJID")); //主表id值
            processname ="UDLLD" ; //去工作流设计器中查看processaname字段
            mbo ="UDLLD";
            key ="UDLLDID";
            boolean isActive=WorkFlowUtil.isWFActive(mbo,keyValue);
            String result ="";
            if(!isActive){
                result=WorkFlowUtil.startWF(processname,mbo,keyValue,key,loginid); //启动流程
            }else{
                //测试
//                zx=1;
//                desc="sss";
//                loginid="0110994";
                result = WorkFlowUtil.wfGoOn(processname,mbo,keyValue,key,zx,desc,loginid); //审批流程
            }
            JSONObject resObj = (JSONObject) JSONObject.parse(result);
            String code = resObj.getString("code");
            if(resObj!=null && code !=null && !"".equals(code)){
                if("20001".equals(code)){
                    returnDate.put("errcode","201");
//                    returnDate.put("errmsg","start workflow failure,Please Contact Admin");//你不是当前审批人
                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","person","errmsg",LANGCODE));
                }else if("10000".equals(code)){
                    returnDate.put("errcode","200");
//                    returnDate.put("errmsg","start workflow success");
                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowStart","success","errmsg",LANGCODE));
                }
            }
        }catch (Exception e){
            System.out.println("------------failureMessage="+e.getMessage());
            returnDate.put("errcode","500");
//            returnDate.put("errmsg","start workflow failure,Please Contact Admin");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowStart","failure","errmsg",LANGCODE));
        }finally {
            return returnDate;
        }
    }

    /**
     * 流程调用
     * 流程审批
     */
    @POST
    @Path("/approveWF")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject approveWF(JSONObject jsonObject) {
        JSONObject returnDate = new JSONObject();
        //传参
        String processname ="" ;//工作流程名
        String mbo ="" ;//表名
        String key ="" ;//表ID
        String keyValue ="" ;//表ID值
        int zx ; //1同意，0驳回
        String desc = "";//审批意见
        String loginid = "";//登录人
        String LANGCODE = "";//语言环境
        try{
            LANGCODE = jsonObject.getString("LANGCODE");
            String APPNAME = (String) jsonObject.getString("APPNAME");
            keyValue = String.valueOf(jsonObject.getInteger("OBJID")); //主表id值
            loginid = (String) jsonObject.getString("USERID"); //登录人编号
            zx = Integer.parseInt(jsonObject.getString("ZX"));
            desc = (String) jsonObject.getString("DESC"); //
            processname ="UDLLD" ;
            mbo ="UDLLD";
            key ="UDLLDID";
            String result = WorkFlowUtil.wfGoOn(processname,mbo,keyValue,key,zx,desc,loginid); //审批流程
            JSONObject resObj = (JSONObject) JSONObject.parse(result);
            String code = resObj.getString("code");
            if(resObj!=null && code !=null && !"".equals(code)){
                MboSetRemote udLLDSet = MXServer.getMXServer().getMboSet("UDLLD",MXServer.getMXServer().getSystemUserInfo());
                udLLDSet.setWhere(" UDLLDID="+keyValue+"");//int 类型
                udLLDSet.reset();
                if("10000".equals(code)){//流程成功
                    if(udLLDSet!=null && !udLLDSet.isEmpty()){
                        MboRemote udlldMbo = udLLDSet.getMbo(0);
                        String spmsReturn = udlldMbo.getString("SPMSRETURN");//spms返回值
                        String SPMSSTATUS = udlldMbo.getString("SPMSSTAUTS");//spms状态
                        String STATUS = udlldMbo.getString("STATUS");//流程状态
                        if(1==zx){//正向
                            if("SPMSSFA".equalsIgnoreCase(STATUS)){
                                if("TOSPMSFAIL".equalsIgnoreCase(SPMSSTATUS)){
                                    //提交失败
                                    JSONObject spmsReturnJson = JSONObject.parseObject(spmsReturn);
                                    JSONObject RESPONSE = (JSONObject) spmsReturnJson.get("RESPONSE");
                                    if(RESPONSE!=null){
                                        JSONObject RETURN_DATA = (JSONObject) RESPONSE.get("RETURN_DATA");
                                        if(RETURN_DATA!=null){
                                            String codes = RETURN_DATA.getString("code");
                                            String msg = RETURN_DATA.getString("msg");
                                            returnDate.put("errcode","202");
//                                            returnDate.put("errmsg",msg);
                                            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE)+"-"+msg);//流程审批成失败
                                        }else{
                                            returnDate.put("errcode","202");
//                                            returnDate.put("errmsg","Submit SPMS Fail");
                                            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE));//流程审批成失败
                                        }
                                    }else{
                                        returnDate.put("errcode","202");
//                                        returnDate.put("errmsg","Submit SPMS Fail");
                                        returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE));//流程审批成失败
                                    }
                                }
                            }else {
                                returnDate.put("errcode","200");
//                                returnDate.put("errmsg","submit sucess");//提交成功
                                returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","success","errmsg",LANGCODE));
                            }
                        }else{
                            returnDate.put("errcode","200");
//                            returnDate.put("errmsg","reject sucess");//驳回成功
                            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowReject","success","errmsg",LANGCODE));
                        }
                    }
                }else if("20001".equals(code)){//流程失败
                    if(udLLDSet!=null && !udLLDSet.isEmpty()){
                        MboRemote udlldMbo = udLLDSet.getMbo(0);
                        String spmsReturn = udlldMbo.getString("SPMSRETURN");
                        String SPMSSTATUS = udlldMbo.getString("SPMSSTAUTS");
                        if("TOSPMSFAIL".equalsIgnoreCase(SPMSSTATUS)){
                            //提交失败
                            JSONObject spmsReturnJson = JSONObject.parseObject(spmsReturn);
                            JSONObject RESPONSE = (JSONObject) spmsReturnJson.get("RESPONSE");
                            if(RESPONSE!=null){
                                JSONObject RETURN_DATA = (JSONObject) RESPONSE.get("RETURN_DATA");
                                if(RETURN_DATA!=null){
                                    String codes = RETURN_DATA.getString("code");
                                    String msg = RETURN_DATA.getString("msg");
                                    returnDate.put("errcode","202");
//                                    returnDate.put("errmsg",msg);
                                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE)+"-"+msg);//流程审批成失败
                                }else{
                                    returnDate.put("errcode","202");
//                                    returnDate.put("errmsg","Submit SPMS Fail");
                                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE));//流程审批成失败
                                }
                            }else{
                                returnDate.put("errcode","202");
//                                returnDate.put("errmsg","Submit SPMS Fail");
                                returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE));//流程审批成失败
                            }
                        }else{
                            returnDate.put("errcode","500");
//                            returnDate.put("errmsg","You are not the current process task assignor");
                            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","person","errmsg",LANGCODE));//你不是当前节点审批人
                        }
                    }
                }else if("20002".equals(code)){
                    returnDate.put("errcode","500");
//                    returnDate.put("errmsg","approve workflow failure,Please Contact Admin");
                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE));//流程审批成失败
                }
            }

        }catch (Exception e){
            System.out.println("------------failureMessage="+e.getMessage());
            returnDate.put("errcode","500");
//            returnDate.put("errmsg","approve workflow failure,Please Contact Admin");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","failure","errmsg",LANGCODE));//流程审批成失败
        }finally {
            return returnDate;
        }
    }
    /**
     * 流程调用
     * 流程审批人
     */
    @POST
    @Path("/WFAssignMent")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject wFAssignMent(JSONObject jsonObject) {
        JSONObject returnDate = new JSONObject();
        //传参
        String key ="" ;//表ID
        String keyValue ="" ;//表ID值
        String LANGCODE = "";//语音环境
        try{
            LANGCODE = jsonObject.getString("LANGCODE");
            String APPNAME = (String) jsonObject.getString("APPNAME");
            keyValue = String.valueOf(jsonObject.getInteger("OBJID")); //主表id值
            key ="UDLLD"; //这里传表名
            JSONObject resObj = WorkFlowUtil.wfAssignMent(keyValue,key); //获取流程审批人
            String code = resObj.getString("code");
            if(resObj!=null && code !=null && !"".equals(code)){
                if("20001".equals(code)){
                    returnDate.put("errcode","201");
//                    returnDate.put("errmsg","No to-do tasks");
                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprove","nextPerson","errmsg",LANGCODE));
                }else if("10000".equals(code)){
//                    returnDate.put("result",resObj);
                    returnDate.put("errcode","200");
//                    returnDate.put("errmsg","view success");
                    returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprovePerson","success","errmsg",LANGCODE));
                    returnDate.put("result",resObj.getJSONArray("person"));
                }
            }
        }catch (Exception e){
            System.out.println("------------failureMessage="+e.getMessage());
            returnDate.put("errcode","500");
//            returnDate.put("errmsg","view failure");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("flowApprovePerson","failure","errmsg",LANGCODE));
        }finally {
            return returnDate;
        }
    }


    /**
     * 数据保存接口
     * @param received
     * @return
     */
    @POST
    @Path("/saveData")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject SaveData(String received) {
        //定义返回对象
        JSONObject returnDate = new JSONObject();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String LANGCODE = "";//语言环境
        try {
            //接收app数据
            JSONObject jsonObject = JSONObject.parseObject(received);
            LANGCODE = jsonObject.getString("LANGCODE");
            Integer UDLLDID = jsonObject.getInteger("UDLLDID");//表ID
            String ORGID = jsonObject.getString("ORGID");//组织
            String SITEID = jsonObject.getString("SITEID");//地点
            String WONUM = jsonObject.getString("WONUM");//领料申请单号
            String DESCRIPTION = jsonObject.getString("DESCRIPTION");//领料申请单描述- EAM+人员名称+时间
            String LOCNUM = jsonObject.getString("LOCNUM");//仓库
            String KOSTL = jsonObject.getString("KOSTL");//成本中心
            String SJYDTYPE = jsonObject.getString("SJYDTYPE");//移动类型
            String workshop = jsonObject.getString("WORKSHOP"); //车间编码
            //1-如果移动类型是Z57，则成本中心必须是基建工程部，从根据成本中心移动类型表进行判断
            if("Z57".equalsIgnoreCase(SJYDTYPE)){
                MboSetRemote udcostmoveSet = MXServer.getMXServer().getMboSet("UDCOSTMOVE",MXServer.getMXServer().getSystemUserInfo());//成本中心移动类型映射表
                udcostmoveSet.setWhere(" WERKS='"+SITEID+"' and BWART='"+SJYDTYPE+"' and KOSTL='"+KOSTL+"'");
                udcostmoveSet.reset();
                if(udcostmoveSet!=null && !udcostmoveSet.isEmpty()){
                    //存在
                }else{
                    returnDate.put("errcode","500");
                    returnDate.put("errmsg","Canot Save,Cost Center(Z57) and Movement Type Donot Match");
                    return returnDate;
                }
            }
            //2-移动类型是Z57需要传内部订单号
            String AUFNR = jsonObject.getString("AUFNR");//内部订单号
            String REMARKS = jsonObject.getString("REMARKS");//备注
            String STATUS = jsonObject.getString("STATUS");//状态
            String CREATEBY = jsonObject.getString("CREATEBY");//创建人
            String CREATEDATEStr = jsonObject.getString("CREATEDATE");//创建时间---北京时间
            if(CREATEDATEStr==null || "".equals(CREATEDATEStr) || "null".equals(CREATEDATEStr) || "undefined".equalsIgnoreCase(CREATEDATEStr)){
                CREATEDATEStr = sdf.format(new Date());
            }
            Date CREATEDATE = sdf.parse(CREATEDATEStr);
//            Date STATUSDATE = sdf.parse(CREATEDATEStr);//状态时间
            String WOAPPNAME = jsonObject.getString("WOAPPNAME");//应用程序名
            String WORKORDER = jsonObject.getString("WORKORDER");//工单编号
            //获取部门及部门主管
            String DEPARTMENT = "";
            MboSetRemote personSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());
            personSet.setWhere(" personid='"+CREATEBY+"'");
            personSet.reset();
            if(personSet!=null && !personSet.isEmpty()){
                MboRemote personMbo =  personSet.getMbo(0);
                DEPARTMENT = personMbo.getString("DEPARTMENT");//部门
            }
            //工单相关信息
            //从领料单选择工单号后，需要将原领料单的“车间、车间主管、成本中心”换成工单中的，不是根据登录人获取的。
            Integer UDWORKORDERID = null;
            if(WORKORDER!=null && !"".equals(WORKORDER)) {
                MboSetRemote udWorkOrderSet = MXServer.getMXServer().getMboSet("UDWORKORDER", MXServer.getMXServer().getSystemUserInfo());
                udWorkOrderSet.setWhere(" WONUM='" + WORKORDER + "' and orgid='"+ORGID+"' and SITEID='"+SITEID+"'");//int 类型
                udWorkOrderSet.reset();
                if (udWorkOrderSet != null && !udWorkOrderSet.isEmpty()) {
                    MboRemote udworkorderMbo = udWorkOrderSet.getMbo(0);
                    UDWORKORDERID = udworkorderMbo.getInt("UDWORKORDERID");
                    String ASSETNUM = udworkorderMbo.getString("ASSETNUM");//日常维修工单-资产
                    KOSTL = udworkorderMbo.getString("KOSTL");//日常维修工单-成本中心
                    //查询资产表
                    MboSetRemote assetSet = MXServer.getMXServer().getMboSet("ASSET",MXServer.getMXServer().getSystemUserInfo());
                    assetSet.setWhere(" ASSETNUM='"+ASSETNUM+"'");
                    assetSet.reset();
                    if(assetSet!=null && !assetSet.isEmpty()){
                        MboRemote assetMbo = assetSet.getMbo(0);
                        DEPARTMENT = assetMbo.getString("SDSYBM");//资产对应的使用部门
                    }
                }
            }
            //主管
            String DIRECTOR = "";
            if(DEPARTMENT!=null && !"".equals(DEPARTMENT)){
                MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());
                deptSet.setWhere(" DEPTNUM='"+DEPARTMENT+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");
                MboRemote deptMbo =  deptSet.getMbo(0);
                if(deptMbo!=null){
                    DIRECTOR = deptMbo.getString("DIRECTOR");//部门主管
                }
            }

            MboSetRemote UDLLDSet = MXServer.getMXServer().getMboSet("UDLLD",MXServer.getMXServer().getSystemUserInfo());
            UDLLDSet.setWhere(" UDLLDID="+UDLLDID+"");
            UDLLDSet.reset();
            MboRemote mbo = null;
            if(UDLLDSet!=null && !UDLLDSet.isEmpty()){
                //编辑
                mbo = UDLLDSet.getMbo(0);
            }else{
                //新增
                mbo = UDLLDSet.add();
                UDLLDID = mbo.getInt("UDLLDID");
                WONUM = "EAM"+ UDLLDID;//领料单编号
                STATUS = "EDIT";
                mbo.setValue("CREATEDATE",CREATEDATE,2L);
                mbo.setValue("STATUSDATE",CREATEDATE,2L);
            }
            //--------森大组织下面贸易公司，都用车辆领料申请单应用----------
            if("SUNDA".equalsIgnoreCase(ORGID)){
                mbo.setValue("APPNAME","UDCLLLD",2L);//APP应用名称
            }else{
                mbo.setValue("APPNAME","UDLLD",2L);//APP应用名称
            }
            //-----------------------------------------------------------
            mbo.setValue("WONUM",WONUM,2L);
            mbo.setValue("DESCRIPTION",DESCRIPTION,2L);
            mbo.setValue("LOCNUM",LOCNUM,2L);
            mbo.setValue("KOSTL",KOSTL,2L);
            mbo.setValue("SJYDTYPE",SJYDTYPE,2L);
            mbo.setValue("AUFNR",AUFNR,2L);
            mbo.setValue("WOAPPNAME",WOAPPNAME,2L);
            mbo.setValue("WORKORDER",WORKORDER,11L);//2L保存不上，需要改为11L跳过验证
            if(UDWORKORDERID!=null){
               mbo.setValue("UDWORKORDERID",UDWORKORDERID,2L);
            }
            mbo.setValue("REMARKS",REMARKS,2L);
            mbo.setValue("STATUS",STATUS,2L);
            mbo.setValue("CREATEBY",CREATEBY,2L);
            mbo.setValue("ORGID",ORGID,2L);
            mbo.setValue("SITEID",SITEID,2L);
            //mbo.setValue("WORKSHOP",DEPARTMENT,2L);//old--aw
            mbo.setValue("WORKSHOP",workshop,2L); //2024-12-03--az
            mbo.setValue("UDZGR",DIRECTOR,2L);
            //保存
            mbo.getThisMboSet().save(11L);
            returnDate.put("UDLLDID",UDLLDID);//返回前端刷新页面
            returnDate.put("errcode","200");
//          returnDate.put("errmsg","save success");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("save","success","errmsg",LANGCODE));
        }catch (Exception e){
            System.out.println("------faileMessage----->"+e.getMessage());
            returnDate.put("errcode","500");
//          returnDate.put("errmsg","save failure, "+e.getMessage());
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("save","failure","errmsg",LANGCODE));
        }finally {
            return returnDate;
        }
    }

    /**
     * 主表数据删除 接口
     * @param received
     * @return
     */
    @POST
    @Path("/deleteData")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject DeleteData(String received) {
        //定义返回对象
        JSONObject returnDate = new JSONObject();
        String LANGCODE = "";//语言环境
        try {
            //接收app数据
            JSONObject jsonObject = JSONObject.parseObject(received);
            LANGCODE = jsonObject.getString("LANGCODE");
            Integer UDLLDID = jsonObject.getInteger("UDLLDID");//主表ID
            MboSetRemote UDREPORTSet = MXServer.getMXServer().getMboSet("UDLLD",MXServer.getMXServer().getSystemUserInfo());
            UDREPORTSet.setWhere(" UDLLDID="+UDLLDID+"");
            UDREPORTSet.reset();
            MboRemote mbo = UDREPORTSet.getMbo(0);//
            mbo.delete();//相当于delete语句，结束后，还得保存
            mbo.getThisMboSet().save();

            //删除子表数据
            MboSetRemote UDLLDLINESet = MXServer.getMXServer().getMboSet("UDLLDLINE",MXServer.getMXServer().getSystemUserInfo());
            UDLLDLINESet.setWhere(" parentid="+UDLLDID+"");//int 类型
            UDLLDLINESet.reset();
            UDLLDLINESet.deleteAll();
            UDLLDLINESet.save();

            returnDate.put("errcode","200");
//          returnDate.put("errmsg","delete success");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("delete","success","errmsg",LANGCODE));
        }catch (Exception e){
            System.out.println("------faileMessage----->"+e.getMessage());
            returnDate.put("errcode","500");
//          returnDate.put("errmsg","delete failure");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("delete","failure","errmsg",LANGCODE));
        }finally {
            return returnDate;
        }
    }

    /**
     * 获取领料单移动类型数据
     * @param received
     * @return
     */
    @POST
    @Path("/getLldYdle")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject getLldYdle(String received) {
        //定义返回对象
        JSONObject returnDate = new JSONObject();
        String str="";
        try {
            if("".equalsIgnoreCase(received) || null==received){
                str="参数不能为空";
                returnDate.put("code", "500");
                returnDate.put("errmsg",str);
                return returnDate;
            }

            //接收app数据
            JSONObject jsonObject = JSONObject.parseObject(received);
            String KOSTL = jsonObject.getString("KOSTL");
            String userid = jsonObject.getString("USERID"); //2024-12-05 az
            if("".equalsIgnoreCase(KOSTL) || null==KOSTL){
                str="KOSTL参数不能为空";
                returnDate.put("code", "500");
                returnDate.put("errmsg", str);
                return returnDate;
            }
            String SITEID = jsonObject.getString("SITEID");//地点
            if("".equalsIgnoreCase(SITEID) || null==SITEID){
                str="SITEID参数不能为空";
                returnDate.put("code", "500");
                returnDate.put("errmsg", str);
                return returnDate;
            }
            if("".equalsIgnoreCase(userid) || null==userid){
                str="USERID参数不能为空";
                returnDate.put("code", "500");
                returnDate.put("errmsg", str);
                return returnDate;
            }
            MboSetRemote UDSITEYDLXSET = MXServer.getMXServer().getMboSet("UDSITEYDLX",MXServer.getMXServer().getSystemUserInfo());
            String sql=" UDSITEYDLXID IN( SELECT y.UDSITEYDLXID FROM UDCOSTMOVE m right join UDSITEYDLX y on m.siteid=y.siteid and m.BWART=y.ydlx " +
                    "where y.CXYDLX is NULL AND m.SITEID='"+SITEID+"' AND m.KOSTL='"+KOSTL+"' ) ";
            //String sql=" SITEID='"+SITEID+"'";
            UDSITEYDLXSET.setWhere(sql);
            UDSITEYDLXSET.reset();
            MboSetRemote maxgroup = MXServer.getMXServer().getMboSet("MAXGROUP", MXServer.getMXServer().getSystemUserInfo());
            maxgroup.setWhere("1=2");
            maxgroup.reset();
            if(UDSITEYDLXSET!=null && !UDSITEYDLXSET.isEmpty()){
                JSONArray jsonArray = new JSONArray() ;
                for (int i=0;i<UDSITEYDLXSET.count();i++) {
                    //net.sf.json.JSONObject jsonObject1  = new net.sf.json.JSONObject();
                    MboRemote udydlxMbo=UDSITEYDLXSET.getMbo(i);
                    MboSetRemote udsiteydlxline = udydlxMbo.getMboSet("UDSITEYDLXLINE"); //明细行
                    if(udsiteydlxline.count()>0){
                        int counted = udsiteydlxline.count();
                        for(int j=0;j<counted;j++){
                            net.sf.json.JSONObject jsonObject1  = new net.sf.json.JSONObject();
                            MboRemote udsiteydlxlineMbo = udsiteydlxline.getMbo(j); //明细行数据
                            maxgroup.setWhere(" GROUPNAME='"+udsiteydlxlineMbo.getString("GROUPNAME")+"'");
                            maxgroup.reset();
                            if(maxgroup.count()>0){ //表示该组存在了
                                MboSetRemote groupuser = maxgroup.getMbo(0).getMboSet("GROUPUSER"); //安全组的用户
                                groupuser.setWhere(" USERID='"+userid+"'");
                                groupuser.reset();
                                if(!groupuser.isEmpty()){
                                    jsonObject1.put("YDLX", udydlxMbo.getString("YDLX"));
                                    jsonObject1.put("YDLXZH", udydlxMbo.getString("YDLXZH"));
                                    jsonObject1.put("YDLXEN", udydlxMbo.getString("YDLXEN"));
                                    jsonObject1.put("YDLXFR", udydlxMbo.getString("YDLXFR"));
                                    if (!jsonArray.contains(jsonObject1)) {
                                        jsonArray.add(jsonObject1);
                                    }
                                }
                                groupuser.close();
                            }
                        }
                    }
                    udsiteydlxline.close();
                }
                UDSITEYDLXSET.close();
                maxgroup.close();
                returnDate.put("errcode","200");
                returnDate.put("errmsg","success");
                returnDate.put("jsonArray",jsonArray);
                return returnDate;
            }else{
                str="入参无查询结果";
                UDSITEYDLXSET.close();
                maxgroup.close();
                returnDate.put("errcode","500");
                returnDate.put("errmsg",str);
                return returnDate;
            }
        }catch (Exception e){
            str=e.getMessage();
            returnDate.put("errcode","500");
            returnDate.put("errmsg",str);
            return returnDate;
        }
    }




    /**
     * 子表数据保存-接口
     * @param received
     * @return
     */
    @POST
    @Path("/saveLineData")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject saveLineData(String received) {
        //定义返回对象
        JSONObject returnDate = new JSONObject();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String LANGCODE = "";//语言环境
        try {
            //接收app数据
            JSONObject jsonObject = JSONObject.parseObject(received);
            LANGCODE = jsonObject.getString("LANGCODE");
            Integer UDLLDLINEID = jsonObject.getInteger("UDLLDLINEID");//表ID
            Integer PARENTID = jsonObject.getInteger("PARENTID");//父级ID
            Integer LINENUM = jsonObject.getInteger("LINENUM");//行号
            String ITEMNUM = jsonObject.getString("ITEMNUM");//物料
            String UDKCID = jsonObject.getString("UDKCID");//库存表ID
            String BINNUM = jsonObject.getString("BINNUM");//物料的库位-----仓库中存在一个编码对应多个库位，因此存放的时候需要把物料编号和库位都存起来，这样才能保证查询的时候是唯一的。

            String ORDERQTYStr = jsonObject.getString("ORDERQTY");//申请数量
            ORDERQTYStr = (ORDERQTYStr==null || "".equals(ORDERQTYStr))?"0":ORDERQTYStr;
            Double ORDERQTY = Double.parseDouble(ORDERQTYStr);
            String ORDERUNIT = jsonObject.getString("ORDERUNIT");//申请单位

            String SJYDTYPE = jsonObject.getString("SJYDTYPE");//移动类型---从主表上带过来
            String AUFNR = jsonObject.getString("AUFNR");//内部订单号--从主表带过来
            String REMARKS = jsonObject.getString("REMARKS");//备注
            String ORGID = jsonObject.getString("ORGID");//组织
            String SITEID = jsonObject.getString("SITEID");//地点

            MboSetRemote UDMaterSet = MXServer.getMXServer().getMboSet("UDLLDLINE",MXServer.getMXServer().getSystemUserInfo());
            UDMaterSet.setWhere(" UDLLDLINEID="+UDLLDLINEID+"");//int 类型
            UDMaterSet.reset();
            MboRemote mbo = null;
            if(UDMaterSet!=null && !UDMaterSet.isEmpty()){
                //编辑
                mbo = UDMaterSet.getMbo(0);
            }else{
                //新增
                mbo = UDMaterSet.add();
                UDLLDLINEID = mbo.getInt("UDLLDLINEID");
            }
            mbo.setValue("PARENTID",PARENTID,11L);//
            mbo.setValue("ORGID",ORGID,11L);
            mbo.setValue("SITEID",SITEID,11L);
            mbo.setValue("LINENUM",LINENUM,11L);
            mbo.setValue("ITEMNUM",ITEMNUM,11L);
            mbo.setValue("UDKCID",UDKCID,11L);
            mbo.setValue("BINNUM",BINNUM,11L);//
            mbo.setValue("ORDERQTY",ORDERQTY,11L);
            mbo.setValue("ORDERUNIT",ORDERUNIT,11L);
            mbo.setValue("SJYDTYPE",SJYDTYPE,11L);
            mbo.setValue("AUFNR",AUFNR,11L);
            mbo.setValue("REMARKS",REMARKS,11L);
            //保存
            mbo.getThisMboSet().save(11L);
            returnDate.put("UDLLDLINEID",UDLLDLINEID);//返回前端刷新页面
            returnDate.put("errcode","200");
//          returnDate.put("errmsg","save success");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("save","success","errmsg",LANGCODE));
        }catch (Exception e){
            System.out.println("------faileMessage----->"+e.getMessage());
            returnDate.put("errcode","500");
//          returnDate.put("errmsg","save failure,"+e.getMessage());
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("save","failure","errmsg",LANGCODE));
        }finally {
            return returnDate;
        }
    }

    /**
     * 子表删除 - 接口
     * @param received
     * @return
     */
    @POST
    @Path("/deleteLineData")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject deleteLineData(String received) {
        //定义返回对象
        JSONObject returnDate = new JSONObject();
        String LANGCODE = "";//语言环境
        try {
            //接收app数据
            JSONObject jsonObject = JSONObject.parseObject(received);
            LANGCODE = jsonObject.getString("LANGCODE");
            Integer UDLLDLINEID = jsonObject.getInteger("UDLLDLINEID");//子表ID
            MboSetRemote UDLLDLINESet = MXServer.getMXServer().getMboSet("UDLLDLINE",MXServer.getMXServer().getSystemUserInfo());
            UDLLDLINESet.setWhere(" UDLLDLINEID="+UDLLDLINEID+"");//int 类型
            UDLLDLINESet.reset();
            MboRemote mbo = UDLLDLINESet.getMbo(0);//
            mbo.delete();//相当于delete语句，结束后，还得保存
            mbo.getThisMboSet().save();
            returnDate.put("errcode","200");
//          returnDate.put("errmsg","delete success");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("delete","success","errmsg",LANGCODE));
        }catch (Exception e){
            System.out.println("------faileMessage----->"+e.getMessage());
            returnDate.put("errcode","500");
//          returnDate.put("errmsg","delete failure");
            returnDate.put("errmsg",new AMobileConfig().getTipByLang("delete","failure","errmsg",LANGCODE));
        }finally {
            return returnDate;
        }
    }
}
