SignController.php 49 KB

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