<?php

Doo::loadCore('auth/DooAuth');
Doo::loadClass('PasswordHash');
Doo::loadClass('client');
Doo::loadClass('auth');
Doo::loadClass('attachment');
Doo::loadClass('attfile');
Doo::loadClass('actmeasure');
Doo::loadClass('contractact');
Doo::loadClass('project');
Doo::loadClass('profile');
Doo::loadClass('numofperact');
Doo::loadClass('measureauditact');
Doo::loadClass('itemfile');
Doo::loadModel('users');
Doo::loadClass('itemmeasurenum');

/**
 * MainController
 * Feel free to delete the methods and replace them with your own code.
 *
 * @author NoNZero
 */
class ClientController extends DooController
{

    private $data, $client, $auth, $att, $file, $zip, $actmeasure, $contractact, $project, $profile, $numofperact, $measureauditact, $attfile, $users, $itemfile, $itemMeasureNum;
    private $statusArray = array('uncheck' => '1', 'checking' => '2', 'checked' => '3', 'checkno' => '4');
    private $fileTypeArray = array('台帐附件');

    public function __construct()
    {
        $this->data['rootUrl'] = Doo::conf()->APP_URL;
        $this->client = new client();
        $this->auth = new Auth();
        $this->att = new attachment();
        $this->attfile = new attFile();
        $this->zip = new ZipArchive();
        $this->actmeasure = new actMeasure();
        $this->contractact = new Contractact();
        $this->project = new Project();
        $this->profile = new Profile();
        $this->numofperact = new NumofperAct();
        $this->measureauditact = new MeasureauditAct();
        $this->users = new Users();
        $this->itemfile = new ItemFile();
        $this->itemMeasureNum = new ItemMeasureNumpofper();
    }

    public function ClientSignin()
    {
        if (isset($_POST['zhname']) && isset($_POST['zhpass'])) {
            echo json_encode(array('status' => FALSE, 'msg' => '登录失败，请更新软件。'), JSON_UNESCAPED_UNICODE);
            die;
        }
        if (isset($_POST['uname']) && isset($_POST['upass'])) {
            echo json_encode(array('status' => FALSE, 'msg' => '登录失败，请更新软件。'), JSON_UNESCAPED_UNICODE);
            die;
        }
        if (isset($_POST['v3name']) && isset($_POST['v3pass']))
            try {
                if ($this->auth->login($_POST['v3name'], $_POST['v3pass'])) {
                    $uinfo = $this->auth->getUinfo();
                    if (isset($uinfo['isstop']) && $uinfo['isstop'] > 0) {
                        echo json_encode(array('status' => FALSE, 'msg' => '帐号不存在或者密码错误'), JSON_UNESCAPED_UNICODE);
                        die;
                    }
                    if (isset($uinfo['uid'])) {
                        $userArray = $this->profile->getProWithUid($uinfo['uid']);
                        $avatarStr = $userArray['avatar'];
                        if (isset($userArray['userid'])) {
                            $msgArray = array('uid' => $uinfo['uid'], 'name' => $userArray['name'], 'email' => $uinfo['uemail'], 'ucompany' => $userArray['company'], 'jobtitle' => $userArray['jobs'], 'avatar' => Doo::conf()->APP_URL . $avatarStr);
                            echo json_encode(array('status' => TRUE, 'msg' => '', 'userinfo' => $msgArray), JSON_UNESCAPED_UNICODE);
                            die;
                        }
                    }
                } else {
                    echo json_encode(array('status' => FALSE, 'msg' => '帐号不存在或者密码错误'), JSON_UNESCAPED_UNICODE);
                    die;
                }
            } catch (Exception $exc) {

            }
    }

