package psdi.app.iface.gfss;

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.MXApplicationException;
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.rmi.RemoteException;

/**
 * 数据方向 EAM-->FSSC
 * 请求方式： FSSC-->EAM
 * @author liuxingqiang
 * ESB注册的接口函数：Z_GFSS_ASSETNO_TO_EAM
 */
@Path("/retureInfo")
public class Eam2GfssService {
    /**
     *  财务共享系统返回信息，更新EAM
     */
    @POST
    @Path("/updateInfo")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public JSONObject FSSC_TO_EAM_ASSET_RETURN_INFO(String received) throws RemoteException, MXException {
        MboSetRemote ASSETSet = MXServer.getMXServer().getMboSet("ASSET", MXServer.getMXServer().getSystemUserInfo());//设备台账
        MboSetRemote UDBUDGETTASKSet = MXServer.getMXServer().getMboSet("UDBUDGETTASK", MXServer.getMXServer().getSystemUserInfo());//任务管理
        MboSetRemote UDTRANSFERSet = MXServer.getMXServer().getMboSet("UDTRANSFER", MXServer.getMXServer().getSystemUserInfo());//资产修改
        JSONObject returnDate = new JSONObject();
        try{
            JSONObject returnJs = JSONObject.parseObject(received);
            //JSONObject returnJs = returnJs1.getJSONObject("REQUEST").getJSONObject("REQUEST_DATA").getJSONObject("SendData");
            //主信息
            String FSSCNUM = returnJs.getString("BUSINESS_ID");//财务共享单号
            String TASKNUM = returnJs.getString("SOURCE_DOC_NUMBER");//EAM单号
            String OP_TIME = returnJs.getString("OP_TIME");//状态日期
            String STATUS = returnJs.getString("STATUS");//状态
            System.out.println("--------tasknum="+TASKNUM+"------STATUS="+STATUS);
            //判断是FA,FB,FC单
            if(FSSCNUM.contains("FC")){
                //FC-资产修改
                String BUSTYPE2 = "";//业务类型（AA00501 资产封停；AA00502 资产启用；AA00801 同工厂不同部门间转移）
                UDTRANSFERSet.setWhere("TRANSFERNUM='"+TASKNUM+"'");
                UDTRANSFERSet.reset();
                MboRemote udtransferMbo = null;
                if(UDTRANSFERSet!=null && !UDTRANSFERSet.isEmpty()){
                    udtransferMbo = UDTRANSFERSet.getMbo(0);//主表
                    BUSTYPE2 = udtransferMbo.getString("BUSTYPE2");
                    udtransferMbo.setValue("STATUS",STATUS,2L);
                    udtransferMbo.getThisMboSet().save(2L);//跳过
                }
                if(udtransferMbo!=null ){
                    MboSetRemote lineSet = udtransferMbo.getMboSet("UDTRANSFERLINEGX");//通过关系名获取子表数据
                    if(lineSet!=null && !lineSet.isEmpty()){
                        for(int i=0;i<lineSet.getSize();i++){
                            MboRemote mbo = lineSet.getMbo(i);
                            String RESPONSI_COST_CENTER = mbo.getString("RESPONSI_COST_CENTER");//调入成本中心
                            String SDSYBM = mbo.getString("SDSYBM");//调入使用部门
                            String SDWXBM = mbo.getString("SDWXBM");//调入维修部门
                            String ASSETNUM = mbo.getString("ASSETNUM");//设备编号
                            if(ASSETNUM!=null && !"".equalsIgnoreCase(ASSETNUM)){
                                ASSETSet.setWhere("ASSETNUM='"+ASSETNUM+"'");
                                ASSETSet.reset();
                                if(ASSETSet!=null && !ASSETSet.isEmpty()){
                                    MboRemote assetMbo = ASSETSet.getMbo(0);
                                    //对应设备运行状态
                                    String USESTATUS = "";//设备使用状态
                                    if("AA00501".equalsIgnoreCase(BUSTYPE2)){
                                        USESTATUS = "Spare";//封停--备用
                                    }else if("AA00502".equalsIgnoreCase(BUSTYPE2)){
                                        USESTATUS = "Running";//启用--运行
                                    }else if("AA00801".equalsIgnoreCase(BUSTYPE2)){
                                        //设备的位置，使用部门，维修部门，执行组都会有变化；解决方案：需要在资产修改子表新增：使用部门和维修部门。其它位置，执行组不动，出现问题手动修改
                                        USESTATUS = "Running";
                                        assetMbo.setValue("COSTCENTER",RESPONSI_COST_CENTER,2L);//成本中心
                                        assetMbo.setValue("SDSYBM",SDSYBM,2L);//使用部门
                                        assetMbo.setValue("SDWXBM",SDWXBM,2L);//维修部门
                                    }
                                    assetMbo.setValue("USESTATUS",USESTATUS,2L);
                                    assetMbo.getThisMboSet().save(11L);
                                }
                            }
                        }
                    }
                }
                returnDate.put("code", "S");
                returnDate.put("errmsg", "success");
            }else{
                //FA,FB
                UDBUDGETTASKSet.setWhere("TASKNUM='"+TASKNUM+"'");
                UDBUDGETTASKSet.reset();
                if(UDBUDGETTASKSet!=null && !UDBUDGETTASKSet.isEmpty()){
                    MboRemote udbudgetTaskMbo = UDBUDGETTASKSet.getMbo(0);
//                udbudgetTaskMbo.setValue("FSSCNUM",FSSCNUM,2L);
                    udbudgetTaskMbo.setValue("STATUS",STATUS,2L);
                    udbudgetTaskMbo.getThisMboSet().save(2L);//跳过
                    System.out.println("--------tasknum="+TASKNUM+"------STATUS="+STATUS+"------SAVE SUCCESS");
                }
                //子信息
                JSONArray detailsArray = returnJs.getJSONArray("details");
                if(detailsArray!=null && !detailsArray.isEmpty()){
                    for(int i=0;i<detailsArray.size();i++){
                        JSONObject obj = (JSONObject) detailsArray.get(i);
                        String ASSETNUM = obj.getString("EQU_NO");//设备编号
                        String SDGDZCBM = obj.getString("AST_CODE");//固定资产编号
                        String SUBNUMBER = obj.getString("AST_CODE_SUB");//资产次级编号
                        String MESSAGE = obj.getString("MESSAGE");//信息
                        ASSETSet.setWhere("ASSETNUM='"+ASSETNUM+"'");
                        ASSETSet.reset();
                        if(ASSETSet!=null && !ASSETSet.isEmpty()){
                            MboRemote assetMbo = ASSETSet.getMbo(0);
                            assetMbo.setValue("SDGDZCBM",SDGDZCBM,2L);
                            assetMbo.setValue("SUBNUMBER",SUBNUMBER,2L);
                            assetMbo.getThisMboSet().save(11L);
                        }
                    }
                    returnDate.put("code", "S");
                    returnDate.put("errmsg", "success");
                }
            }
        }catch (Exception e){
            System.out.println("------------------------failure-----------------------");
            returnDate.put("code", "E");
            returnDate.put("errmsg", "failure"+"----------------"+e.getMessage());
        }finally {
            return returnDate;
        }
    }
}