SignController.php 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094
  1. <?php
  2. //ini_set('display_errors', on);
  3. Doo::loadClass('auth');
  4. Doo::loadClass('attfile');
  5. Doo::loadClass('profile');
  6. Doo::loadClass('project');
  7. Doo::loadClass('contractact');
  8. Doo::loadClass('actmeasure');
  9. Doo::loadClass('numofperact');
  10. Doo::loadClass('measureauditact');
  11. Doo::loadClass('sign');
  12. Doo::loadClass('sms');
  13. Doo::loadModelAt('aconfig', 'admin');
  14. //define('FPDF_FONTPATH','protected/class/fpdf1.5/font/');
  15. //Doo::loadClass('fpdf');
  16. /* * proDetail
  17. * MainController
  18. * Feel free to delete the methods and replace them with your own code.
  19. *
  20. * @author darkredz
  21. */
  22. class SignController extends DooController
  23. {
  24. private $aconfig, $data, $sms, $sign, $auth, $attfile, $profile, $project, $contractact, $actmeasure, $measureauditact, $numofperact, $statusArray = array('uncheck' => '<span class = "colGray">未审批</span>', 'checking' => '<span class = "colOrange">审批中</span>', 'checked' => '<span class = "colGreen">审批通过</span>', 'checkno' => '<span class = "colRed">审批不通过</span>');
  25. public function beforeRun($resource, $action)
  26. {
  27. if ($this->auth->getUid()) {
  28. $uGroups = $this->profile->getProWithUid($this->auth->getUid());
  29. $falg = Doo::acl()->isAllowed($uGroups['groups'], $resource, $action);
  30. if (!$falg)
  31. return Doo::acl()->defaultFailedRoute;
  32. } else {
  33. return Doo::acl()->defaultFailedRoute;
  34. }
  35. }
  36. public function __construct()
  37. {
  38. $this->aconfig = new AConfig();
  39. $this->auth = new Auth();
  40. $this->attfile = new attFile();
  41. $this->profile = new Profile();
  42. $this->project = new Project();
  43. $this->contractact = new Contractact();
  44. $this->actmeasure = new actMeasure();
  45. $this->numofperact = new NumofperAct();
  46. $this->measureauditact = new MeasureauditAct();
  47. $this->sign = new Signn();
  48. $this->sms = new Sms(Doo::conf()->SMS_URL, Doo::conf()->SMS_AUTHKEY);
  49. // $this->pdf = new FPDF('P','mm','A4');
  50. $this->data['rootUrl'] = Doo::conf()->APP_URL;
  51. $this->data['currChannle'] = 'sign';
  52. $this->data['user'] = $this->profile->getProWithUid($this->auth->getUid());
  53. $mpidArray = $this->measureauditact->getAuditProject2($this->auth->getUid());
  54. $this->data['numofchecking'] = 0;
  55. if (isset($mpidArray[0]['pid'])) {
  56. foreach ($mpidArray as $key => $value) {
  57. // 审批操作按照时间排序多标段
  58. $this->data['numofchecking'] += $this->measureauditact->getCountMyChecking($value['pid'], $this->auth->getUid());
  59. }
  60. }
  61. if (!isset($this->data['numofchecking']) || $this->data['numofchecking'] == 0) {
  62. $this->data['numofchecking'] = null;
  63. }
  64. $signSwitch = $this->aconfig->getOne(array('select' => 'signswitch', 'asArray' => TRUE))['signswitch'];
  65. if ($signSwitch == 0)
  66. exit('未开启在线签名功能');
  67. $this->data['signSwitch'] = $signSwitch;
  68. //获取需要您签署的数目
  69. $this->data['needSignNum'] = $this->sign->getNeedSignNumbyUid($this->auth->getUid()) != 0 ? $this->sign->getNeedSignNumbyUid($this->auth->getUid()) : '';
  70. }
  71. /**
  72. *
  73. * @return type
  74. */
  75. public function index()
  76. {
  77. //获取我发起的签署数目
  78. $this->data['mySignNum'] = $this->sign->getMySignNumbyUid($this->auth->getUid());
  79. //获取关于我的正在签署数目
  80. $this->data['doingSignNum'] = $this->sign->getDoingSignNumbyUid($this->auth->getUid());
  81. //获取关于我的完成签署数目
  82. $this->data['doneSignNum'] = $this->sign->getDoneSignNumbyUid($this->auth->getUid());
  83. $this->data['launchsign'] = $this->aconfig->getOne(array('select' => 'launchsignswitch', 'asArray' => TRUE))['launchsignswitch'];
  84. $this->render('sign-index', $this->data, TRUE);
  85. }
  86. public function signNeedList(){
  87. $needlist = array();
  88. $searchsql = 'sid in(select `jl_sign_audit`.sid from `jl_sign_audit` where `jl_sign_audit`.status="checking" and `jl_sign_audit`.audituid='.$this->auth->getUid().')';
  89. $projectlist = $this->sign->getSignGroupByProject($searchsql);
  90. if(!empty($projectlist)){
  91. foreach($projectlist as $k => $v){
  92. $projectmsg = $this->project->getRowByPid($v['project']);
  93. $needlist[$k]['project'] = $projectmsg['pname'];
  94. $needlist[$k]['tlist'] = array();
  95. $tenderlist = $this->sign->getSignGroupByTender($v['project'],$searchsql);
  96. if(!empty($tenderlist)) {
  97. foreach ($tenderlist as $tk => $tv) {
  98. $tendermsg = $this->actmeasure->getRowByPmid($tv['tender']);
  99. $needlist[$k]['tlist'][$tk]['tender'] = $tendermsg['pmname'];
  100. $needlist[$k]['tlist'][$tk]['plist'] = array();
  101. $phasenolist = $this->sign->getSignGroupByPhaseno($tv['tender'],$searchsql);
  102. if(!empty($phasenolist)) {
  103. foreach ($phasenolist as $pk => $pv) {
  104. // $phasenomsg = $this->numofperact->getCurrStatus($pv['phaseno']);
  105. $needlist[$k]['tlist'][$tk]['plist'][$pk]['phaseno'] = $pv['phaseno'];
  106. $needlist[$k]['tlist'][$tk]['plist'][$pk]['signlist'] = array();
  107. $signlist = $this->sign->getSignList($searchsql.' and (status="checking" or status="back") and tender='.$tv['tender'].' and phaseno='.$pv['phaseno'], '0,1000');
  108. if(!empty($signlist)) {
  109. foreach ($signlist as $sk => $sv) {
  110. $needlist[$k]['tlist'][$tk]['plist'][$pk]['signlist'][$sk]['sid'] = $sv['sid'];
  111. $needlist[$k]['tlist'][$tk]['plist'][$pk]['signlist'][$sk]['name'] = $sv['name'];
  112. $needlist[$k]['tlist'][$tk]['plist'][$pk]['signlist'][$sk]['auditlist'] = $this->sign->getSignAuditlist($sv['sid']);
  113. }
  114. }
  115. }
  116. }
  117. }
  118. }
  119. }
  120. }
  121. $this->data['needlist'] = $needlist;
  122. $this->render('sign-list-need_sign',$this->data, TRUE);
  123. }
  124. public function signNeedView(){
  125. if(!isset($this->params['sid']) || !is_numeric($this->params['sid'])){
  126. exit('没有报表参数');
  127. }
  128. $issign = $this->sign->getisSignbySidUid($this->params['sid'],$this->auth->getUid());
  129. if(empty($issign)){
  130. exit('不是当前签署人无法访问本页');
  131. }
  132. if(isset($_POST['status'])){
  133. //终止签署
  134. if($_POST['status'] == 'stop'){
  135. $result = $this->sign->updateSignStatusAndTime($this->params['sid'],'stop',time());
  136. $signAudit = $this->sign->getOneSignAudit($this->params['sid'],$this->auth->getUid());
  137. $result2 = $this->sign->updateSignAudit($signAudit['satid'],'stop',time());
  138. if($result && $result2){
  139. // SMS Start
  140. $signArray = $this->sign->getOneSignbysid($this->params['sid']);
  141. $pmname = $this->actmeasure->getRowByPmid($signArray['tender']);
  142. $userProArray = $this->profile->getProWithUid($signArray['audituid']);
  143. if (isset($userProArray) && !empty($userProArray['mobile'])) {
  144. $sendarr1 = '“' .$pmname['pmname'].'”的“'. $signArray["name"] .'”';
  145. $sendarr2 = str_replace('【','',$sendarr1);
  146. $sendmsg = str_replace('】','',$sendarr2);
  147. $retval = $this->__auditNotice($userProArray['mobile'], Doo::conf()->SMS_TIPS_PRE . $sendmsg .Doo::conf()->SMS_TIPS["AUDIT_NOTICE_AUDITOR6"]);
  148. }
  149. // SMS End
  150. echo json_encode(array('code' => 200, 'url' => '/sign/list'));
  151. exit;
  152. }
  153. echo json_encode(array('code' => 400, 'msg' => '终止签署失败'));
  154. exit;
  155. }elseif($_POST['status'] == 'back'){
  156. $signauditlist = $this->sign->getSignAuditList($this->params['sid']);
  157. $change = -1;
  158. foreach($signauditlist as $k => $v){
  159. if($v['status'] == 'checking' && $k != 0) {
  160. $change = $k-1;
  161. break;
  162. }
  163. }
  164. if($change != -1){
  165. $result = $this->sign->updateSignStatusAndTime($this->params['sid'],'back',time());
  166. $signAudit = $this->sign->getOneSignAudit($this->params['sid'],$this->auth->getUid());
  167. $result3 = $this->sign->updateSignAudit($signAudit['satid'],'uncheck',0);
  168. $result2 = $this->sign->updateSignAudit($signauditlist[$change]['satid'],'checking',0);
  169. if($result && $result2 && $result3){
  170. //删除上一个签名者的所有签名
  171. $signattlist = $this->sign->getSignAttList($this->params['sid']);
  172. foreach($signattlist as $key => $value){
  173. $sign2 = new SignAuditAtt();
  174. $sign2->audituid = $signauditlist[$change]['audituid'];
  175. $sign2->said = $value['said'];
  176. $sign2->delete();
  177. }
  178. // SMS Start
  179. $signArray = $this->sign->getOneSignbysid($this->params['sid']);
  180. $pmname = $this->actmeasure->getRowByPmid($signArray['tender']);
  181. $userProArray = $this->profile->getProWithUid($signauditlist[$change]['audituid']);
  182. if (isset($userProArray) && !empty($userProArray['mobile'])) {
  183. $sendarr1 = '“' .$pmname['pmname'].'”的“'. $signArray["name"] .'”';
  184. $sendarr2 = str_replace('【','',$sendarr1);
  185. $sendmsg = str_replace('】','',$sendarr2);
  186. $retval = $this->__auditNotice($userProArray['mobile'], Doo::conf()->SMS_TIPS_PRE . $sendmsg .Doo::conf()->SMS_TIPS["AUDIT_NOTICE_AUDITOR7"]);
  187. }
  188. // SMS End
  189. echo json_encode(array('code' => 200, 'url' => '/sign/onlist'));
  190. exit;
  191. }
  192. }
  193. echo json_encode(array('code' => 400, 'msg' => '退回签署失败'));
  194. exit;
  195. }
  196. }
  197. //获取报表信息
  198. $signmsg = $this->sign->getOneSignbysid($this->params['sid']);
  199. //获取项目名,标段名,标段期数
  200. $project = $this->project->getRowByPid($signmsg['project']);
  201. $tender = $this->actmeasure->getRowByPmid($signmsg['tender']);
  202. // $phaseno = $this->numofperact->getCurrStatus($signmsg['phaseno']);
  203. $signmsg['project'] = $project['pname'];
  204. $signmsg['tender'] = $tender['pmname'];
  205. // $signmsg['phaseno'] = $phaseno['numpname'];
  206. //获取签署人列表
  207. $firstsign = 0;
  208. $signauditlist = $this->sign->getSignAuditList($this->params['sid']);
  209. if(!empty($signauditlist)){
  210. foreach($signauditlist as $k => $v){
  211. //获取签署人头像
  212. $signauditlist[$k]['index'] = $k+1;
  213. $signauditlist[$k]['avatar'] = $this->auth->getAvatar($v['audituid']);
  214. if($this->auth->getUid() == $v['audituid'] && $k == 0){
  215. $firstsign = 1;
  216. }
  217. }
  218. }
  219. //获取报表图片
  220. $maxwidth = 794; //默认图片最大宽度 a4
  221. $maxheight = 1123; //默认图片最大高度 a4
  222. if(!empty($signmsg['widhei'])){
  223. $widhei = explode('_', $signmsg['widhei']);
  224. $style = $widhei[0].'mm '.$widhei[1].'mm';
  225. }else{
  226. $style = '210mm 297mm';
  227. }
  228. $signattlist = $this->sign->getSignAttList($this->params['sid']);
  229. if(!empty($signattlist)){
  230. foreach($signattlist as $sak => $sav){
  231. $signattlist[$sak]['auditatt'] = $this->sign->getSignAuditAttList($sav['said']);
  232. if($sak == 0){
  233. $imgmsg = getimagesize(Doo::conf()->APP_URL.$sav['filepath']);
  234. $maxwidth = $imgmsg[0];
  235. $maxheight = $imgmsg[1];
  236. }
  237. }
  238. }
  239. $this->data['signmsg'] = $signmsg;
  240. $this->data['auditlist'] = $signauditlist;
  241. $this->data['attlist'] = $signattlist;
  242. $this->data['picpath'] = $this->auth->getSignpath($this->auth->getUid());
  243. $this->data['signsid'] = $this->params['sid'];
  244. $this->data['maxwidth'] = $maxwidth;
  245. $this->data['maxheight'] = $maxheight;
  246. $this->data['style'] = $style;
  247. $this->data['firstsign'] = $firstsign;
  248. $this->render('sign-view-signer_sign',$this->data, TRUE);
  249. }
  250. public function signDone(){
  251. if(!isset($_POST['sid']) || !is_numeric($_POST['sid'])){
  252. echo json_encode(array('code' => 400, 'msg' => '没有报表参数'));
  253. exit;
  254. }
  255. if(!isset($_POST['path']) || empty($_POST['path'])){
  256. echo json_encode(array('code' => 400, 'msg' => '没有签名图片'));
  257. exit;
  258. }
  259. //改变签署状态并判断报表是否签署完成或传到下一个签署人签署
  260. $signAudit = $this->sign->getOneSignAudit($_POST['sid'],$this->auth->getUid());
  261. $result = $this->sign->updateSignAudit($signAudit['satid'],'checked');
  262. foreach($_POST['said'] as $satk => $satv){
  263. $sign3 = new Signn();
  264. $sign3->insertSignAuditAtt($this->auth->getUid(),$satv,$_POST['path'],$_POST['position'][$satk]);
  265. }
  266. if($result){
  267. $sign2 = new Signn();
  268. $signAuditList = $sign2->getSignAuditList($_POST['sid']);
  269. $flag = true;
  270. foreach($signAuditList as $k => $v){
  271. if($v['status'] == 'uncheck'){
  272. $sign2->updateSignAudit($v['satid'],'checking');
  273. $flag = false;
  274. //发送签署短信
  275. // SMS Start
  276. $signArray = $this->sign->getOneSignbysid($_POST['sid']);
  277. $pmname = $this->actmeasure->getRowByPmid($signArray['tender']);
  278. $userProArray = $this->profile->getProWithUid($v['audituid']);
  279. if (isset($userProArray) && !empty($userProArray['mobile'])) {
  280. $sendarr1 = '“' .$pmname['pmname'].'”的“'. $signArray["name"] .'”';
  281. $sendarr2 = str_replace('【','',$sendarr1);
  282. $sendmsg = str_replace('】','',$sendarr2);
  283. $retval = $this->__auditNotice($userProArray['mobile'], Doo::conf()->SMS_TIPS_PRE . $sendmsg .Doo::conf()->SMS_TIPS["AUDIT_NOTICE_AUDITOR5"]);
  284. }
  285. // SMS End
  286. break;
  287. }
  288. }
  289. if($flag){
  290. $this->sign->updateSignStatus($_POST['sid']);
  291. echo json_encode(array('code' => 200, 'url' => '/sign/view/'.$_POST['sid'].'?status=done'));
  292. exit;
  293. }else{
  294. $this->sign->updateSignStatusAndTime($_POST['sid'],'checking',0);
  295. echo json_encode(array('code' => 200, 'url' => '/sign/view/'.$_POST['sid'].'?status=doing'));
  296. exit;
  297. }
  298. }else{
  299. echo json_encode(array('code' => 400, 'msg' => '签署失败'));
  300. exit;
  301. }
  302. }
  303. public function signMyList(){
  304. Doo::loadHelper('DooPager');
  305. $pagestr = '';
  306. $sqlstr = ' 1';
  307. $this->data['project'] = '';
  308. $this->data['tender'] = '';
  309. $this->data['phaseno'] = '';
  310. //获取项目信息
  311. $searchsql = 'audituid='.$this->auth->getUid();
  312. $itemlist = $this->sign->getSignGroupByProject($searchsql);
  313. if(!empty($itemlist)){
  314. foreach($itemlist as $ik => $iv){
  315. $itemmsg = $this->project->getRowByPid($iv['project']);
  316. $itemlist[$ik]['pname'] = $itemmsg['pname'];
  317. }
  318. }
  319. if(isset($this->params['pid']) && is_numeric($this->params['pid'])){
  320. $this->data['project'] = $this->params['pid'];
  321. $pagestr .= '/project/'.$this->params['pid'];
  322. $sqlstr .= ' and project='.$this->params['pid'];
  323. //获取标段信息
  324. $tenderlist = $this->sign->getSignGroupByTender($this->params['pid'],$searchsql);
  325. if(!empty($tenderlist)){
  326. foreach($tenderlist as $tk => $tv){
  327. $tendermsg = $this->actmeasure->getRowByPmid($tv['tender']);
  328. $tenderlist[$tk]['pmname'] = $tendermsg['pmname'];
  329. }
  330. }
  331. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  332. $this->data['tender'] = $this->params['pmid'];
  333. $pagestr .= '/tender/'.$this->params['pmid'];
  334. $sqlstr .= ' and tender='.$this->params['pmid'];
  335. //获取期数信息
  336. $phasenolist = $this->sign->getSignGroupByPhaseno($this->params['pmid'],$searchsql);
  337. if(!empty($phasenolist)){
  338. foreach($phasenolist as $pk => $pv){
  339. // $phasenomsg = $this->numofperact->getCurrStatus($pv['phaseno']);
  340. $phasenolist[$pk]['numpname'] = $pv['phaseno'];
  341. }
  342. }
  343. if(isset($this->params['mpid']) && is_numeric($this->params['mpid'])){
  344. $this->data['phaseno'] = $this->params['mpid'];
  345. $pagestr .= '/phaseno/'.$this->params['mpid'];
  346. $sqlstr .= ' and phaseno='.$this->params['mpid'];
  347. }
  348. }
  349. }
  350. $totalArchive = $this->sign->getMySignNumbyUid($this->auth->getUid(),$sqlstr);
  351. $pager = new DooPager(Doo::conf()->APP_URL . 'sign/mylist'.$pagestr.'/page', $totalArchive, 10, 100);
  352. $pager->setCss('', 'disabled', 'active');
  353. if (isset($this->params['pindex']))
  354. $pager->paginate(intval($this->params['pindex']));
  355. else
  356. $pager->paginate(1);
  357. if ($pager->limit != ' -10,10')
  358. $mylist = $this->sign->getMySignListbyUid($this->auth->getUid(), $sqlstr, $pager->limit);
  359. if(isset($mylist) && !empty($mylist)){
  360. foreach($mylist as $k => $v){
  361. //获取项目名,标段名,标段期数
  362. $project = $this->project->getRowByPid($v['project']);
  363. $tender = $this->actmeasure->getRowByPmid($v['tender']);
  364. // $phaseno = $this->numofperact->getCurrStatus($v['phaseno']);
  365. $mylist[$k]['project'] = $project['pname'];
  366. $mylist[$k]['tender'] = $tender['pmname'];
  367. // $mylist[$k]['phaseno'] = $phaseno['numpname'];
  368. }
  369. }
  370. $this->data['mylist'] = isset($mylist) ? $mylist : '';
  371. $this->data['itemlist'] = $itemlist;
  372. $this->data['tenderlist'] = isset($tenderlist) ? $tenderlist : '';
  373. $this->data['phasenolist'] = isset($phasenolist) ? $phasenolist : '';
  374. $this->data['pager'] = $pager->output;
  375. $this->render('sign-list-my_create',$this->data, TRUE);
  376. }
  377. public function signChangeShare(){
  378. if(!isset($_GET['status']) || !isset($_GET['sid'])){
  379. echo json_encode(array('code' => '400', 'msg' => '请传递正确的参数'));
  380. exit;
  381. }
  382. $status = $_GET['status'] == "true" ? 1 : 0;
  383. $result = $this->sign->updateSignShareStatus($status,$_GET['sid']);
  384. if($result){
  385. echo json_encode(array('code' => '200', 'status' => $status));
  386. exit;
  387. }else{
  388. echo json_encode(array('code' => '400', 'msg' => '无法分享'));
  389. exit;
  390. }
  391. exit;
  392. }
  393. public function signOnList(){
  394. Doo::loadHelper('DooPager');
  395. $pagestr = '';
  396. $sqlstr = ' 1';
  397. $this->data['project'] = '';
  398. $this->data['tender'] = '';
  399. $this->data['phaseno'] = '';
  400. //获取项目信息
  401. $searchsql = '(status="checking" or status="back") and sid in(select `jl_sign_audit`.sid from `jl_sign_audit` where `jl_sign_audit`.audituid='.$this->auth->getUid().')';
  402. $itemlist = $this->sign->getSignGroupByProject($searchsql);
  403. if(!empty($itemlist)){
  404. foreach($itemlist as $ik => $iv){
  405. $itemmsg = $this->project->getRowByPid($iv['project']);
  406. $itemlist[$ik]['pname'] = $itemmsg['pname'];
  407. }
  408. }
  409. if(isset($this->params['pid']) && is_numeric($this->params['pid'])){
  410. $this->data['project'] = $this->params['pid'];
  411. $pagestr .= '/project/'.$this->params['pid'];
  412. $sqlstr .= ' and project='.$this->params['pid'];
  413. //获取标段信息
  414. $tenderlist = $this->sign->getSignGroupByTender($this->params['pid'],$searchsql);
  415. if(!empty($tenderlist)){
  416. foreach($tenderlist as $tk => $tv){
  417. $tendermsg = $this->actmeasure->getRowByPmid($tv['tender']);
  418. $tenderlist[$tk]['pmname'] = $tendermsg['pmname'];
  419. }
  420. }
  421. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  422. $this->data['tender'] = $this->params['pmid'];
  423. $pagestr .= '/tender/'.$this->params['pmid'];
  424. $sqlstr .= ' and tender='.$this->params['pmid'];
  425. //获取期数信息
  426. $phasenolist = $this->sign->getSignGroupByPhaseno($this->params['pmid'],$searchsql);
  427. if(!empty($phasenolist)){
  428. foreach($phasenolist as $pk => $pv){
  429. // $phasenomsg = $this->numofperact->getCurrStatus($pv['phaseno']);
  430. $phasenolist[$pk]['numpname'] = $pv['phaseno'];
  431. }
  432. }
  433. if(isset($this->params['mpid']) && is_numeric($this->params['mpid'])){
  434. $this->data['phaseno'] = $this->params['mpid'];
  435. $pagestr .= '/phaseno/'.$this->params['mpid'];
  436. $sqlstr .= ' and phaseno='.$this->params['mpid'];
  437. }
  438. }
  439. }
  440. $totalArchive = $this->sign->getDoingSignNumbyUid($this->auth->getUid(),$sqlstr);
  441. $pager = new DooPager(Doo::conf()->APP_URL . 'sign/onlist'.$pagestr.'/page', $totalArchive, 10, 100);
  442. $pager->setCss('', 'disabled', 'active');
  443. if (isset($this->params['pindex']))
  444. $pager->paginate(intval($this->params['pindex']));
  445. else
  446. $pager->paginate(1);
  447. if ($pager->limit != ' -10,10')
  448. $onlist = $this->sign->getDoingSignListbyUid($this->auth->getUid(), $sqlstr, $pager->limit);
  449. if(isset($onlist) && !empty($onlist)){
  450. foreach($onlist as $k => $v){
  451. //获取项目名,标段名,标段期数
  452. $project = $this->project->getRowByPid($v['project']);
  453. $tender = $this->actmeasure->getRowByPmid($v['tender']);
  454. // $phaseno = $this->numofperact->getCurrStatus($v['phaseno']);
  455. $onlist[$k]['project'] = $project['pname'];
  456. $onlist[$k]['tender'] = $tender['pmname'];
  457. // $onlist[$k]['phaseno'] = $phaseno['numpname'];
  458. $onlist[$k]['auditlist'] = $this->sign->getSignAuditList($v['sid']);
  459. }
  460. }
  461. $this->data['onlist'] = isset($onlist) ? $onlist : '';
  462. $this->data['itemlist'] = $itemlist;
  463. $this->data['tenderlist'] = isset($tenderlist) ? $tenderlist : '';
  464. $this->data['phasenolist'] = isset($phasenolist) ? $phasenolist : '';
  465. $this->data['pager'] = $pager->output;
  466. $this->render('sign-list-on_sign',$this->data, TRUE);
  467. }
  468. public function signDoneList(){
  469. Doo::loadHelper('DooPager');
  470. $pagestr = '';
  471. $sqlstr = ' 1';
  472. $this->data['project'] = '';
  473. $this->data['tender'] = '';
  474. $this->data['phaseno'] = '';
  475. //获取项目信息
  476. $searchsql = 'status="checked" and sid in(select `jl_sign_audit`.sid from `jl_sign_audit` where `jl_sign_audit`.audituid='.$this->auth->getUid().')';
  477. $itemlist = $this->sign->getSignGroupByProject($searchsql);
  478. if(!empty($itemlist)){
  479. foreach($itemlist as $ik => $iv){
  480. $itemmsg = $this->project->getRowByPid($iv['project']);
  481. $itemlist[$ik]['pname'] = $itemmsg['pname'];
  482. }
  483. }
  484. if(isset($this->params['pid']) && is_numeric($this->params['pid'])){
  485. $this->data['project'] = $this->params['pid'];
  486. $pagestr .= '/project/'.$this->params['pid'];
  487. $sqlstr .= ' and project='.$this->params['pid'];
  488. //获取标段信息
  489. $tenderlist = $this->sign->getSignGroupByTender($this->params['pid'],$searchsql);
  490. if(!empty($tenderlist)){
  491. foreach($tenderlist as $tk => $tv){
  492. $tendermsg = $this->actmeasure->getRowByPmid($tv['tender']);
  493. $tenderlist[$tk]['pmname'] = $tendermsg['pmname'];
  494. }
  495. }
  496. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  497. $this->data['tender'] = $this->params['pmid'];
  498. $pagestr .= '/tender/'.$this->params['pmid'];
  499. $sqlstr .= ' and tender='.$this->params['pmid'];
  500. //获取期数信息
  501. $phasenolist = $this->sign->getSignGroupByPhaseno($this->params['pmid'],$searchsql);
  502. if(!empty($phasenolist)){
  503. foreach($phasenolist as $pk => $pv){
  504. // $phasenomsg = $this->numofperact->getCurrStatus($pv['phaseno']);
  505. $phasenolist[$pk]['numpname'] = $pv['phaseno'];
  506. }
  507. }
  508. if(isset($this->params['mpid']) && is_numeric($this->params['mpid'])){
  509. $this->data['phaseno'] = $this->params['mpid'];
  510. $pagestr .= '/phaseno/'.$this->params['mpid'];
  511. $sqlstr .= ' and phaseno='.$this->params['mpid'];
  512. }
  513. }
  514. }
  515. $totalArchive = $this->sign->getDoneSignNumbyUid($this->auth->getUid(),$sqlstr);
  516. $pager = new DooPager(Doo::conf()->APP_URL . 'sign/donelist'.$pagestr.'/page', $totalArchive, 10, 100);
  517. $pager->setCss('', 'disabled', 'active');
  518. if (isset($this->params['pindex']))
  519. $pager->paginate(intval($this->params['pindex']));
  520. else
  521. $pager->paginate(1);
  522. if ($pager->limit != ' -10,10')
  523. $donelist = $this->sign->getDoneSignListbyUid($this->auth->getUid(), $sqlstr, $pager->limit);
  524. if(isset($donelist) && !empty($donelist)){
  525. foreach($donelist as $k => $v){
  526. //获取项目名,标段名,标段期数
  527. $project = $this->project->getRowByPid($v['project']);
  528. $tender = $this->actmeasure->getRowByPmid($v['tender']);
  529. // $phaseno = $this->numofperact->getCurrStatus($v['phaseno']);
  530. $donelist[$k]['project'] = $project['pname'];
  531. $donelist[$k]['tender'] = $tender['pmname'];
  532. // $donelist[$k]['phaseno'] = $phaseno['numpname'];
  533. }
  534. }
  535. $this->data['donelist'] = isset($donelist) ? $donelist : '';
  536. $this->data['itemlist'] = $itemlist;
  537. $this->data['tenderlist'] = isset($tenderlist) ? $tenderlist : '';
  538. $this->data['phasenolist'] = isset($phasenolist) ? $phasenolist : '';
  539. $this->data['pager'] = $pager->output;
  540. $this->render('sign-list-done_sign',$this->data, TRUE);
  541. }
  542. /**
  543. *
  544. * @return type
  545. */
  546. public function signCreate()
  547. {
  548. $launchsignSwitch = $this->aconfig->getOne(array('select' => 'launchsignswitch', 'asArray' => TRUE))['launchsignswitch'];
  549. if($launchsignSwitch == 0)
  550. exit('未开启发起签署功能');
  551. Doo::loadHelper('DooPager');
  552. $pagestr = '';
  553. $sqlstr = ' 1';
  554. $this->data['project'] = '';
  555. $this->data['tender'] = '';
  556. $this->data['phaseno'] = '';
  557. //获取项目信息
  558. $searchsql = 'status="uncheck" AND (`isinter`=0 OR `isinter`=3) AND (`ownuid`='.$this->auth->getUid().' OR tender IN (SELECT pmid FROM jl_measure_audit WHERE auditoruid='.$this->auth->getUid().') OR project IN (SELECT pid FROM jl_project_measure WHERE uid='.$this->auth->getUid().'))';
  559. $itemlist = $this->sign->getSignGroupByProject($searchsql);
  560. if(!empty($itemlist)){
  561. foreach($itemlist as $ik => $iv){
  562. $itemmsg = $this->project->getRowByPid($iv['project']);
  563. $itemlist[$ik]['pname'] = $itemmsg['pname'];
  564. }
  565. }
  566. if(isset($this->params['pid']) && is_numeric($this->params['pid'])){
  567. $this->data['project'] = $this->params['pid'];
  568. $pagestr .= '/project/'.$this->params['pid'];
  569. $sqlstr .= ' and project='.$this->params['pid'];
  570. //获取标段信息
  571. $tenderlist = $this->sign->getSignGroupByTender($this->params['pid'], $searchsql);
  572. if(!empty($tenderlist)){
  573. foreach($tenderlist as $tk => $tv){
  574. $tendermsg = $this->actmeasure->getRowByPmid($tv['tender']);
  575. $tenderlist[$tk]['pmname'] = $tendermsg['pmname'];
  576. }
  577. }
  578. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  579. $this->data['tender'] = $this->params['pmid'];
  580. $pagestr .= '/tender/'.$this->params['pmid'];
  581. $sqlstr .= ' and tender='.$this->params['pmid'];
  582. //获取期数信息
  583. $phasenolist = $this->sign->getSignGroupByPhaseno($this->params['pmid'], $searchsql);
  584. if(!empty($phasenolist)){
  585. foreach($phasenolist as $pk => $pv){
  586. // $phasenomsg = $this->numofperact->getCurrStatus($pv['phaseno']);
  587. $phasenolist[$pk]['numpname'] = $pv['phaseno'];
  588. }
  589. }
  590. if(isset($this->params['mpid']) && is_numeric($this->params['mpid'])){
  591. $this->data['phaseno'] = $this->params['mpid'];
  592. $pagestr .= '/phaseno/'.$this->params['mpid'];
  593. $sqlstr .= ' and phaseno='.$this->params['mpid'];
  594. }
  595. }
  596. }
  597. $totalArchive = $this->sign->getUnSignNum($sqlstr,$this->auth->getUid());
  598. $pager = new DooPager(Doo::conf()->APP_URL . 'sign/create'.$pagestr.'/page', $totalArchive, 10, 100);
  599. $pager->setCss('', 'disabled', 'active');
  600. if (isset($this->params['pindex']))
  601. $pager->paginate(intval($this->params['pindex']));
  602. else
  603. $pager->paginate(1);
  604. if ($pager->limit != ' -10,10')
  605. $unlist = $this->sign->getUnSignList($sqlstr, $this->auth->getUid(), $pager->limit);
  606. if(isset($unlist) && !empty($unlist)){
  607. foreach($unlist as $k => $v){
  608. //获取项目名,标段名,标段期数
  609. $project = $this->project->getRowByPid($v['project']);
  610. $tender = $this->actmeasure->getRowByPmid($v['tender']);
  611. // $phaseno = $this->numofperact->getCurrStatus($v['phaseno']);
  612. $unlist[$k]['project'] = $project['pname'];
  613. $unlist[$k]['tender'] = $tender['pmname'];
  614. // $unlist[$k]['phaseno'] = $phaseno['numpname'];
  615. $unlist[$k]['ownname'] = $this->auth->getName($v['ownuid']);
  616. }
  617. }
  618. $this->data['unlist'] = isset($unlist) ? $unlist : '';
  619. $this->data['itemlist'] = $itemlist;
  620. $this->data['tenderlist'] = isset($tenderlist) ? $tenderlist : '';
  621. $this->data['phasenolist'] = isset($phasenolist) ? $phasenolist : '';
  622. $this->data['pager'] = $pager->output;
  623. $this->render('sign-create_sign', $this->data, TRUE);
  624. }
  625. /**
  626. *
  627. * @return type
  628. */
  629. public function signList()
  630. {
  631. if(isset($_POST['delid']) && is_numeric($_POST['delid'])){
  632. //删除未签署报表数据和文件
  633. $signmsg = $this->sign->getOneSignbysid($_POST['delid']);
  634. if(empty($signmsg) && $signmsg['status'] == "checked" && $signmsg['ownuid'] != $this->auth->getUid()){
  635. exit(json_encode(array('code' => 400),JSON_UNESCAPED_UNICODE));
  636. }
  637. $this->sign->delSignbysid($_POST['delid'],$signmsg['status']);
  638. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  639. $this->IoHandler = new IoHandler();
  640. $path = DOO::conf()->SITE_PATH."signs/".$_POST['delid'];
  641. $this->IoHandler->RemoveDir($path);
  642. exit(json_encode(array('code' => 200),JSON_UNESCAPED_UNICODE));
  643. }
  644. Doo::loadHelper('DooPager');
  645. $pagestr = '';
  646. $sqlstr = ' 1';
  647. $this->data['project'] = '';
  648. $this->data['tender'] = '';
  649. $this->data['phaseno'] = '';
  650. $this->data['nosign'] = '';
  651. //获取项目信息
  652. $searchsql = '(`isinter`=0 OR `isinter`=3) AND (`ownuid`='.$this->auth->getUid().' OR `audituid`='.$this->auth->getUid().' OR sid IN (SELECT sid FROM jl_sign_audit WHERE jl_sign_audit.audituid='.$this->auth->getUid().'))';
  653. $itemlist = $this->sign->getSignGroupByProject($searchsql);
  654. if(!empty($itemlist)){
  655. foreach($itemlist as $ik => $iv){
  656. $itemmsg = $this->project->getRowByPid($iv['project']);
  657. $itemlist[$ik]['pname'] = $itemmsg['pname'];
  658. }
  659. }
  660. if(isset($this->params['pid']) && is_numeric($this->params['pid'])){
  661. $this->data['project'] = $this->params['pid'];
  662. $pagestr .= '/project/'.$this->params['pid'];
  663. $sqlstr .= ' and project='.$this->params['pid'];
  664. //获取标段信息
  665. $tenderlist = $this->sign->getSignGroupByTender($this->params['pid'],$searchsql);
  666. if(!empty($tenderlist)){
  667. foreach($tenderlist as $tk => $tv){
  668. $tendermsg = $this->actmeasure->getRowByPmid($tv['tender']);
  669. $tenderlist[$tk]['pmname'] = $tendermsg['pmname'];
  670. }
  671. }
  672. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  673. $this->data['tender'] = $this->params['pmid'];
  674. $pagestr .= '/tender/'.$this->params['pmid'];
  675. $sqlstr .= ' and tender='.$this->params['pmid'];
  676. //获取期数信息
  677. $phasenolist = $this->sign->getSignGroupByPhaseno($this->params['pmid'],$searchsql);
  678. if(!empty($phasenolist)){
  679. foreach($phasenolist as $pk => $pv){
  680. // $phasenomsg = $this->numofperact->getCurrStatus($pv['phaseno']);
  681. $phasenolist[$pk]['numpname'] = $pv['phaseno'];
  682. }
  683. }
  684. if(isset($this->params['mpid']) && is_numeric($this->params['mpid'])){
  685. $this->data['phaseno'] = $this->params['mpid'];
  686. $pagestr .= '/phaseno/'.$this->params['mpid'];
  687. $sqlstr .= ' and phaseno='.$this->params['mpid'];
  688. }
  689. }
  690. }
  691. if((isset($this->params['nosign']) && ($this->params['nosign'] == 'nosign')) || isset($_GET['nosign'])){
  692. $this->data['nosign'] = 1;
  693. $pagestr .= '/nosign';
  694. $searchsql = '(`isinter`=0 OR `isinter`=3) AND (`ownuid`='.$this->auth->getUid().' AND `status`="uncheck")';
  695. }
  696. $totalArchive = $this->sign->getSignNum($sqlstr.' and '.$searchsql);
  697. $pager = new DooPager(Doo::conf()->APP_URL . 'sign/list'.$pagestr.'/page', $totalArchive, 10, 100);
  698. $pager->setCss('', 'disabled', 'active');
  699. if (isset($this->params['pindex']))
  700. $pager->paginate(intval($this->params['pindex']));
  701. else
  702. $pager->paginate(1);
  703. if ($pager->limit != ' -10,10')
  704. $list = $this->sign->getSignList($sqlstr.' and '.$searchsql,$pager->limit);
  705. if(isset($list) && !empty($list)){
  706. foreach($list as $k => $v){
  707. //获取项目名,标段名,标段期数
  708. $project = $this->project->getRowByPid($v['project']);
  709. $tender = $this->actmeasure->getRowByPmid($v['tender']);
  710. // $phaseno = $this->numofperact->getCurrStatus($v['phaseno']);
  711. $list[$k]['project'] = $project['pname'];
  712. $list[$k]['tender'] = $tender['pmname'];
  713. // $list[$k]['phaseno'] = $phaseno['numpname'];
  714. $list[$k]['ownname'] = $this->auth->getName($v['ownuid']);
  715. $list[$k]['auditname'] = $this->auth->getName($v['audituid']);
  716. $list[$k]['delstatus'] = $this->auth->getUid() == $v['ownuid'] && $v['status'] != 'checked' && $v['isinter'] != 3 ? 1 : 0;
  717. }
  718. }
  719. $this->data['list'] = isset($list) ? $list : '';
  720. $this->data['itemlist'] = $itemlist;
  721. $this->data['tenderlist'] = isset($tenderlist) ? $tenderlist : '';
  722. $this->data['phasenolist'] = isset($phasenolist) ? $phasenolist : '';
  723. $this->data['pager'] = $pager->output;
  724. $this->render('sign-list-all', $this->data, TRUE);
  725. }
  726. /**
  727. *
  728. * @return type
  729. */
  730. public function signSignSet()
  731. {
  732. $launchsignSwitch = $this->aconfig->getOne(array('select' => 'launchsignswitch', 'asArray' => TRUE))['launchsignswitch'];
  733. if($launchsignSwitch == 0)
  734. exit('未开启发起签署功能');
  735. if(!isset($this->params['sid']) || !is_numeric($this->params['sid'])){
  736. exit('没有报表参数');
  737. }
  738. //获取报表信息
  739. $signmsg = $this->sign->getOneSignbysid($this->params['sid']);
  740. //获取标段审批人列表
  741. $auditactlist = $this->measureauditact->getUserAuditLast($signmsg['tender'],$signmsg['phaseno']);
  742. $userlist = array();
  743. if(!empty($auditactlist)){
  744. foreach($auditactlist as $k => $v){
  745. $usermsg = $this->auth->getRowByUid($v['auditoruid']);
  746. $userlist[$k]['userid'] = $usermsg['userid'];
  747. $userlist[$k]['name'] = $usermsg['name'];
  748. $userlist[$k]['jobs'] = $usermsg['jobs'];
  749. $userlist[$k]['avatar'] = $usermsg['avatar'];
  750. }
  751. }
  752. //获取原报人
  753. $measureArray = $this->actmeasure->getRowByPmid($signmsg['tender']);
  754. // $lastRowArray = $this->numofperact->getLastNew2($signmsg['tender']);
  755. $usermsg2 = $this->auth->getRowByUid($measureArray['uid']);
  756. $orginArray['userid'] = $measureArray['uid'];
  757. $orginArray['avatar'] = $usermsg2['avatar'];
  758. $orginArray['name'] = $usermsg2['name'];
  759. $orginArray['jobs'] = $usermsg2['jobs'];
  760. // $attfileArray = $this->attfile->getFirstFile($lastRowArray['pmid'], $lastRowArray['numpname'], $lastRowArray['times']);
  761. // $orginArray['time'] = date('Y-m-d', $attfileArray['intime']);
  762. //获取项目名,标段名,标段期数
  763. $project = $this->project->getRowByPid($signmsg['project']);
  764. $tender = $this->actmeasure->getRowByPmid($signmsg['tender']);
  765. // $phaseno = $this->numofperact->getCurrStatus($signmsg['phaseno']);
  766. $signmsg['project'] = $project['pname'];
  767. $signmsg['tender'] = $tender['pmname'];
  768. // $signmsg['phaseno'] = $phaseno['numpname'];
  769. //获取报表图片
  770. $maxwidth = 794; //默认图片最大宽度 a4
  771. $maxheight = 1123; //默认图片最大高度 a4
  772. if(!empty($signmsg['widhei'])){
  773. $widhei = explode('_', $signmsg['widhei']);
  774. $style = $widhei[0].'mm '.$widhei[1].'mm';
  775. }else{
  776. $style = '210mm 297mm';
  777. }
  778. $signattlist = $this->sign->getSignAttList($this->params['sid']);
  779. if(!empty($signattlist)){
  780. foreach($signattlist as $sak => $sav){
  781. if($sak == 0){
  782. $imgmsg = getimagesize(Doo::conf()->APP_URL.$sav['filepath']);
  783. $maxwidth = $imgmsg[0];
  784. $maxheight = $imgmsg[1];
  785. break;
  786. }
  787. }
  788. }
  789. $this->data['signmsg'] = $signmsg;
  790. $this->data['userlist'] = $userlist;
  791. $this->data['attlist'] = $signattlist;
  792. $this->data['reportlist'] = $orginArray;
  793. $this->data['maxwidth'] = $maxwidth;
  794. $this->data['maxheight'] = $maxheight;
  795. $this->data['style'] = $style;
  796. $this->render('sign-view-set_signer', $this->data, TRUE);
  797. }
  798. public function signSearchUser(){
  799. if(!isset($_GET['email']) || empty($_GET['email'])){
  800. echo json_encode(array('code' => 400, 'msg' => '请输入邮箱地址'));
  801. exit;
  802. }
  803. $usermsg = $this->auth->checkUserEmail($_GET['email']);
  804. if(!empty($usermsg)){
  805. echo json_encode(array('code' => 200, 'user' => $usermsg));
  806. exit;
  807. }else{
  808. echo json_encode(array('code' => 400, 'msg' => '没有此邮箱用户'));
  809. exit;
  810. }
  811. }
  812. public function signUpSigner(){
  813. if(!isset($_POST['ids']) || !isset($_POST['names']) || !isset($_POST['sid']) || !is_numeric($_POST['sid'])){
  814. echo json_encode(array('code' => 400, 'msg' => '上传参数有误'));
  815. exit;
  816. }
  817. $useridarr = $_POST['ids'];
  818. $usernamearr = $_POST['names'];
  819. foreach($useridarr as $k => $v){
  820. $signs = new Signn();
  821. $status = $k != 0 ? 'uncheck' : 'checking';
  822. $result = $signs->insertSignAudit($_POST['sid'],$status,$v,$usernamearr[$k]);
  823. if(empty($result)){
  824. echo json_encode(array('code' => 400, 'msg' => '添加签署人出错'));
  825. exit;
  826. }
  827. //发送签署短信
  828. if($k == 0){
  829. // SMS Start
  830. $signArray = $this->sign->getOneSignbysid($_POST['sid']);
  831. $pmname = $this->actmeasure->getRowByPmid($signArray['tender']);
  832. $userProArray = $this->profile->getProWithUid($v);
  833. if (isset($userProArray) && !empty($userProArray['mobile'])) {
  834. $sendarr1 = '“' .$pmname['pmname'].'”的“'. $signArray["name"] .'”';
  835. $sendarr2 = str_replace('【','',$sendarr1);
  836. $sendmsg = str_replace('】','',$sendarr2);
  837. $retval = $this->__auditNotice($userProArray['mobile'], Doo::conf()->SMS_TIPS_PRE . $sendmsg .Doo::conf()->SMS_TIPS["AUDIT_NOTICE_AUDITOR5"]);
  838. }
  839. // SMS End
  840. }
  841. }
  842. //更新报表信息
  843. $result2 = $this->sign->updateSignMsg($_POST['sid'],$this->auth->getUid());
  844. if(!empty($result2)){
  845. echo json_encode(array('code' => 200, 'msg' => '添加成功'));
  846. exit;
  847. }else{
  848. echo json_encode(array('code' => 400, 'msg' => '添加签署人出错'));
  849. exit;
  850. }
  851. }
  852. /**
  853. *
  854. * @return type
  855. */
  856. public function signView()
  857. {
  858. if(!isset($this->params['sid']) || !is_numeric($this->params['sid'])){
  859. exit('没有报表参数');
  860. }
  861. //获取报表信息
  862. $signmsg = $this->sign->getOneSignbysid($this->params['sid']);
  863. //获取项目名,标段名,标段期数
  864. $project = $this->project->getRowByPid($signmsg['project']);
  865. $tender = $this->actmeasure->getRowByPmid($signmsg['tender']);
  866. // $phaseno = $this->numofperact->getCurrStatus($signmsg['phaseno']);
  867. $signmsg['project'] = $project['pname'];
  868. $signmsg['tender'] = $tender['pmname'];
  869. // $signmsg['phaseno'] = $phaseno['numpname'];
  870. //获取签署人列表
  871. $signauditlist = $this->sign->getSignAuditList($this->params['sid']);
  872. if(!empty($signauditlist)){
  873. foreach($signauditlist as $k => $v){
  874. //获取签署人头像
  875. $signauditlist[$k]['index'] = $k+1;
  876. $signauditlist[$k]['avatar'] = $this->auth->getAvatar($v['audituid']);
  877. }
  878. }
  879. //获取报表图片
  880. $maxwidth = 794; //默认图片最大宽度 a4
  881. $maxheight = 1123; //默认图片最大高度 a4
  882. if(!empty($signmsg['widhei'])){
  883. $widhei = explode('_', $signmsg['widhei']);
  884. $style = $widhei[0].'mm '.$widhei[1].'mm';
  885. }else{
  886. $style = '210mm 297mm';
  887. }
  888. $signattlist = $this->sign->getSignAttList($this->params['sid']);
  889. if(!empty($signattlist)){
  890. foreach($signattlist as $sak => $sav){
  891. $signattlist[$sak]['auditatt'] = $this->sign->getSignAuditAttList($sav['said']);
  892. if($sak == 0){
  893. $imgmsg = getimagesize(Doo::conf()->APP_URL.$sav['filepath']);
  894. $maxwidth = $imgmsg[0];
  895. $maxheight = $imgmsg[1];
  896. }
  897. }
  898. }
  899. $backurl = '/sign/list';
  900. if(isset($_GET['status'])){
  901. switch($_GET['status']){
  902. case 'done' : $backurl = '/sign/donelist';break;
  903. case 'doing' : $backurl = '/sign/onlist';break;
  904. case 'mylist' : $backurl = '/sign/mylist';break;
  905. case 'onlist' : $backurl = '/sign/onlist';break;
  906. case 'donelist' : $backurl = '/sign/donelist';break;
  907. default: $backurl = '/sign/list';break;
  908. }
  909. }
  910. $this->data['signmsg'] = $signmsg;
  911. $this->data['auditlist'] = $signauditlist;
  912. $this->data['attlist'] = $signattlist;
  913. $this->data['backurl'] = $backurl;
  914. $this->data['maxwidth'] = $maxwidth;
  915. $this->data['maxheight'] = $maxheight;
  916. $this->data['style'] = $style;
  917. $this->render('sign-view-page', $this->data, TRUE);
  918. }
  919. public function substr_replace_cn($string, $repalce = '*', $start = 0, $len = 0)
  920. {
  921. $count = mb_strlen($string, 'UTF-8'); //此处传入编码,建议使用utf-8。此处编码要与下面mb_substr()所使用的一致
  922. if (!$count) {
  923. return $string;
  924. }
  925. if ($len == 0) {
  926. $end = $count; //传入0则替换到最后
  927. } else {
  928. $end = $start + $len; //传入指定长度则为开始长度+指定长度
  929. }
  930. $i = 0;
  931. $returnString = '';
  932. while ($i < $count) { //循环该字符串
  933. $tmpString = mb_substr($string, $i, 1, 'UTF-8'); // 与mb_strlen编码一致
  934. if ($start <= $i && $i < $end) {
  935. $returnString .= $repalce;
  936. } else {
  937. $returnString .= $tmpString;
  938. }
  939. $i++;
  940. }
  941. return $returnString;
  942. }
  943. function unicode_encode($name)
  944. {//to Unicode
  945. $name = iconv('UTF-8', 'UCS-2', $name);
  946. $len = strlen($name);
  947. $str = '';
  948. for ($i = 0; $i < $len - 1; $i = $i + 2) {
  949. $c = $name[$i];
  950. $c2 = $name[$i + 1];
  951. if (ord($c) > 0) {// 两个字节的字
  952. $str .= '\\' . base_convert(ord($c), 10, 16) . base_convert(ord($c2), 10, 16);
  953. } else {
  954. $str .= $c2;
  955. }
  956. }
  957. $str = strtoupper($str);
  958. return $str;
  959. }
  960. function unicode_decode($name)
  961. {//Unicode to
  962. $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
  963. preg_match_all($pattern, $name, $matches);
  964. if (!empty($matches)) {
  965. $name = '';
  966. for ($j = 0; $j < count($matches[0]); $j++) {
  967. $str = $matches[0][$j];
  968. if (strpos($str, '\\u') === 0) {
  969. $code = base_convert(substr($str, 2, 2), 16, 10);
  970. $code2 = base_convert(substr($str, 4), 16, 10);
  971. $c = chr($code) . chr($code2);
  972. $c = iconv('UCS-2', 'UTF-8', $c);
  973. $name .= $c;
  974. } else {
  975. $name .= $str;
  976. }
  977. }
  978. }
  979. return $name;
  980. }
  981. private function __auditNotice($mobile, $text)
  982. {
  983. $smsSignSwitch = $this->aconfig->getOne(array('select' => 'smssignswitch', 'asArray' => TRUE))['smssignswitch'];
  984. if ($smsSignSwitch > 0)
  985. return $this->sms->sendSms($mobile, $text);
  986. }
  987. }
  988. ?>