    // 创建标段
    // 参数：用户ID，创建名称，KEY
    function ClientCreatmeasure()
    {
        if (isset($this->params['uid']) && $this->params['uid'] && isset($this->params['bname']) && $this->params['bname'] && $this->params['ckey'] && isset($this->params['ckey'])) {
            $retval = $this->contractact->getPidWithKey($this->params['ckey']);
            if (isset($retval['pid'])) {
                $pArray = $this->project->getRowByPid($retval['pid']);
                if (isset($this->params['uid']) && ($this->params['uid'] == $pArray['uid'])) {
                    $status = array('status' => FALSE, 'msg' => '业主不能作为编制人新建标段！');
                    echo json_encode($status, JSON_UNESCAPED_UNICODE);
                    die();
                }
                $id = $this->actmeasure->insertMeasure(intval($this->params['uid']), $retval['pid'], $retval['stid'], iconv('GBK', 'UTF-8', $this->params['bname']));
                $this->measureauditact->insertMeasureAudit($pArray['pid'], 0, $pArray['uid'], 0, $id, $retval['stid'], 1, 'uncheck', 1); //加入业主
                $uArray = $this->profile->getProWithUid($retval['uid']);
                $strAvatar = $this->auth->getAvatar($uArray['userid']);
                $createArray = array('catid' => $id, 'name' => $uArray['name'], 'avatar' => $strAvatar, 'jobs' => $uArray['jobs'], 'company' => $uArray['company'], 'coninfo' => array('phone' => $uArray['phone'], 'mobile' => $uArray['mobile'], 'qq' => $uArray['qq']), 'pname' => $pArray['pname'], 'ptype' => $retval['stname'], 'ownuid' => $pArray['uid'], 'pnameid' => $pArray['pid'], 'ptypeid' => $retval['stid']);
                $status = array('status' => TRUE, 'msg' => '', 'createinfo' => $createArray);
                echo json_encode($status, JSON_UNESCAPED_UNICODE);
                die();
            } else {
                $status = array('status' => FALSE, 'msg' => 'The key is error');
                echo json_encode($status, JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            $status = array('status' => FALSE, 'msg' => 'error_create');
            echo json_encode($status, JSON_UNESCAPED_UNICODE);
            die();
        }
    }

// 编制人审批第一期时 开始审批第一期时候调用ll
    public function ClientPeriod()
    {
        // TODO:上报数据
        // TODO:每期更新数据时候和上传时候要查询当前进行期数的第几次一并写入数据库
        if (isset($this->params['userid']) && isset($this->params['tenderid']) && isset($this->params['phaseno']) && isset($_POST['MD5_JL']) && isset($_POST['MD5_Zip'])) {
            $fp = $this->upfile('upfile');
            if (isset($fp[0]['filepath'])) {
                /**
                 * 增加上传压缩包md5检测机制
                 */
                $localmd5HashString = hash_file("md5", Doo::conf()->SITE_PATH . $fp[0]['filepath']);
                if ($localmd5HashString != trim($_POST['MD5_Zip'])) {
                    $status = array('status' => 'FALSE', 'msg' => '期数数据上传失败,请重新上传');
                    echo json_encode($status, JSON_UNESCAPED_UNICODE);
                    die();
                }
                $res = $this->zip->open(Doo::conf()->SITE_PATH . $fp[0]['filepath']);
                $extPath = pathinfo($fp[0]['filepath']);
                $extPathdir = Doo::conf()->SITE_PATH . $extPath['dirname'] . '/' . $extPath['filename'];
                if ($res === TRUE) {
                    if (!$this->dir_create($extPathdir)) {
                        $status = array('status' => 'FALSE', 'msg' => '期数数据上传失败');
                        echo json_encode($status, JSON_UNESCAPED_UNICODE);
                        die();
                    }
                    $this->zip->extractTo($extPathdir);
                    $this->zip->close();
                }
                $countArray = json_decode(file_get_contents($extPathdir . '/' . 'JsonFile_Common.json'), TRUE, JSON_UNESCAPED_UNICODE);
                if (!isset($countArray)) {
                    $status = array('status' => 'FALSE', 'msg' => '期数汇总数据上传失败');
                    echo json_encode($status, JSON_UNESCAPED_UNICODE);
                    die();
                }
                $this->actmeasure->updateCon($this->params['tenderid'], $countArray['TotalPrice']);
                $pmArray = $this->actmeasure->getRowByPmid($this->params['tenderid']);
                if (isset($pmArray['pmid'])) {
                    // 由于不通过功能数据表记录重复写入时要考虑当前是第几次审批
                    $intMaxTimes = $this->numofperact->getMaxTimes($this->params['tenderid'], $this->params['phaseno']);
                    if (isset($intMaxTimes['times']) && ($intMaxTimes['times'] >= 0)) {
                        $iniTimes = $intMaxTimes['times'] + 1;
                    } else {
                        $iniTimes = 0;
                    }
                    // 写入第一期
                    $mpid = $this->numofperact->insert($pmArray['pid'], $this->params['userid'], $this->params['tenderid'], $pmArray['stid'], $this->params['phaseno'], $countArray['BQHTJL'], $countArray['BQSLBGJL'], $countArray['JZSQLJWC'], $countArray['BQWCJL'], $countArray['LJWCJL'], $iniTimes);
                    // 更新审批人MPID
                    $this->measureauditact->updateAuditorMPID($mpid, $this->params['tenderid'], $this->params['phaseno'], $iniTimes);
                    // 设置审批人状态
                    $firstAuditor = $this->measureauditact->getFirstAuditor($this->params['tenderid'], $this->params['phaseno'], $iniTimes);
                    if (isset($firstAuditor)) {
                        if ($firstAuditor['mastatus'] == 'uncheck') {
                            $this->measureauditact->updateMastatus($firstAuditor['maid']);
                        }
                    }
                }
                if ($mpid > 0) {
                    if ($this->attfile->insertFile($pmArray['pid'], $pmArray['stid'], $mpid, $this->params['tenderid'], $this->params['phaseno'], $this->params['userid'], $fp[0]['filepath'], 0, $_POST['MD5_JL'], $iniTimes)) {
                        $infostatus = 0;
                        $pmArray = $this->numofperact->getRowTender($this->params['tenderid']);
                        if ($pmArray) {
                            $countTotal = count($pmArray);
                            $ownerStatusArray = $this->measureauditact->getStatusTender($pmArray[0]['pmid'], $pmArray[0]['numpname']);
                            if ($ownerStatusArray) {
                                $infostatus = $this->statusArray[$ownerStatusArray['mastatus']];
                            }
                            echo json_encode(array('status' => 'TRUE', 'msg' => '', 'info' => array('curr' => $pmArray[0]['numpname'], 'infostatus' => $infostatus, 'total' => $countTotal)), JSON_UNESCAPED_UNICODE);
                            die();
                        } else {
                            echo json_encode(array('status' => 'TRUE', 'msg' => '', 'info' => array('curr' => 1, 'infostatus' => 1, 'total' => 1)), JSON_UNESCAPED_UNICODE);
                            die();
                        }
                    } else {
                        $status = array('status' => 'FALSE', 'msg' => '期数上传失败');
                        echo json_encode($status, JSON_UNESCAPED_UNICODE);
                        die();
                    }
                } else {
                    $status = array('status' => 'FALSE', 'msg' => '期数上传失败');
                    echo json_encode($status, JSON_UNESCAPED_UNICODE);
                    die();
                }
            } else {
                $status = array('status' => 'FALSE', 'msg' => '文件上传失败，请重试');
                echo json_encode($status, JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            $status = array('status' => 'FALSE', 'msg' => '上传参数错误');
            echo json_encode($status, JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 获取标段状态信息(由于加入了)
     * 每个标段只有一期在进行中 group by？
     *
     * 查询标段的审批状态可以根据业主的审批依据来查询
     * 如果除业主意外的人审批状态为未通过怎么处理
     */
    public function getMAStatus()
    {
        // curr:当前期数，status：当前状态，total:总期数
        // 参数catid
        if (isset($this->params['tenderid'])) {
            $pmArray = $this->numofperact->getRowTenderCurr($this->params['tenderid']);
            $countTotal = count($pmArray);
            $ownerStatus = NULL;
            $isUnCheck = TRUE;
            $ownerStatusArray = $this->measureauditact->getStatusTen($pmArray[0]['pmid'], $pmArray[0]['numpname']);
//	    if (isset($ownerStatusArray))
//		if (($ownerStatusArray[0]['last'] == 1) && ($ownerStatusArray[0]['mastatus'] == 'checked')) {
//		    $ownerStatus = 'checked';
//		} else {
//		    $ownerStatus = 'checking';
//		}
            $statusArray = $this->numofperact->getMaxRowStatus($pmArray[0]['pmid'], $pmArray[0]['numpname']);
            $ownerStatus = $statusArray['currstatus'];
//		foreach ($ownerStatusArray as $kk => $vv) {
//		    if (($vv['last'] == 1) && ($vv['mastatus'] == 'checked')) {
//			$ownerStatus = 'checked';
//		    } else {
//			$ownerStatus = 'checking';
//		    }
//		}
            $projectArray = $this->project->getRowByPid($ownerStatusArray[0]['pid']);
            $stArray = $this->contractact->getRowByStid($ownerStatusArray[0]['stid']);
            $profileArray = $this->profile->getProWithUid($projectArray['uid']);
            $auditArray = $this->measureauditact->getAuditUserRedo($pmArray[0]['pmid'], $pmArray[0]['numpname']);
            if (isset($auditArray[0]['auditoruid'])) {
                foreach ($auditArray as $key => $value) {
                    $userArray = $this->profile->getProWithUid($value['auditoruid']);
//		    $finalStatus = $value['mastatus'];
                    if ($value['mastatus'] != 'uncheck') {
                        $isUnCheck = FALSE;
                    }
                    if ($value['audittime'] > 0) {
                        $value['audittime'] = date('Y-m-d', $value['audittime']);
                    }
                    $auditInfo[] = array('uid' => $userArray['userid'], 'name' => $userArray['name'], 'company' => $userArray['company'], 'jobs' => $userArray['jobs'], 'avatar' => $this->auth->getAvatar($value['auditoruid']), 'mastatus' => $this->statusArray[$value['mastatus']], 'CheckerMemo' => $value['auditcontent'], 'onlineaudit' => $value['onlineaudit'], 'audittime' => $value['audittime']);
                }
            }
            if ($ownerStatusArray) {
                if ($isUnCheck) {
                    echo json_encode(array('status' => 'TRUE', 'msg' => '', 'info' => array('curr' => $pmArray[0]['numpname'], 'infostatus' => $this->statusArray['uncheck'], 'total' => "$countTotal", 'proName' => $projectArray['pname'], 'stName' => $stArray['stname'], 'name' => $profileArray['name'], 'company' => $profileArray['company'], 'jobs' => $profileArray['jobs']), 'auditinfo' => $auditInfo), JSON_UNESCAPED_UNICODE);
                } else {
                    echo json_encode(array('status' => 'TRUE', 'msg' => '', 'info' => array('curr' => $pmArray[0]['numpname'], 'infostatus' => $this->statusArray[$ownerStatus], 'total' => "$countTotal", 'proName' => $projectArray['pname'], 'stName' => $stArray['stname'], 'name' => $profileArray['name'], 'company' => $profileArray['company'], 'jobs' => $profileArray['jobs']), 'auditinfo' => $auditInfo), JSON_UNESCAPED_UNICODE);
                }
                die();
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => '标段状态查询不存在'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => 'FALSE', 'msg' => '标段状态查询参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    public function getUserSearch()
    {
        if (isset($_POST['uemail']) && filter_var($_POST['uemail'], FILTER_VALIDATE_EMAIL)) {
            $retval = $this->users->getOne(array('where' => 'uemail=?', 'param' => array($_POST['uemail']), 'asArray' => TRUE));
            if (isset($retval['uid'])) {
                $proArray = $this->profile->getProWithUid($retval['uid']);
                if (isset($proArray['userid'])) {
                    $strAvatar = $this->auth->getAvatar($proArray['userid']);
                    echo json_encode(array('status' => 'TRUE', 'msg' => '', 'info' => array('uid' => $proArray['userid'], 'avatar' => $strAvatar, 'name' => $proArray['name'], 'jobs' => $proArray['jobs'], 'company' => $proArray['company'])), JSON_UNESCAPED_UNICODE);
                    die();
                } else {
                    echo json_encode(array('status' => 'FALSE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
                    die();
                }
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => 'FALSE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 获取指定标段指定期数{默认提取重做后最新一期的}
     * 单击获取项目相关审批人员和状态
     * sectionid:标段ID periodid:期数
     * TODO:如果审批人的期数或者次数与标段期数或者次数存在不对应情况的处理
     */
    public function getAlluserMeasure()
    {
        if (isset($this->params['tenderid']) && isset($this->params['phaseno'])) {
//            error_log(var_export($this->params, TRUE), 3, '/opt/html/jlzftest/data/' . time());
            // 先判断是否存在期数问题
            // 然后再判断是否存在次数不匹配
//            $intNum = $this->numofperact->getCountNumpname($this->params['tenderid'], $this->params['phaseno']);
//            // 如果期数是第一期期数必须大于一，否则减一为无效数据 ，为0表示这期为做上报没有产生记录
//            if (( $this->params['phaseno'] > 1) && ($intNum == 0)) {// 提取上一期的数据
//                // 提取期数减一
//                $intLastTimes = $this->numofperact->getMaxTimes($this->params['tenderid'], $this->params['phaseno'] - 1)['times'];
//                $uinfoTmpArray = $this->measureauditact->getAllAudit($this->params['tenderid'], $this->params['phaseno'] - 1, $intLastTimes);
//            } else {
//                $IntMaxRedoTimes = $this->measureauditact->getMaxTimes($this->params['tenderid'], $this->params['phaseno'])['maxtimes'];
//                $intTimes = $this->numofperact->getCountTimes($this->params['tenderid'], $this->params['phaseno'], $IntMaxRedoTimes);
//                if (($intTimes == 0) && ($IntMaxRedoTimes > 0)) {
//                    $lastTimes = $IntMaxRedoTimes - 1;
//                    $uinfoTmpArray = $this->measureauditact->getAllAudit($this->params['tenderid'], $this->params['phaseno'], $lastTimes);
//                } else {
//                    $uinfoTmpArray = $this->measureauditact->getAllAudit($this->params['tenderid'], $this->params['phaseno'], $IntMaxRedoTimes);
//                }
//            }
            $uinfoTmpArray = $this->measureauditact->getAlluserMeasureAudit($this->params['tenderid'], $this->params['phaseno']);
            if ($uinfoTmpArray) {
                foreach ($uinfoTmpArray as $key => $value) {
                    $uArray = $this->profile->getProWithUid($value['auditoruid']);
                    $uinfoArray[$key]['name'] = $uArray['name'];
                    $uinfoArray[$key]['company'] = $uArray['company'];
                    $uinfoArray[$key]['jobs'] = $uArray['jobs'];
                    $uinfoArray[$key]['mastatus'] = $this->statusArray[$value['mastatus']];
                    $uinfoArray[$key]['uid'] = $value['auditoruid'];
                    $uinfoArray[$key]['avatar'] = $this->auth->getAvatar($value['auditoruid']);
                    $uinfoArray[$key]['CheckerMemo'] = $value['auditcontent'];
                    $uinfoArray[$key]['onlineaudit'] = $value['onlineaudit'];
                    if ($value['audittime'] > 0) {
                        $uinfoArray[$key]['audittime'] = date('Y-m-d', $value['audittime']);
                    } else {
                        $uinfoArray[$key]['audittime'] = '0';
                    }
                }
            } else {
                echo json_encode(array('status' => FALSE, 'msg' => '用户列表不存在'), JSON_UNESCAPED_UNICODE);
                die();
            }
            echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $uinfoArray), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

//
    //
    // 配置审批人时候还没有创建标段所以没有MPID存在
    function addAuditMeasure()
    {
        //  必须检查期数是否存在
        //  标段ID 当前登录 审批人ID
        //  检测是否重复写入 && ($_POST['creatoruid'] > 0)
        // TODO: 增加多次审批人变更需求，调整审批人增加、删除接口
        // 当前操作的是否为最新一期还是最新一期加一(项目进行中时，不能编辑审批人，所以直接加一)
        // 大于一次重做的时候，自动复制编制人和所有审批人次数加一
        if (isset($_POST['pmid']) && isset($_POST['creatoruid']) && isset($_POST['auditoruid']) && isset($_POST['numpname'])) {
            $IntMaxTimes = $this->measureauditact->getMaxTimesInt($_POST['pmid'], $_POST['numpname']); // 根据标段PMID，期数numpname，获取目前重做次数
            if ($IntMaxTimes > 0) {
                $inTimes = $IntMaxTimes;
            } else {
                $inTimes = 0;
            }
            $pmArray = $this->actmeasure->getRowByPmid($_POST['pmid']);
            try {
                if ($this->measureauditact->insertMeasureAudit($pmArray['pid'], $_POST['creatoruid'], $_POST['auditoruid'], 0, $_POST['pmid'], $pmArray['stid'], $_POST['numpname'], 'uncheck', 2, $inTimes) > 0) {
                    echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => ''), JSON_UNESCAPED_UNICODE);
                    die();
                }
            } catch (PDOException $e) {// 判断异常类型，提示不同错误信息
                echo json_encode(array('status' => FALSE, 'msg' => '配置审批人错误'), JSON_UNESCAPED_UNICODE);
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '配置审批人参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 删除审批用户
     */
    function delAuditMeasure()
    {
        if (isset($this->params['userid']) && isset($this->params['tenderid']) && isset($this->params['phaseno'])) {
            // 判断当前标段期数审批状态，决定是否继续执行
            $IntMaxTimes = $this->measureauditact->getMaxTimesInt($this->params['tenderid'], $this->params['phaseno']); // 根据标段PMID，期数numpname，获取目前重做次数
            if ($IntMaxTimes > 0) {
                $inTimes = $IntMaxTimes;
                $intHasCount = $this->numofperact->hasTheTimesRow($this->params['tenderid'], $this->params['phaseno'], $inTimes);
                if (isset($intHasCount) && ($intHasCount > 0)) {
                    echo json_encode(array('status' => FALSE, 'msg' => '此标段状态，禁止删除审批人员'), JSON_UNESCAPED_UNICODE);
                    die();
                }
            } else {
                $inTimes = 0;
            }
            try {
                $this->measureauditact->delAuditUserTimes($this->params['tenderid'], $this->params['phaseno'], $this->params['userid'], $inTimes);
                echo json_encode(array('status' => TRUE, 'msg' => ''), JSON_UNESCAPED_UNICODE);
                die();
            } catch (PDOException $e) {// 判断异常类型，提示不同错误信息
                echo json_encode(array('status' => FALSE, 'msg' => '删除审批人错误'), JSON_UNESCAPED_UNICODE);
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '删除审批人员参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

// 查询状态变更为审批中，已审批中为查询依据
    function checkMeasureStatus()
    {
        if (isset($_POST['sectionid']) && isset($_POST['periodid'])) {
            $mpArray = $this->numofperact->getRow($_POST['sectionid'], $_POST['periodid']);
            $maArray = $this->measureauditact->getAlluserMeasureAudit($_POST['sectionid'], $_POST['periodid']);
            foreach ($maArray as $key => $value) {
                if ($value['mastatus'] == 'uncheck') {
                    $mastatus = $this->statusArray[$value['mastatus']];
                }
            }
            if (isset($mpArray['mpid'])) {
                echo json_encode(array('status' => TRUE, 'msg' => '', 'isexist' => TRUE, 'checkstatus' => $mastatus), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => TRUE, 'msg' => '', 'isexist' => FALSE), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '标段信息不正确'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    // 根据用户查询参与的标段信息
    //  参数为1时，当提交的附件中有重做记录时，提取记录未经过排重处理，出现重复结果。
    //  api/client/user/get/15/allproject 此接口也有同样问题
    function getAuditProject()
    {
        // TODO：可以通过SQL直接查询出来
        if (isset($_POST['audituid']) && isset($_POST['RequestType'])) {
            $downfileurl = NULL;
            /**
             * 只查询审批中状态的记录
             * 然后根据每天记录所在的标段、期数、创建人查询所有此次所有审批人记录、为了判断
             * 判断此用户是第几个审批的人
             * 直接提取状态为未审批、审批中的
             * 未审批（没有到该审批人）
             * 审批中（出现在第一个）
             * 上传审批时候先遍历所有审批提交文件的状态并设置为旧文件状态
             * 然后写入新审批的文件路径等信息
             * 审批同时上传审批文件并设置审批表的状态做更改
             *
             */
            if ($_POST['RequestType'] == 1) {
                /**
                 *  功能描述：
                 *  参数1功能为，取得与当前用户相关的待审批状态的所有进行中的标段期数、最新一次的记录
                 *  根据用户ID查询编制人和审批人参与的正在进行中的项目，进行中的项目状态为uncheck，checking
                 *  由于·uncheck状态不能准确反映出其他用户操作对所属标段操作产生的的状态{比如：其他用户操作标段状态为（未通过【打回重做】）}、要排除这种情况
                 *  还有一种情况为编制人编制项目时，审批人列表已经添加审批人，但是项目没有提交，没有项目文件，此时应根据有没有项目文件进行过滤。
                 *
                 *  ??此ID为编制人或者为审批人时
                 */
                // 第一步：根据用户ID，查询此用户参与的所有标段{根据最大期数【由于期数是递进关系只获取最大值】、最大次数【由于次数是递进关系只获取最大值】作为条件参数进行查询记录}
                $mpArray = $this->measureauditact->getCheckedRowbyUID2($_POST['audituid']); // 通过pmid,numpname分组获取参与的记录
                if (isset($mpArray)) {
                    $statusArray = array('uncheck', 'checking');
                    foreach ($mpArray as $key => $value) {
                        /**
                         * 根据审批ID查询所在标段期数
                         * 然后去附件表根据标段ID 期数 是否新标志字段去查询最新的文件
                         * 项目名称 项目类型
                         *
                         *
                         * 此处现在是以创建者ID和审批人ID做关联来做判断
                         * 判断上一个人的审批状态来提取记录
                         *
                         * 变更为一个用户添加所有人
                         *
                         */
//			$maxtimes = $this->attfile->getMaxTimes2($value['pmid'], $value['numpname']);
                        $numStatusArray = $this->numofperact->getRow($value['pmid'], $value['numpname'], $value['times']);
                        if (in_array($numStatusArray['currstatus'], $statusArray)) {
                            $newfileArray = $this->attfile->getNewLast($value['pmid'], $value['numpname'], $value['times']);
                            if (isset($newfileArray['filepath'])) {
                                $projectArray = $this->project->getRowByPid($newfileArray['pid']);
                                $pmidArray = $this->actmeasure->getRowByPmid($value['pmid']);
                                $stArray = $this->contractact->getRowByStid($newfileArray['stid']);
//			    $auditArray = $this->measureauditact->getLastNewRowInfo($value['pmid'], $value['numpname'], $_POST['audituid']);
                                $pathinfo = pathinfo($newfileArray['filepath']);
                                $downfileurl[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'proName' => $projectArray['pname'], 'stName' => $stArray['stname'], 'MD5_Jl' => $newfileArray['filehashcode'], 'tenderstatus' => $this->statusArray[$value['mastatus']], 'tenderid' => $value['pmid'], 'pnameid' => $projectArray['pid'], 'ptypeid' => $stArray['stid'], 'audituidstatus' => $this->statusArray[$value['mastatus']], 'bianzhirenuid' => $pmidArray['uid'], 'tenderName' => $pmidArray['pmname']);
                            }
                        }
                    }
                    echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $downfileurl), JSON_UNESCAPED_UNICODE);
                    die();
                } else {
                    echo json_encode(array('status' => FALSE, 'msg' => '暂时无审批信息'), JSON_UNESCAPED_UNICODE);
                    die();
                }
            }
            if ($_POST['RequestType'] == 2) {
                /**
                 * {
                 * "downurl": "http://d.jl.smartcost.com.cn/data/2015/0608/20150608043245691/ProjectFile.rmf", 最新一期最新一次的文件
                 * "proName": "巫溪县前进桥",                        项目名称
                 * "stName": "巫溪县 前进桥(终)",                        合同段名称
                 * "MD5_Jl": "7cf05dccc6ad45b2d78f476a3388c3b2",                最新一期最新一次的文件hash code
                 * "tenderstatus": "2",                            标段状态
                 * "tenderid": "234",                            标段ID
                 * "pnameid": "79",                            项目ID
                 * "ptypeid": "96",                            合同段ID
                 * "audituidstatus": "2",                            当前用户审批状态
                 * "bianzhirenuid": "59",                            编制人UID
                 * "tenderName": "巫溪县 前进桥 终"                        标段名称
                 * }
                 */
                // TODO：：不同角色提取条件不同是否使用audituid 作为当前用户提取条件，容易产生冲突
                if (!isset($_POST['audituid']) || !($_POST['audituid'] > 0)) {
                    echo json_encode(array('status' => FALSE, 'msg' => '返回指定用户参与的所有项目参数错误'), JSON_UNESCAPED_UNICODE);
                    die();
                }
// 三个角色数据合并返回
// 返回最新一期的项目文件
// 业主
                //  业主查询参与的项目时
                //  TODO：：业主是否参与审批？如果参与提取哪个参与者的审批状态?
                $userproArray = $this->project->getRowUid($_POST['audituid']);
                $newattArray = $retArray = $hashArray = NULL;
                foreach ($userproArray as $upk => $upv) {
                    $attArray = $this->attfile->getPmidGroup($upv['pid']);
                    $attaArray = NULL;
                    foreach ($attArray as $akey => $avalue) {
                        $attaArray[] = $this->attfile->getLastNumTimes($avalue['pmid']);
                    }
                    foreach ($attaArray as $attk => $attv) {
                        $attfileArray = $this->contractact->getRowByStid($attv['stid']);
                        $pmidArray = $this->actmeasure->getRowByPmid($attv['pmid']);
                        $numArray = $this->numofperact->getRow($attv['pmid'], $attv['numpname'], $attv['times']);
                        $auditArray = $this->measureauditact->getLastNewRowInfo($attv['pmid'], $attv['numpname'], $_POST['audituid']);
                        $pathinfo = pathinfo($attv['filepath']);
                        if (isset($pathinfo['dirname'])) {
                            $retArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'proName' => $upv['pname'], 'stName' => $attfileArray['stname'], 'MD5_Jl' => $attv['filehashcode'], 'tenderstatus' => $this->statusArray[$numArray['currstatus']], 'tenderid' => $attv['pmid'], 'pnameid' => $upv['pid'], 'ptypeid' => $attfileArray['stid'], 'audituidstatus' => $this->statusArray[$auditArray['mastatus']], 'bianzhirenuid' => $pmidArray['uid'], 'tenderName' => $pmidArray['pmname']);
                            $hashArray[] = md5(Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf' . $upv['pname'] . $attfileArray['stname'] . $attv['filehashcode'] . $this->statusArray[$numArray['currstatus']] . $attv['pmid'] . $upv['pid'] . $attfileArray['stid'] . $this->statusArray[$auditArray['mastatus']] . $pmidArray['uid'] . $pmidArray['pmname']);
                        }
                    }
                }
// 施工
                $measureArray = $this->actmeasure->getPmidRow($_POST['audituid']);
                if (isset($measureArray) && $measureArray) {
                    $attfileArray = $stidArray = NULL;
                    foreach ($measureArray as $key => $value) {
                        $proArray = $this->project->getRowByPid($value['pid']);
                        $conArray = $this->contractact->getRowByStid($value['stid']);
                        $attfileArray = $this->attfile->getLastNewProfile2($value['pmid']);
                        $pmidArray = $this->actmeasure->getRowByPmid($value['pmid']);
                        $statusArray = $this->numofperact->getMaxRowStatus($attfileArray['pmid'], $attfileArray['numpname']);
                        $auditArray = $this->measureauditact->getLastNewRowInfo($attfileArray['pmid'], $attfileArray['numpname'], $_POST['audituid']);
                        $pathinfo = pathinfo($attfileArray['filepath']);
                        if (!$auditArray['mastatus'])
                            $auditStr = 'uncheck';
                        if (isset($pathinfo['dirname'])) {
                            $hashstr = md5(Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf' . $proArray['pname'] . $conArray['stname'] . $attfileArray['filehashcode'] . $this->statusArray[$statusArray['currstatus']] . $value['pmid'] . $proArray['pid'] . $conArray['stid'] . $this->statusArray[$auditStr] . $pmidArray['uid'] . $pmidArray['pmname']);
                            if (!in_array($hashstr, $hashArray)) {
                                $retArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'proName' => $proArray['pname'], 'stName' => $conArray['stname'], 'MD5_Jl' => $attfileArray['filehashcode'], 'tenderstatus' => $this->statusArray[$statusArray['currstatus']], 'tenderid' => $value['pmid'], 'pnameid' => $proArray['pid'], 'ptypeid' => $conArray['stid'], 'audituidstatus' => $this->statusArray[$auditStr], 'bianzhirenuid' => $pmidArray['uid'], 'tenderName' => $pmidArray['pmname']);
                                $hashArray[] = $hashstr;
                            }
                        }
                    }
                }
// 审批 是否只提取最新一期？
                $pmidGroupArray = $this->measureauditact->getPmidGroup($_POST['audituid']);
                /**
                 * 从审批人列表中提取记录时，如果项目进行到新开一次或者一期数据，但是上报人并未上报数据，（犹豫逻辑上机制导致，先创建审批人再通过上报人上报数据才能产生新一期）
                 * 这时，上报人查询到的数据就为空。
                 * 如果没有最新一次上报数据（可否提取2期上报数据？即便是能下载也不能打开，因为上一期数据的审批人数或者状态，可能与最新一期的审批人状态不同，然后软件报错）
                 */
                $retval = null;
                foreach ($pmidGroupArray as $gkey => $gvalue) {
                    $retval[] = $this->measureauditact->getLastNumTimes($gvalue['pmid'], $_POST['audituid']);
                }
                foreach ($retval as $spkey => $spvalue) {
                    $pathinfo = null;
                    $proArray = $this->project->getRowByPid($spvalue['pid']);
                    $conArray = $this->contractact->getRowByStid($spvalue['stid']);
                    $pmidArray = $this->actmeasure->getRowByPmid($spvalue['pmid']);
                    /**
                     * 两种情况 一种情况是 新建一期 还有一种是审批未通过重做 这两种未提交
                     */
                    $intNum = $this->numofperact->getCountNumpname($spvalue['pmid'], $spvalue['numpname']);
                    // 如果期数是第一期期数必须大于一，否则减一为无效数据 ，为0表示这期为做上报没有产生记录
                    if (($spvalue['numpname'] > 1) && ($intNum == 0)) {// 提取上一期的数据
                        // 提取期数减一
                        $intLastTimes = $this->numofperact->getMaxTimes($spvalue['pmid'], $spvalue['numpname'] - 1)['times'];
                        $numstatusArray = $this->numofperact->getRow($spvalue['pmid'], $spvalue['numpname'] - 1, $intLastTimes); //获取上一期最新一次的状态
                    } else {
                        $intTimes = $this->numofperact->getCountTimes($spvalue['pmid'], $spvalue['numpname'], $spvalue['times']);
                        if (($intTimes == '0') && $spvalue['times'] > 0) {
                            $numstatusArray = $this->numofperact->getRow($spvalue['pmid'], $spvalue['numpname'], $spvalue['times'] - 1);
                        } else {// 当创建第一次的时候也会为空，所以下方加了判断
                            $numstatusArray = $this->numofperact->getRow($spvalue['pmid'], $spvalue['numpname'], $spvalue['times']);
                        }
                    }
                    $afArray = $this->attfile->getLastNewProfile2($spvalue['pmid']); // 由于始终提取最新一期所以不用放入判断情况中
                    $auditArray = $this->measureauditact->getLastNewRowInfo($spvalue['pmid'], $spvalue['numpname'], $_POST['audituid']);
                    $pathinfo = pathinfo($afArray['filepath']);
                    if ($numstatusArray && $auditArray) { // 如果重做审批人有变更，根据审批状态判断是否存在该审批人，不存在则不显示此条记录
                        $hashstr = md5(Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf' . $proArray['pname'] . $conArray['stname'] . $afArray['filehashcode'] . $this->statusArray[$numstatusArray['currstatus']] . $spvalue['pmid'] . $proArray['pid'] . $conArray['stid'] . $this->statusArray[$auditArray['mastatus']] . $pmidArray['uid'] . $pmidArray['pmname']);
                        if (!in_array($hashstr, $hashArray)) {
                            $retArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'proName' => $proArray['pname'], 'stName' => $conArray['stname'], 'MD5_Jl' => $afArray['filehashcode'], 'tenderstatus' => $this->statusArray[$numstatusArray['currstatus']], 'tenderid' => $spvalue['pmid'], 'pnameid' => $proArray['pid'], 'ptypeid' => $conArray['stid'], 'audituidstatus' => $this->statusArray[$auditArray['mastatus']], 'bianzhirenuid' => $pmidArray['uid'], 'tenderName' => $pmidArray['pmname']);
                            $hashArray[] = $hashstr;
                        }
                    }
                }
//		$dd = NULL;
//		if (isset($retArray))
//		    $dd = $this->array_unique_fb($retArray);
                echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $retArray), JSON_UNESCAPED_UNICODE);
            }
        }
    }

//二维数组去掉重复值 并保留键值
    function array_unique_fb($array2D)
    {
        $key = array();
        foreach ($array2D as $k => $v) {
            if (empty($key))
                $key = array_keys($v); //记录数组的KEY
            $v = join(",", $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
            $temp[$k] = $v;
        }
        $temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
        foreach ($temp as $k => $v) {
            $array = explode(",", $v); //再将拆开的数组重新组装
            foreach ($array as $i => $t) {
                $temp2[$k] = !empty($temp2[$k]) ? array_merge($temp2[$k], array("{$key[$i]}" => $t)) : array("{$key[$i]}" => $t); //依次添加到新的数组中去
            }
        }
        return $temp2;
    }

    function unique_arr($array2D, $stkeep = false, $ndformat = true)
    {
        // 判断是否保留一级数组键 (一级数组键可以为非数字)
        if ($stkeep)
            $stArr = array_keys($array2D);
        // 判断是否保留二级数组键 (所有二级数组键必须相同)
        if ($ndformat)
            $ndArr = array_keys(end($array2D));
        //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
        foreach ($array2D as $v) {
            $v = join(",", $v);
            $temp[] = $v;
        }
        //去掉重复的字符串,也就是重复的一维数组
        $temp = array_unique($temp);
        //再将拆开的数组重新组装
        foreach ($temp as $k => $v) {
            if ($stkeep)
                $k = $stArr[$k];
            if ($ndformat) {
                $tempArr = explode(",", $v);
                foreach ($tempArr as $ndkey => $ndval) {
                    $output[$k][$ndArr[$ndkey]] = $ndval;
                }
            } else {
                $output[$k] = explode(",", $v);
            }
        }
        return $output;
    }

// 标段期审批接口
    function auditMeasure()
    {
        if (isset($_POST['userid']) && isset($_POST['tenderid']) && isset($_POST['phaseno']) && isset($_POST['MD5_JL']) && isset($_POST['MD5_Zip'])) {
            $auditcontent = iconv('GBK', 'UTF-8', $_POST['CheckerMemo']);
            $auditArray = $this->measureauditact->getLastNewRowInfo($_POST['tenderid'], $_POST['phaseno'], $_POST['userid']);
            if (isset($auditArray ['mastatus']) && (($auditArray ['mastatus'] == 'checked') || ($auditArray ['mastatus'] == 'checkno'))) {
                echo json_encode(array('status' => FALSE, 'msg' => '该标段已审批完毕。'), JSON_UNESCAPED_UNICODE);
                die();
            }
            $auditUserArray = $this->measureauditact->getUserAuditLast($_POST['tenderid'], $_POST['phaseno']);
            $fp = $this->upfile('upfile');
            if (isset($fp[0]['filepath'])) {
                $localmd5HashString = hash_file("md5", Doo::conf()->SITE_PATH . $fp[0]['filepath']);
                if ($localmd5HashString != trim($_POST['MD5_Zip'])) {
                    $status = array('status' => 'FALSE', 'msg' => '审批期数数据上传失败,请重新上传');
                    echo json_encode($status, JSON_UNESCAPED_UNICODE);
                    die();
                }
                $res = $this->zip->open(Doo::conf()->SITE_PATH . $fp[0]['filepath']);
                $extPath = pathinfo($fp[0]['filepath']);
                $extPathdir = Doo::conf()->SITE_PATH . $extPath ['dirname'] . '/' . $extPath['filename'];
                if ($res === TRUE) {
                    if (!$this->dir_create($extPathdir)) {
                        return FALSE;
                    }
                    $this->zip->extractTo($extPathdir);
                    $this->zip->close();
                }
                // 更新五项最新数据
                $countArray = json_decode(file_get_contents($extPathdir . '/' . 'JsonFile_Common.json'), TRUE, JSON_UNESCAPED_UNICODE);
                if (!isset($countArray)) {
                    $status = array('status' => FALSE, 'msg' => '期数汇总数据上传失败');
                    echo json_encode($status, JSON_UNESCAPED_UNICODE);
                    die();
                }
                $iniTimes = 0;
                $intMaxTimes = $this->numofperact->getMaxTimes($_POST['tenderid'], $_POST['phaseno']);
                if (isset($intMaxTimes['times']) && ($intMaxTimes['times'] > 0)) {
                    $iniTimes = $intMaxTimes['times'];
                }
                $this->actmeasure->updateCon($_POST['tenderid'], $countArray['TotalPrice']);
                $this->numofperact->updateNumofper($_POST['tenderid'], $_POST['phaseno'], $countArray, $iniTimes);
                $numArray = $this->numofperact->getRow($_POST['tenderid'], $_POST['phaseno'], $iniTimes);
                if (isset($auditArray['pid'])) {
                    // 插入附件表之前要更新所有次标段期数的提交的数据状态为旧标志
                    $this->attfile->setOldfileFlag($_POST['tenderid'], $_POST['phaseno'], $iniTimes);
                    // 插入此次提交的文件路径数据并设置为新状态
                    // 写入此时是第几次重做
                    $this->attfile->insertFile($auditArray['pid'], $auditArray['stid'], $numArray['mpid'], $_POST['tenderid'], $_POST['phaseno'], $_POST['userid'], $fp[0]['filepath'], 0, $_POST['MD5_JL'], $iniTimes);
                    // 更新审批表审批人的标段期数审批状态
                    if ($this->measureauditact->setStatusTo($auditArray['maid'], 3, $auditcontent)) {
                        // 更新下一个人的状态
                        $countAudit = count($auditUserArray);
                        if ($auditArray['last'] == '1') {
                            $this->measureauditact->setStatusTo($auditUserArray[0]['maid'], 3);
                            $this->numofperact->updateAuditStatus($_POST['tenderid'], $_POST['phaseno'], 'checked', $iniTimes);
                            echo json_encode(array('status' => TRUE, 'msg' => ''), JSON_UNESCAPED_UNICODE);
                            die();
                        } else {
                            if (($countAudit == 2) && ($auditUserArray[0]['last'] == 1) && ($auditUserArray[1]['maid'] == $auditArray['maid'])) {
                                $this->measureauditact->updateMastatus($auditUserArray[0]['maid']);
                                $this->numofperact->updateAuditStatus($_POST['tenderid'], $_POST['phaseno'], 'checking', $iniTimes);
                                echo json_encode(array('status' => TRUE, 'msg' => ''), JSON_UNESCAPED_UNICODE);
                                die();
                            }
                            if (($countAudit > 2)) {
                                foreach ($auditUserArray as $k => $v) {
                                    if ($v['maid'] == $auditArray['maid']) {
                                        if ($k == ($countAudit - 1)) {//如果是最后一个
                                            $this->measureauditact->updateMastatus($auditUserArray[0]['maid']);
                                        } else {
                                            $this->measureauditact->updateMastatus($auditUserArray[$k + 1]['maid']);
                                        }
                                        $this->numofperact->updateAuditStatus($_POST['tenderid'], $_POST['phaseno'], 'checking', $iniTimes);
                                        echo json_encode(array('status' => TRUE, 'msg' => ''), JSON_UNESCAPED_UNICODE);
                                        die();
                                    }
                                }
                                // 我是第几个审批的
                                // 如果是最后一个就把业主审批状态更改为审批中
                                // 如果是第一个就把后一个设置为审批中
                            }
                        }
                    } else {
                        echo json_encode(array('status' => FALSE, 'msg' => '审批文件提交失败1'), JSON_UNESCAPED_UNICODE);
                        die();
                    }
                }
            } else {
                echo json_encode(array('status' => FALSE, 'msg' => '审批文件提交失败'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '审批参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 根据标段ID查询是否需要更新
     */
    function checkTenderUpdate()
    {
        if (isset($this->params ['tenderid']) && $this->params['tenderid']) {
            $updateArray = $this->attfile->getFileUpdate($this->params['tenderid']);
            $projectArray = $this->project->getRowByPid($updateArray['pid']);
            $stArray = $this->contractact->getRowByStid($updateArray['stid']);
            $MeasureArray = $this->actmeasure->getRowByPmid($this->params['tenderid']);
            if (isset($updateArray['filepath'])) {
                $pathinfo = pathinfo($updateArray['filepath']);
                $downfileurl[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'MD5_Jl' => $updateArray['filehashcode'], 'proName' => $projectArray['pname'], 'stName' => $stArray['stname'], 'pnameid' => $projectArray['pid'], 'ptypeid' => $stArray['stid'], 'BidName' => $MeasureArray['pmname']);
                echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $downfileurl), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => TRUE, 'msg' => '暂无更新数据'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '更新查询参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 手动创建第二期的审批人
     */
    function creatTenderNumPnameUser()
    {
        if (isset($_POST['tenderid']) && isset($_POST['phaseno']) && ($_POST['phaseno'] > 1)) {
            $allMeasureUser = $this->measureauditact->getUserAudit($_POST['tenderid'], $_POST['phaseno'] - 1);
            if (isset($allMeasureUser)) {
                foreach ($allMeasureUser as $key => $value) {
//		    if ($key == 1) {
//			$status = 'checking';
//		    } else {
                    $status = 'uncheck';
//		    }
                    try {
                        $this->measureauditact->insertMeasureAudit($value['pid'], $value['creatoruid'], $value['auditoruid'], $value['mpid'], $value['pmid'], $value['stid'], $_POST['phaseno'], $status, $value['last']);
                    } catch (Exception $exc) {

                    }
                }
                echo json_encode(array('status' => TRUE, 'msg' => ''), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => FALSE, 'msg' => '审批人员列表不存在'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '创建审批人员列表参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 返回指定用户参与的所有项目
     */
    function getUserALLProject()
    {
        if (!isset($this->params['userid']) || !($this->params['userid'] > 0)) {
            echo json_encode(array('status' => FALSE, 'msg' => '返回指定用户参与的所有项目参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
        $conArray = $this->contractact->getUserRow($this->params['userid']);
        if (isset($conArray) && $conArray) {
            foreach ($conArray as $key => $value) {
                $proArray = $this->project->getRowByPid($value['pid']);
                $attfileArray = $this->attfile->getLastData($value['stid']);
                foreach ($attfileArray as $k => $v) {
                    $pathinfo = pathinfo($v['filepath']);
                    $retArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'proName' => $proArray['pname'], 'stName' => $value['stname'], 'MD5_Jl' => $v['filehashcode']);
                }
            }
            echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $retArray), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            $userproArray = $this->measureauditact->getProject($this->params['userid']);
            if (isset($userproArray) && $userproArray) {
                foreach ($userproArray as $upk => $upv) {
                    $attArray = $this->attfile->getMeasureLastNew($upv['pmid'], $upv['numpname']);
                    $proArray = $this->project->getRowByPid($attArray['pid']);
                    $attfileArray = $this->contractact->getRowByStid($attArray['stid']);
                    $pathinfo = pathinfo($attArray['filepath']);
                    if (isset($pathinfo['dirname']))
                        $newattArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo ['dirname'] . '/' . $pathinfo ['filename'] . '/ProjectFile.rmf', 'proName' => $proArray['pname'], 'stName' => $attfileArray['stname'], 'MD5_Jl' => $attArray['filehashcode']);
                }
                echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $newattArray), JSON_UNESCAPED_UNICODE);
                die();
            }
        }
    }

    /**
     * 设置审批未通过操作
     * 第一步设置未通过操作，操作相关期数。 同步状态。
     * 第二步设置项目查询接口未通过审批的查询返回未锁定的
     * 第三步前台相关状态更新
     *
     * TODO: 更新附件标志位未加入次数标志做更新 ok
     * TODO: 不通过两次未通过时候操作期数状态为错误位同步状态位 ok
     * TODO: MPID未通过操作不争取 ok
     */
    function setCheckno()
    {
        if (isset($this->params['userid']) && isset($this->params['tenderid']) && isset($this->params['phaseno']) && isset($_POST['MD5_JL']) && isset($_POST['MD5_Zip'])) {
            $auditcontent = iconv('GBK', 'UTF-8', $_POST['CheckerMemo']);
            $auditArrayStatus = $this->measureauditact->getLastNewRowInfo($this->params['tenderid'], $this->params['phaseno'], $this->params['userid']);
            if (isset($auditArrayStatus ['mastatus']) && (($auditArrayStatus ['mastatus'] == 'checked') || ($auditArrayStatus ['mastatus'] == 'checkno'))) {
                echo json_encode(array('status' => FALSE, 'msg' => '该标段已审批完毕。'), JSON_UNESCAPED_UNICODE);
                die();
            }
            $auditArray = $this->measureauditact->getRowInfo($this->params['tenderid'], $this->params['phaseno'], $this->params['userid']);
            if (isset($auditArray['maid'])) {
                $intMaxTimes = $this->numofperact->getMaxTimes($this->params['tenderid'], $this->params['phaseno']);
                if (isset($intMaxTimes['times'])) {
                    $iniTimes = $intMaxTimes['times'];
                }
                $this->measureauditact->setCheckno($auditArray['maid'], $auditcontent);
                $this->numofperact->updateAuditStatus($this->params['tenderid'], $this->params['phaseno'], 'checkno', $iniTimes);
                $fp = $this->upfile('upfile');
                if (isset($fp[0]['filepath'])) {
                    // 解压缩文件等待以后直接使用
                    // TODO：根据校验码校验包的完整性
                    $localmd5HashString = hash_file("md5", Doo::conf()->SITE_PATH . $fp[0]['filepath']);
                    if ($localmd5HashString != trim($_POST['MD5_Zip'])) {
                        $status = array('status' => 'FALSE', 'msg' => '未通过期数数据上传失败,请重新上传');
                        echo json_encode($status, JSON_UNESCAPED_UNICODE);
                        die();
                    }
                    $res = $this->zip->open(Doo::conf()->SITE_PATH . $fp[0]['filepath']);
                    $extPath = pathinfo($fp[0]['filepath']);
                    $extPathdir = Doo::conf()->SITE_PATH . $extPath ['dirname'] . '/' . $extPath['filename'];
                    if ($res === TRUE) {
                        if (!$this->dir_create($extPathdir)) {
                            return FALSE;
                        }
                        $this->zip->extractTo($extPathdir);
                        $this->zip->close();
                    }
                    $numArray = $this->numofperact->getRow($this->params['tenderid'], $this->params['phaseno'], $iniTimes);
                    // 插入附件表之前要更新所有次标段期数的提交的数据状态为旧标志
                    $this->attfile->setOldfileFlag($this->params['tenderid'], $this->params['phaseno'], $iniTimes);
                    // 插入此次提交的文件路径数据并设置为新状态
                    $this->attfile->insertFile($auditArray['pid'], $auditArray['stid'], $auditArray['mpid'], $this->params['tenderid'], $this->params['phaseno'], $this->params['userid'], $fp[0]['filepath'], 0, $_POST['MD5_JL'], $iniTimes);
                    echo json_encode(array('status' => TRUE, 'msg' => ''), JSON_UNESCAPED_UNICODE);
                    die();
                } else {
                    echo json_encode(array('status' => FALSE, 'msg' => '文件上传故障'), JSON_UNESCAPED_UNICODE);
                    die();
                }
            } else {
                echo json_encode(array('status' => FALSE, 'msg' => '审批期数不存在'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '审批未通过参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 创建未通过的新一期
     *
     */
    function createNewAudit()
    {
        // 插入上次期数相关审批人员
        // TODO:
//	error_log(var_export($this->params, TRUE), 3, '/opt/html/jiliang_customedProduct/data/' . time());
//	die;
        if (isset($this->params['tenderid']) && isset($this->params['phaseno'])) {
            $auditArray = $this->numofperact->getChecknoRow($this->params['tenderid'], $this->params['phaseno']);
            if (isset($auditArray['currstatus']) && ($auditArray['currstatus'] == 'checkno')) {
                $isCreate = false;
                $auditUserArray = $this->measureauditact->getUserAuditLast($this->params['tenderid'], $this->params['phaseno']);
                foreach ($auditUserArray as $key => $value) {
                    if ($value['mastatus'] != 'uncheck') {
                        $isCreate = true;
                    }
                }
                if ($auditUserArray && $isCreate) {
                    foreach ($auditUserArray as $key => $value) {
                        $this->measureauditact->insertMeasureAudit($value['pid'], $value['creatoruid'], $value['auditoruid'], $value['mpid'], $value['pmid'], $value['stid'], $value['numpname'], $status = 'uncheck', $value['last'], $auditArray['times'] + 1);
                    }
                } else {
                    echo json_encode(array('status' => FALSE, 'msg' => '无效操作重复创建审批人'), JSON_UNESCAPED_UNICODE);
                    die();
                }
////                $timesArray = $this->numofperact->getMaxTimes($this->params['tenderid'], $this->params['phaseno']);
//                $urlinfoArray = $this->attfile->getLastNewProfileUnlock2($this->params['tenderid'], $this->params['phaseno']);
//                $proArray = $this->project->getRowByPid($urlinfoArray['pid']);
//                $stArray = $this->contractact->getRowByStid($urlinfoArray['stid']);
//                $MeasureArray = $this->actmeasure->getRowByPmid($this->params['tenderid']);
//                $downArray = NULL;
//                $pathinfo = pathinfo($urlinfoArray['filepath']);
//                if (isset($pathinfo['dirname']))
//                    $downArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '/ProjectFile.rmf', 'MD5_Jl' => $urlinfoArray['filehashcode'], 'proName' => $proArray['pname'], 'stName' => $stArray['stname'], 'pnameid' => $proArray['pid'], 'ptypeid' => $stArray['stid'], 'BidName' => $MeasureArray['pmname']);
//                echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $downArray), JSON_UNESCAPED_UNICODE);
                echo json_encode(array('status' => 'TRUE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => FALSE, 'msg' => '审批状态无效'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '创建未通过的新一期参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     * 重做新一期获取原报上报文件
     *
     */
    function getReportFile()
    {
        if (isset($this->params['tenderid']) && isset($this->params['phaseno'])) {
            $auditArray = $this->numofperact->getChecknoRow($this->params['tenderid'], $this->params['phaseno']);
            if (isset($auditArray['currstatus']) && ($auditArray['currstatus'] == 'checkno')) {
                $timesArray = $this->numofperact->getMaxTimes($this->params['tenderid'], $this->params['phaseno']);
                $urlinfoArray = $this->attfile->getReportFile($this->params['tenderid'], $this->params['phaseno'], $timesArray['times']);
                $proArray = $this->project->getRowByPid($urlinfoArray['pid']);
                $stArray = $this->contractact->getRowByStid($urlinfoArray['stid']);
                $MeasureArray = $this->actmeasure->getRowByPmid($this->params['tenderid']);
                $downArray = NULL;
                $pathinfo = pathinfo($urlinfoArray['filepath']);
                if (isset($pathinfo['dirname'])) {
                    $downArray[] = array('downurl' => Doo::conf()->APP_URL . $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '/ProjectFile.rmf', 'MD5_Jl' => $urlinfoArray['filehashcode'], 'proName' => $proArray['pname'], 'stName' => $stArray['stname'], 'pnameid' => $proArray['pid'], 'ptypeid' => $stArray['stid'], 'BidName' => $MeasureArray['pmname']);
                    echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $downArray), JSON_UNESCAPED_UNICODE);
                    die();
                } else {
                    echo json_encode(array('status' => FALSE, 'msg' => '上报文件不存在'), JSON_UNESCAPED_UNICODE);
                    die();
                }

            } else {
                echo json_encode(array('status' => FALSE, 'msg' => '审批状态无效'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => FALSE, 'msg' => '创建未通过的新一期参数错误'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    public function getUserInfo()
    {
        if (isset($this->params['userid']) && ($this->params['userid'] > 0)) {
            $proArray = $this->profile->getProWithUid($this->params['userid']);
            if (isset($proArray['userid'])) {
                $strAvatar = $this->auth->getAvatar($proArray['userid']);
                echo json_encode(array('status' => 'TRUE', 'msg' => '', 'info' => array('avatar' => $strAvatar, 'name' => $proArray['name'], 'jobs' => $proArray['jobs'], 'company' => $proArray['company'])), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => '此用户不存在'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => 'FALSE', 'msg' => '用户查询参数无效'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    public function updateTenderName()
    {
        if (isset($this->params['BidID']) && isset($this->params['BidNewName'])) {
            if ($this->actmeasure->updateName($this->params['BidID'], iconv('GBK', 'UTF-8', $this->params['BidNewName']))) {
                echo json_encode(array('status' => 'TRUE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => '标段名称更新错误'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            echo json_encode(array('status' => 'FALSE', 'msg' => '标段名称更新参数无效'), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

    /**
     *  清单附件上传，单文件上传
     * @param int $tenderid 标段ID
     * @param int $uid 上传人ID
     * @param int $itemid 本地清单ID
     */
    public function uploadItemFile()
    {
        if (isset($this->params['tenderid']) && isset($this->params['uid'])) {
            if (!isset($_FILES['upitem']) && !isset($_POST['itemid']) && !isset($_POST['category']) && !isset($_POST['phase'])) {
                $this->msg(0, '上传参数错误');
            }
            $fileArray = $this->upItemFile('upitem')[0];
            if (isset($fileArray['filepath'])) {
                $pidArray = $this->actmeasure->getRowByPmid($this->params['tenderid']);
                $memoStr = iconv('GBK', 'UTF-8', $_POST['Memo']);
                $fnArray = explode('.', $fileArray['filename']);
                $filenameStr = iconv('GBK', 'UTF-8', $fnArray[0]);
                $postArray = array('ownerid' => $this->params['uid'], 'pid' => $pidArray['pid'], 'pmid' => $this->params['pmid'], 'filename' => $filenameStr, 'filesize' => $fileArray['filesize'], 'fileext' => $fileArray['fileext'], 'filepath' => $fileArray['filepath']);
                $iaid = $this->itemfile->insertItemFileRecord($postArray);
                if ($iaid > 1) {
                    $itemMeasureNumArray = array('iaid' => $iaid, 'pid' => $pidArray['pid'], 'pmid' => $this->params['tenderid'], 'numpname' => $_POST['phase'], 'ownerid' => $this->params['uid'], 'itemid' => $_POST['itemid'], 'categoryid' => array_search($_POST['category'], $this->fileTypeArray), 'tips' => $memoStr);
                    if (($imnid = $this->itemMeasureNum->insert($itemMeasureNumArray)) > 0) {
                        $extPath = pathinfo($fileArray['filepath']);
                        $itemArray = array('onlineFileName' => $extPath['filename'] . '.' . $extPath['extension'], 'imnid' => $imnid);
                        $status = array('status' => TRUE, 'msg' => '', 'iteminfo' => $itemArray);
                        echo json_encode($status, JSON_UNESCAPED_UNICODE);
                        die();
                    } else {
                        $this->msg(0, '附件上传失败，请重新上传.');
                    }
                }
            } else {
                $this->msg(0, '附件上传失败，请重新上传');
            }
        } else {
            $this->msg(0, '上传参数错误');
        }
    }

    /**
     * 获得清单附件列表
     */
    public function getItemFileList()
    {
        if (isset($this->params['tenderid'])) {
            $itemfileArray = $this->itemMeasureNum->getItemMeasureNum($this->params['tenderid']);
            foreach ($itemfileArray as $value) {
                $profileArray = $this->profile->getProWithUid($value['ownerid']);
                $attFileArray = $this->itemfile->getItemFile($value['iaid']);
                if (isset($attFileArray) && $attFileArray && isset($profileArray) && $profileArray)
                    $downArray[] = array('downurl' => Doo::conf()->APP_URL . $attFileArray['filepath'], 'filename' => $attFileArray['filename'] . '.' . $attFileArray['fileext'], 'fileext' => $attFileArray['fileext'], 'ownerName' => $profileArray['name'], 'itemid' => $value['softwareitemid'], 'Category' => $value['categoryid'], 'Memo' => $value['tips'], 'ownerid' => $value['ownerid'], 'uptime' => date('Y-m-d H:i', $value['intime']), 'fileid' => $value['imnid'], 'phase' => $value['numpname']);
            }
            echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $downArray), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            $this->msg(0, '获取附件列表参数错误');
        }
    }

    /**
     * 编辑清单附件描述 文件名？
     */
    public function updateItemFileDesc()
    {
        if (isset($this->params['fileid']) && isset($_POST['FileName']) && isset($_POST['Memo'])) {
            $memoStr = iconv('GBK', 'UTF-8', $_POST['Memo']);
            $filenameStr = iconv('GBK', 'UTF-8', $_POST['FileName']);
            $imnidArray = $this->itemMeasureNum->getRowData($this->params['fileid']);
            if ($this->itemMeasureNum->updateItemFields($this->params['fileid'], $memoStr) > 0) {
                $this->itemfile->updateItemFields($imnidArray['iaid'], $filenameStr);
                echo json_encode(array('status' => 'TRUE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => '附件更新接口参数错误'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            $this->msg(0, '附件更新接口参数错误');
        }
    }

    /**
     * 删除清单附件
     */
    public function delItemFile()
    {
        if (isset($this->params['fileid'])) {
            $this->itemMeasureNum->delItemFields($this->params['fileid']);
            echo json_encode(array('status' => 'TRUE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            $this->msg(0, '关联删除接口参数错误');
        }
    }

    /**
     * @return attachment
     */
    public function getAttaFilesAll()
    {
        if (isset($this->params['tenderid'])) {
            $itemfileArray = $this->itemfile->getFilesAll($this->params['tenderid']);
            foreach ($itemfileArray as $value) {
//                $profileArray = $this->profile->getProWithUid($value['ownerid']);
//                $attFileArray = $this->itemfile->getItemFile($value['iaid']);
//                if (isset($attFileArray) && $attFileArray && isset($profileArray) && $profileArray)
                $filesArray[] = array('downurl' => Doo::conf()->APP_URL . $value['filepath'], 'filename' => $value['filename'] . '.' . $value['fileext'], 'fileext' => $value['fileext'], 'fileid' => $value['iaid']);
            }
            echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $filesArray), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            $this->msg(0, '获取附件列表参数错误');
        }
    }

    /**
     * @return attachment
     */
    public function createAttWithTender()
    {
        if (isset($this->params['tenderid'])) {
            $itemfileArray = $this->itemfile->getFilesAll($this->params['tenderid']);
            foreach ($itemfileArray as $value) {
//                $profileArray = $this->profile->getProWithUid($value['ownerid']);
//                $attFileArray = $this->itemfile->getItemFile($value['iaid']);
//                if (isset($attFileArray) && $attFileArray && isset($profileArray) && $profileArray)
                $filesArray[] = array('downurl' => Doo::conf()->APP_URL . $value['filepath'], 'filename' => $value['filename'] . '.' . $value['fileext'], 'fileext' => $value['fileext'], 'fileid' => $value['iaid']);
            }
            echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $filesArray), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            $this->msg(0, '获取附件列表参数错误');
        }
    }

    /**
     *   查询指定项目的指定期的全部审批意见。
     *   标段ID，期号
     */
    public function getAuditOpinion()
    {
        if (isset($this->params['tenderid']) && isset($this->params['phaseno'])) {
            $retval = $this->measureauditact->getAuditOpinion($this->params['tenderid'], $this->params['phaseno']);
            $iterator = new ArrayIterator($retval);
            if (iterator_count($iterator) > 0) {
                foreach ($retval as $value) {
                    $proArray = $this->profile->getProWithUid($value['auditoruid']);
                    $uArray[] = array('realname' => $proArray['name'], 'jobs' => $proArray['jobs'], 'acontent' => $value['auditcontent']);
                }
                echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => $uArray), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => '查询指定项目的指定期的全部审批意见参数错误'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            $this->msg(0, '查询指定项目的指定期的全部审批意见接口参数错误');
        }
    }

    function upfile($fildname, $param = 'doc, docx, xls, xlsx, png, zip')
    {
        return $this->att->uploadMut($fildname, $param);
    }

    function upItemFile($fildname, $param = 'doc, docx, xls, xlsx, png, zip')
    {
        $this->att->setUploadDir();
        return $this->att->uploadMut($fildname, $param);
    }

    /**
     *   根据标段ID获取标段是否已经被删除的提示
     *   标段ID
     */
    public function getCountPmid()
    {
        if (isset($this->params['tenderid'])) {
            $isexist = $this->actmeasure->getCountPmid($this->params['tenderid']);
            if ($isexist > 0) {
                echo json_encode(array('status' => TRUE, 'msg' => '', 'info' => null), JSON_UNESCAPED_UNICODE);
                die();
            } else {
                echo json_encode(array('status' => 'FALSE', 'msg' => '该项目[XXX]在云端已被删除，点击“确定”后，可手动删除该项目'), JSON_UNESCAPED_UNICODE);
                die();
            }
        } else {
            $this->msg(0, '获取标段是否存在参数错误');
        }
    }

    function getFileupErrorNo()
    {
        return $this->att->error();
    }

    function Signout()
    {
        session_destroy();
    }

    function isLoggedIn()
    {
        return isset($_SESSION['user_id']);
    }

    function generateFormHash($salt)
    {
        $hash = md5(mt_rand(1, 1000000) . $salt);
        $_SESSION['csrf_hash'] = $hash;
        return $hash;
    }

    function isValidFormHash($hash)
    {
        return $_SESSION['csrf_hash'] === $hash;
    }

    /**
     * 随机字符串函数
     * @param $password 密码
     * @param $random 随机数
     */
    function random($length, $chars = '0123456789')
    {
        $hash = '';
        $max = strlen($chars) - 1;
        for ($i = 0; $i < $length; $i++) {
            $hash .= $chars[mt_rand(0, $max)];
        }
        return $hash;
    }

    /**
     * 生成随机字符串
     * @param string $lenth 长度
     * @return string 字符串
     */
    function create_randomstr($lenth = 6)
    {
        return $this->random($lenth, '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ');
    }

    function dir_create($path, $mode = 0777)
    {
        if (is_dir($path))
            return TRUE;
        $path = $this->dir_path($path);
        $parent = dirname($path);
        if (!is_dir($parent))
            @mkdir($parent, 0777, true);
        @mkdir($path, 0777, true);
        return is_dir($path);
    }

    function dir_path($path)
    {
        $path = str_replace('\\', '/', $path);
        if (substr($path, -1) != '/')
            $path = $path . '/';
        return $path;
    }

    function msg($isTrue = 0, $msg = null, $retmsg = null)
    {
        if ($isTrue > 0) {
            echo json_encode(array('status' => 'TRUE', 'msg' => ''), JSON_UNESCAPED_UNICODE);
            die();
        } else {
            echo json_encode(array('status' => 'FALSE', 'msg' => $msg), JSON_UNESCAPED_UNICODE);
            die();
        }
    }

}

?>
