ChangeController.php 95 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881
  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::loadClass('change');
  14. Doo::loadModelAt('aconfig', 'admin');
  15. Doo::loadClass('Hashids/Hashids');
  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 ChangeController extends DooController
  23. {
  24. private $aconfig, $data, $sms, $sign, $change, $auth, $attfile, $profile, $project, $contractact, $actmeasure, $measureauditact, $numofperact, $__hashids, $statusArray = array('uncheck' => '<span class = "colGray">未审批</span>', 'checking' => '<span class = "colOrange">审批中</span>', 'checked' => '<span class = "colGreen">审批通过</span>', 'checkno' => '<span class = "colRed">审批不通过</span>');
  25. private $changeType = array('2' => 'A.数量', '1' => 'B.位置', '3' => 'C.结构', '4' => 'D.新增', '5' => 'E.取消', '6' => 'F.纠错');
  26. private $changeCategory = array('1' => 'A类变更', '2' => 'B类变更', '3' => 'C类变更', '4' => 'D类变更', '5' => 'E类变更');
  27. private $changeNature = array('1' => '一般设计变更', '2' => '较大设计变更', '3' => '重大设计变更');
  28. private $changeStatus = array('2' => 'uncheck', '3' => 'checking', '4' => 'checked', '5' => 'checkno', '6' => 'del');
  29. private $changeUnit = array('m','km','m2','m3','kg','t','m3·km','总额','月','项','处','个','根','棵','块','每一试桩','桥长米','公路公里','株','组','座','元','工日','套','台班','艘班','m/处','m/道','m/座','m2/m','m3/m','m3/处','根/米','亩','m3/m2');
  30. public function beforeRun($resource, $action)
  31. {
  32. if(isset($_POST['sessionid'])){
  33. session_id($_POST['sessionid']);
  34. setcookie('PHPSESSID',$_POST['sessionid']);
  35. session_start();
  36. }
  37. if ($this->auth->getUid()) {
  38. $uGroups = $this->profile->getProWithUid($this->auth->getUid());
  39. $falg = Doo::acl()->isAllowed($uGroups['groups'], $resource, $action);
  40. if (!$falg)
  41. return Doo::acl()->defaultFailedRoute;
  42. } else {
  43. return Doo::acl()->defaultFailedRoute;
  44. }
  45. }
  46. public function __construct()
  47. {
  48. $this->aconfig = new AConfig();
  49. $this->auth = new Auth();
  50. $this->attfile = new attFile();
  51. $this->profile = new Profile();
  52. $this->project = new Project();
  53. $this->contractact = new Contractact();
  54. $this->actmeasure = new actMeasure();
  55. $this->numofperact = new NumofperAct();
  56. $this->measureauditact = new MeasureauditAct();
  57. $this->sign = new Signn();
  58. $this->change = new Changes();
  59. $this->sms = new Sms(Doo::conf()->SMS_URL, Doo::conf()->SMS_ACCOUNT, DOO::conf()->SMS_PASSWORD, DOO::conf()->SMS_EXTNO);
  60. $this->__hashids = new Hashids\Hashids('jlzffileid', 8);
  61. $this->data['rootUrl'] = Doo::conf()->APP_URL;
  62. $this->data['currChannle'] = 'change';
  63. $this->data['user'] = $this->profile->getProWithUid($this->auth->getUid());
  64. $mpidArray = $this->measureauditact->getAuditProject2($this->auth->getUid());
  65. $this->data['numofchecking'] = 0;
  66. if (isset($mpidArray[0]['pid'])) {
  67. foreach ($mpidArray as $key => $value) {
  68. // 审批操作按照时间排序多标段
  69. $this->data['numofchecking'] += $this->measureauditact->getCountMyChecking($value['pid'], $this->auth->getUid());
  70. }
  71. }
  72. if (!isset($this->data['numofchecking']) || $this->data['numofchecking'] == 0) {
  73. $this->data['numofchecking'] = null;
  74. }
  75. $this->data['signSwitch'] = $this->aconfig->getOne(array('select' => 'signswitch', 'asArray' => TRUE))['signswitch'];
  76. //获取需要您签署的数目
  77. if($this->data['signSwitch'] > 0)
  78. $this->data['needSignNum'] = $this->sign->getNeedSignNumbyUid($this->auth->getUid()) != 0 ? $this->sign->getNeedSignNumbyUid($this->auth->getUid()) : '';
  79. //获取桌面版本
  80. $this->getsoftware();
  81. //草图入口
  82. $this->data['imediateSwitch'] = $this->aconfig->getOne(array('select' => 'imediateswitch', 'asArray' => TRUE))['imediateswitch'];
  83. //获取需要你审批的变更令数目
  84. $this->data['needChangeNum'] = $this->change->getNeedChangeNumbyUid($this->auth->getUid()) != 0 ? $this->change->getNeedChangeNumbyUid($this->auth->getUid()) : '';
  85. }
  86. function getsoftware(){
  87. $StrJson = ($this->aconfig->getOne(array('select' => 'upgradeinfo', 'asArray' => TRUE))['upgradeinfo']);
  88. $upgradeinfo = json_decode($StrJson, true);
  89. if ($upgradeinfo) {
  90. $this->data['version'] = $upgradeinfo['version'];
  91. $this->data['download'] = $upgradeinfo['download'];
  92. }
  93. }
  94. /**
  95. *
  96. * @return type
  97. */
  98. public function index()
  99. {
  100. //获取 项目-标段类型-标段 的树结构, 包含个人对应的原报,审批和变更令审批人专属树结构
  101. $sectionlist = array();
  102. $hashArray = array();
  103. //先取原报人标段
  104. $mpidArray = $this->actmeasure->getRowUser2($this->auth->getUid());
  105. if(!empty($mpidArray)){
  106. foreach($mpidArray as $k => $v){
  107. $sectionlist[] = array('pid' => $v['pid'], 'stid' => $v['stid'], 'pmid' => $v['pmid']);
  108. $hashArray[] = md5($v['pmid']);
  109. }
  110. }
  111. //再取审批表标段
  112. // $mpidArray2 = $this->measureauditact->getPmidGroup($this->auth->getUid());
  113. // if(!empty($mpidArray2)){
  114. // foreach($mpidArray2 as $k2 => $v2){
  115. // $hashstr = md5($v2['pmid']);
  116. // if(!in_array($hashstr,$hashArray)){
  117. // $sectionlist[] = array('pid' => $v2['pid'], 'stid' => $v2['stid'], 'pmid' => $v2['pmid']);
  118. // $hashArray[] = md5($v2['pmid']);
  119. // }
  120. // }
  121. // }
  122. //最后取变更令审批人所属的标段
  123. $mpidArray3 = $this->change->getPmidGroup($this->auth->getUid());
  124. if(!empty($mpidArray3)){
  125. foreach($mpidArray3 as $k3 => $v3){
  126. $hashstr = md5($v3['pmid']);
  127. if(!in_array($hashstr,$hashArray)){
  128. $sectionlist[] = array('pid' => $v3['pid'], 'stid' => $v3['stid'], 'pmid' => $v3['pmid']);
  129. $hashArray[] = md5($v3['pmid']);
  130. }
  131. }
  132. }
  133. //算法 ---> 把一个二维数组按内容转换成一个三维数组
  134. $prolist = array();
  135. $pmidlistArray = array();
  136. if(!empty($sectionlist)){
  137. $newlist = array();
  138. $i = 0;
  139. foreach($sectionlist as $key => $value){
  140. $j = 0;
  141. $newkey = $value['pid'];
  142. $newst = $value['stid'];
  143. $newpm = $value['pmid'];
  144. array_push($pmidlistArray,$newpm);
  145. if(!isset($newlist[$newkey])){
  146. $newlist[$newkey]['i'] = $i;
  147. $prolist[$i]['open'] = 0;
  148. $prolist[$i]['pid'] = $newkey;
  149. $prolist[$i]['pname'] = $this->project->getRowByPid($newkey)['pname'];
  150. $prolist[$i]['stlist'] = array();
  151. $newlist[$newkey]['st'][$newst]['j'] = $j;
  152. $newlist[$newkey]['stnum'] = $j;
  153. $prolist[$i]['stlist'][$j]['open'] = 0;
  154. $prolist[$i]['stlist'][$j]['stid'] = $newst;
  155. $prolist[$i]['stlist'][$j]['stname'] = $this->contractact->getRowByStid($newst)['stname'];
  156. $prolist[$i]['stlist'][$j]['pmlist'] = array();
  157. array_push($prolist[$i]['stlist'][$j]['pmlist'],array('open' => 0, 'pmid' => $newpm, 'pmname' => $this->actmeasure->getRowByPmid($newpm)['pmname']));
  158. $i++;
  159. }else{
  160. $i2 = $newlist[$newkey]['i'];
  161. if(!isset($newlist[$newkey]['st'][$newst])){
  162. $newlist[$newkey]['st'][$newst]['j'] = $newlist[$newkey]['stnum']+1;
  163. $j = $newlist[$newkey]['st'][$newst]['j'];
  164. $newlist[$newkey]['stnum']++;
  165. $prolist[$i2]['stlist'][$j]['stid'] = $newst;
  166. $prolist[$i2]['stlist'][$j]['stname'] = $this->contractact->getRowByStid($newst)['stname'];
  167. $prolist[$i2]['stlist'][$j]['pmlist'] = array();
  168. array_push($prolist[$i2]['stlist'][$j]['pmlist'],array('open' => 0, 'pmid' => $newpm, 'pmname' => $this->actmeasure->getRowByPmid($newpm)['pmname']));
  169. }else{
  170. $j2 = $newlist[$newkey]['st'][$newst]['j'];
  171. array_push($prolist[$i2]['stlist'][$j2]['pmlist'],array('open' => 0, 'pmid' => $newpm, 'pmname' => $this->actmeasure->getRowByPmid($newpm)['pmname']));
  172. }
  173. }
  174. }
  175. }
  176. //获取需要您审批的签署表cid,pid,stid,pmid信息,并默认open所有节点
  177. $cListmsg = $this->change->getNeedChangeNumbyUid($this->auth->getUid()) != 0 ? $this->change->getNeedChangeAllList($this->auth->getUid()) : '';
  178. $pidArray = $stidArray = $pmidArray = array();
  179. if(!empty($cListmsg)){
  180. foreach($cListmsg as $clk => $clv){
  181. array_push($pidArray,$clv['pid']);
  182. array_push($stidArray,$clv['stid']);
  183. array_push($pmidArray,$clv['pmid']);
  184. }
  185. }
  186. $sql = '';
  187. $pmid = isset($this->params['pmid']) ? $this->params['pmid'] : '';
  188. $userchangepower = 1;
  189. if(!empty($prolist)){
  190. foreach($prolist as $pk => $pv){
  191. if(in_array($pv['pid'], $pidArray)){
  192. $prolist[$pk]['open'] = 2;
  193. foreach($prolist[$pk]['stlist'] as $sk => $sv){
  194. if(in_array($sv['stid'], $stidArray)){
  195. $prolist[$pk]['stlist'][$sk]['open'] = 2;
  196. foreach($prolist[$pk]['stlist'][$sk]['pmlist'] as $mk => $mv){
  197. if(in_array($mv['pmid'], $pmidArray)){
  198. $prolist[$pk]['stlist'][$sk]['pmlist'][$mk]['open'] = 2;
  199. }
  200. }
  201. }
  202. }
  203. }
  204. }
  205. //存在标段则该标段加粗
  206. if(!empty($pmid)){
  207. $pmArray = $this->actmeasure->getRowByPmid($pmid);
  208. foreach($prolist as $pk => $pv){
  209. if($pmArray['pid'] == $pv['pid']){
  210. $prolist[$pk]['open'] = 1;
  211. foreach($prolist[$pk]['stlist'] as $sk => $sv){
  212. if($pmArray['stid'] == $sv['stid']){
  213. $prolist[$pk]['stlist'][$sk]['open'] = 1;
  214. foreach($prolist[$pk]['stlist'][$sk]['pmlist'] as $mk => $mv){
  215. if($pmArray['pmid'] == $mv['pmid']){
  216. $prolist[$pk]['stlist'][$sk]['pmlist'][$mk]['open'] = 1;
  217. break;
  218. }
  219. }
  220. break;
  221. }
  222. }
  223. break;
  224. }
  225. }
  226. $userchangepower = $this->auth->getUid() == $pmArray['uid'] ? 1 : 0;
  227. $this->data['pmArray'] = $pmArray;
  228. }else{
  229. $sql .= ' and pmid in ('.implode(',',$pmidlistArray).')';
  230. }
  231. }
  232. //只有原报人才可以创建变更令和上报变更令
  233. $this->data['userchangepower'] = $userchangepower;
  234. $changelist = $this->change->getChangeListbyPmid($pmid,' 1'.$sql);
  235. $this->data['firstuse'] = empty($changelist) ? 1 : 0;
  236. $status = isset($this->params['status']) && is_numeric($this->params['status']) ? $this->params['status'] : 1;
  237. $this->data['status'] = $status;
  238. $this->data['prolist'] = $prolist;
  239. $sql .= ' and cid in (SELECT `jl_change_audit`.cid FROM `jl_change_audit` WHERE `jl_change_audit`.uid='.$this->auth->getUid().' GROUP BY `jl_change_audit`.cid)';
  240. $this->data['num1'] = $this->change->getNumbyMydetail($pmid,$this->auth->getUid());
  241. $this->data['num2'] = $this->change->getNumbystatus($pmid,'uncheck','back',$sql);
  242. $this->data['num3'] = $this->change->getNumbystatus($pmid,'checking','',$sql);
  243. $this->data['num4'] = $this->change->getNumbystatus($pmid,'checked','',$sql);
  244. $this->data['num5'] = $this->change->getNumbystatus($pmid,'checkno','',$sql);
  245. $this->data['num6'] = $this->change->getNumbystatus($pmid,'del','',$sql);
  246. //获取列表内容
  247. Doo::loadHelper('DooPager');
  248. $pagestr = !empty($pmid) ? '/tender/'.$pmid.'/status/'.$status : '/status/'.$status;
  249. $totalArchive = $status != 1 ? ($status ==2 ? $this->change->getNumbystatus($pmid,'uncheck','back',$sql) : $this->change->getNumbystatus($pmid,$this->changeStatus[$status],'',$sql)) : $this->change->getNumbyMydetail($pmid,$this->auth->getUid());
  250. $pager = new DooPager(Doo::conf()->APP_URL . 'change/index'.$pagestr.'/page', $totalArchive, 10, 100);
  251. $pager->setCss('', 'disabled', 'active');
  252. if (isset($this->params['pindex']))
  253. $pager->paginate(intval($this->params['pindex']));
  254. else
  255. $pager->paginate(1);
  256. if ($pager->limit != ' -10,10')
  257. $list = $status != 1 ? ($status ==2 ? $this->change->getListbyStatus($pmid,$this->changeStatus[$status], $pager->limit,'back',$sql) : $this->change->getListbyStatus($pmid,$this->changeStatus[$status], $pager->limit,'',$sql)) : $this->change->getListbyMydetail($pmid,$this->auth->getUid(), $pager->limit);
  258. if(isset($list) && !empty($list)){
  259. foreach($list as $lk => $lv){
  260. if($status == 3){
  261. $checkman = $this->change->getOneAuditbystatus($lv['cid'],'checking');
  262. $list[$lk]['checkman'] = $checkman['name'];
  263. // $list[$lk]['checkstatus'] = $this->statusArray[$checkman['status']];
  264. }
  265. $list[$lk]['pmname'] = $this->actmeasure->getRowByPmid($lv['pmid'])['pmname'];
  266. $list[$lk]['username'] = $this->auth->getRowByUid($lv['uid'])['name'];
  267. $list[$lk]['changeCategory'] = $this->changeCategory[$lv['category']];
  268. }
  269. }
  270. //uid
  271. $this->data['uid'] = $this->auth->getUid();
  272. $this->data['list'] = isset($list) ? $list : '';
  273. $this->data['pmid'] = $pmid;
  274. $this->data['pager'] = $pager->output;
  275. $this->render('biangeng-poj', $this->data, TRUE);
  276. }
  277. //签约清单
  278. public function dealBills(){
  279. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  280. $pmid = $this->params['pmid'];
  281. $pmArray = $this->actmeasure->getRowByPmid($pmid);
  282. if(empty($pmArray)){
  283. exit('不存在此标段');
  284. }
  285. include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
  286. $this->data['pmArray'] = $pmArray;
  287. $list = $this->change->getChangeListbyPmid($pmid);
  288. if(!empty($list)){
  289. foreach($list as $k => $v){
  290. $totalamount = floatval($v['unitprice'])*floatval($v['amount']);
  291. $list[$k]['totalamount'] = todecimal($totalamount,2);
  292. }
  293. }
  294. $this->data['list'] = $list;
  295. $this->render('biangeng-dealbills', $this->data, TRUE);
  296. }else{
  297. exit('不存在此标段');
  298. }
  299. }
  300. public function changeDetail(){
  301. //获取变更令信息
  302. if(isset($this->params['cid']) && is_numeric($this->params['cid'])) {
  303. $cid = $this->params['cid'];
  304. $changeArray = $this->change->getChangebyid($cid);
  305. if(!empty($changeArray)){
  306. $pmArray = $this->actmeasure->getRowByPmid($changeArray['pmid']);
  307. if(empty($pmArray)){
  308. exit('不存在此标段');
  309. }
  310. include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
  311. $decimalnum = $this->getdecimal($changeArray['decimalnum']);
  312. if(isset($_POST['table']) && $_POST['table'] == '_all'){
  313. //获取所有清单列表数据,包括所有审批人
  314. //获取用户审批变更清单的列表
  315. $auditlist = $this->change->getChangeAuditbylastlist($cid,$changeArray['times']);
  316. //获取清单,按清单编号排序
  317. $clist = $this->change->getChangeAuditListbycid($cid);
  318. $ototalnum = 0;
  319. $ctotalnum = 0;
  320. $stotalnum = 0;
  321. $listtablehtml = '<table class="table table-striped table-bordered nowrap qd-table" id="tablelist" cellspacing="0" width="100%">
  322. <thead>
  323. <tr><th rowspan="2" class="text-center" width="100">清单编号</th><th rowspan="2" class="text-center">名称</th><th rowspan="2" class="text-center">单位</th><th rowspan="2" class="text-center">单价</th><th colspan="2" class="text-center">原设计</th><th colspan="2" class="text-center">申报变更增(+)减(-)</th>';
  324. $thhtml = '<th class="text-center">数量</th>
  325. <th class="text-center">金额</th>
  326. <th class="text-center">数量</th>
  327. <th class="text-center">金额</th>';
  328. $utotalarr = array();
  329. foreach ($auditlist as $ak => $av) {
  330. $listtablehtml .= '<th colspan="2" class="text-center">'.$av['name'].' 审批</th>';
  331. $thhtml .= '<th class="text-center">数量</th><th class="text-center">金额</th>';
  332. $utotalarr[$ak]['uid'] = $av['uid'];
  333. $utotalarr[$ak]['status'] = $av['status'];
  334. $utotalarr[$ak]['usum'] = 0;
  335. }
  336. $listtablehtml .= '</tr><tr>'. $thhtml .'</tr>
  337. </thead>
  338. <tbody id="list">';
  339. if (!empty($clist)) {
  340. foreach ($clist as $ck => $cv) {
  341. $osum = floatval($cv['unitprice']) * floatval($cv['oamount']);
  342. $osum = $cv['lid'] != 0 ? todecimal($osum,$decimalnum['costdnum']) : $osum;
  343. $clist[$ck]['osum'] = $osum;
  344. $ototalnum += $osum;
  345. $csum = todecimal(floatval($cv['unitprice']) * floatval($cv['camount']),$decimalnum['costdnum']);
  346. $clist[$ck]['csum'] = $csum;
  347. $ctotalnum += $csum;
  348. $listtablehtml .= '<tr class="clist"><td>' . $cv['lnum'] . '</td><td>' . $cv['lname'] . '</td><td>' . $cv['unit'] . '</td><td>' . tofloat($cv['unitprice']) . '</td><td>' . $cv['oamount'] . '</td><td>' . $osum . '</td><td>' . $cv['camount'] . '</td><td>' . $csum . '</td>';
  349. $userjson = json_decode($cv['auditjson'], true);
  350. $tdhtml = '';
  351. foreach ($userjson as $uk => $uv) {
  352. if($uv['ucamount'] != ''){
  353. //update utotalarr value=>usum
  354. foreach($utotalarr as $tk => $tv){
  355. if($tv['uid'] == $uv['uid'] && $tv['status'] == 'checked'){
  356. $usum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']);
  357. $tdhtml .= '<td>'.$uv['ucamount'].'</td><td>'.$usum.'</td>';
  358. $utotalarr[$tk]['usum'] = todecimal(floatval($utotalarr[$tk]['usum'])+$usum,$decimalnum['costdnum']);
  359. break;
  360. }elseif($tv['uid'] == $uv['uid']){
  361. $tdhtml .= '<td></td><td></td>';
  362. break;
  363. }
  364. }
  365. }else{
  366. $tdhtml .= '<td></td><td></td>';
  367. }
  368. }
  369. $listtablehtml = $listtablehtml.$tdhtml.'</tr>';
  370. }
  371. }
  372. $listtablehtml .= '</tbody><tfoot><tr class="info"><td>合计</td><td></td><td></td><td></td><td></td><td>'.$ototalnum.'</td><td></td><td>'.todecimal($ctotalnum,$decimalnum['costdnum']).'</td>';
  373. foreach($utotalarr as $tk => $tv){
  374. $addtd = $tv['usum'] != 0 ? todecimal($tv['usum'],$decimalnum['costdnum']) : '';
  375. $listtablehtml .= '<td></td><td>'.$addtd.'</td>';
  376. }
  377. $listtablehtml .= '</tr>
  378. </tfoot>
  379. </table>';
  380. echo json_encode(array('code' => 200, 'html' => $listtablehtml));
  381. die;
  382. }
  383. $this->data['pmArray'] = $pmArray;
  384. $ctypelist = array();
  385. if(!empty($changeArray['ctype'])){
  386. $ctype = explode(',',$changeArray['ctype']);
  387. foreach($ctype as $tk => $tv){
  388. $ctypelist[$tk]['typename'] = $this->changeType[$tv];
  389. }
  390. }
  391. $changeArray['ctypelist'] = $ctypelist;
  392. $changeArray['categoryname'] = $this->changeCategory[$changeArray['category']];
  393. $changeArray['naturename'] = $this->changeNature[$changeArray['cnature']];
  394. $changeArray['companyname'] = $this->change->getCompanybyid($changeArray['companyid'])['name'];
  395. $this->data['changeArray'] = $changeArray;
  396. //获取清单,按清单编号排序
  397. $clist = $this->change->getChangeAuditListbycid($cid);
  398. $ototalnum = 0;
  399. $ctotalnum = 0;
  400. $stotalnum = 0;
  401. if(!empty($clist)){
  402. foreach($clist as $ck => $cv){
  403. $osum = floatval($cv['unitprice'])*floatval($cv['oamount']);
  404. $osum = $cv['lid'] != 0 ? todecimal($osum,$decimalnum['costdnum']) : $osum;
  405. $clist[$ck]['osum'] = $osum;
  406. $ototalnum += $osum;
  407. $csum = todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
  408. $clist[$ck]['csum'] = $csum;
  409. $ctotalnum += $csum;
  410. if($cv['samount'] != ''){
  411. $ssum = todecimal(floatval($cv['unitprice'])*floatval($cv['samount']),$decimalnum['costdnum']);
  412. $clist[$ck]['ssum'] = $ssum;
  413. $stotalnum += $ssum;
  414. }else{
  415. $clist[$ck]['ssum'] = '';
  416. $clist[$ck]['samount'] = '';
  417. }
  418. }
  419. }
  420. $this->data['ototalnum'] = $ototalnum;
  421. $this->data['ctotalnum'] = todecimal($ctotalnum,$decimalnum['costdnum']);
  422. $this->data['stotalnum'] = $stotalnum != 0 ? todecimal($stotalnum,$decimalnum['costdnum']) : '';
  423. $this->data['clist'] = $clist;
  424. //获取附件
  425. $attlist = $this->change->getChangeAttListbycid($cid);
  426. $showattlist = array();
  427. if(!empty($attlist)){
  428. foreach($attlist as $k => $v){
  429. //加密下载的id
  430. $fid = $this->__hashids->encode($v['id']);
  431. $showattlist[$k]['sort'] = $k+1;
  432. $showattlist[$k]['downurl'] = '/change/file/download/'.$fid;
  433. $showattlist[$k]['filename'] = $v['filename'].'.'.$v['fileext'];
  434. $showattlist[$k]['time'] = date('Y-m-d H:i',$v['intime']);
  435. $showattlist[$k]['size'] = $this->changefilesize($v['filesize']);
  436. }
  437. }
  438. $this->data['attlist'] = $showattlist;
  439. //获取审批流程列表
  440. $auditlist = $this->change->getChangeAuditsbySort($cid);
  441. if(!empty($auditlist)){
  442. foreach($auditlist as $ak => $av){
  443. $auditlist[$ak]['email'] = $this->auth->getEmail($av['uid']);
  444. $auditlist[$ak]['lastusite'] = $this->change->getChangeAuditsMaxUsite($cid,$av['times'])['maxsite'];
  445. }
  446. }
  447. $this->data['auditlist'] = $auditlist;
  448. $this->render('biangeng-detail', $this->data, TRUE);
  449. }
  450. }
  451. exit('参数有误');
  452. }
  453. public function changeNew(){
  454. if(isset($this->params['pmid']) && is_numeric($this->params['pmid'])){
  455. $pmid = $this->params['pmid'];
  456. $pmArray = $this->actmeasure->getRowByPmid($pmid);
  457. if(empty($pmArray)){
  458. exit('不存在此标段');
  459. }
  460. if($this->auth->getUid() != $pmArray['uid']){
  461. exit('不是原报人无法创建变更令');
  462. }
  463. //取标段位数设置
  464. $decimalnum = $this->getdecimal($pmArray['cdecimalnum']);
  465. $this->data['costdnum'] = $decimalnum['costdnum'];
  466. $this->data['numberdnum'] = $decimalnum['numberdnum'];
  467. include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
  468. //表单提交
  469. if(isset($_POST['pnum'])){
  470. if(isset($_POST['checking'])){
  471. if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname']) || !isset($_POST['description']) || empty($_POST['description']) || !isset($_POST['changeaudit']) || empty($_POST['changeaudit']) || !isset($_POST['changelist']) || !isset($_POST['changewhitelist'])){
  472. exit('参数缺失或为空');
  473. }
  474. if(empty($_POST['changelist']) && empty($_POST['changewhitelist'])){
  475. exit('变更清单缺失');
  476. }
  477. }elseif(isset($_POST['uncheck'])){
  478. if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname'])){
  479. exit('参数缺失或为空');
  480. }
  481. }
  482. //先添加生成变更令
  483. $cid = $this->change->insertChangeMsg($pmArray,$this->auth->getUid(),$_POST);
  484. if($cid){
  485. //附件添加cid
  486. if(!empty($_POST['changeatt'])){
  487. Doo::loadModel('changeatt');
  488. $attlist = explode(',', $_POST['changeatt']);
  489. foreach($attlist as $ak => $av){
  490. $changeAtt = new ChangeAtt();
  491. $changeAtt->id = $av;
  492. $changeAtt->cid = $cid;
  493. $changeAtt->update();
  494. }
  495. }
  496. //审批人添加
  497. //先添加提交人到audit中
  498. $site = 0;
  499. Doo::loadModel('changeaudit');
  500. $changeaudit2 = new ChangeAudit();
  501. $userArray2 = $this->auth->getRowByUid($this->auth->getUid());
  502. $changeaudit2->pid = $pmArray['pid'];
  503. $changeaudit2->stid = $pmArray['stid'];
  504. $changeaudit2->pmid = $pmArray['pmid'];
  505. $changeaudit2->cid = $cid;
  506. $changeaudit2->times = 0;
  507. $changeaudit2->usite = $site;
  508. $changeaudit2->usort = $site;
  509. $changeaudit2->uid = $this->auth->getUid();
  510. $changeaudit2->company = $userArray2['company'];
  511. $changeaudit2->jobs = $userArray2['jobs'];
  512. $changeaudit2->name = $userArray2['name'];
  513. $changeaudit2->status = isset($_POST['checking']) ? 'checked' : 'checking';
  514. $changeaudit2->sintime = isset($_POST['checking']) ? time() : '';
  515. $changeaudit2->insert();
  516. $site++;
  517. $auditArr = array();
  518. if(!empty($_POST['changeaudit'])){
  519. $auditlist = explode(',', $_POST['changeaudit']);
  520. foreach($auditlist as $uk => $uv){
  521. $userArray = $this->auth->getRowByUid($uv);
  522. $changeaudit = new ChangeAudit();
  523. $changeaudit->pid = $pmArray['pid'];
  524. $changeaudit->stid = $pmArray['stid'];
  525. $changeaudit->pmid = $pmArray['pmid'];
  526. $changeaudit->cid = $cid;
  527. $changeaudit->times = 0;
  528. $changeaudit->usite = $site;
  529. $changeaudit->usort = $site;
  530. $changeaudit->uid = $uv;
  531. $changeaudit->company = $userArray['company'];
  532. $changeaudit->jobs = $userArray['jobs'];
  533. $changeaudit->name = $userArray['name'];
  534. $changeaudit->status = (isset($_POST['checking']) && $uk == 0) ? 'checking' : 'uncheck';
  535. $changeaudit->insert();
  536. $site++;
  537. array_push($auditArr,array('uid' => $uv, 'ucamount' => ''));
  538. }
  539. }
  540. //清单添加,不分顺序,最终展示按清单编号排序
  541. Doo::loadModel('changeauditlist');
  542. $total = 0;
  543. if(!empty($_POST['changelist'])){
  544. $clist = explode(',',$_POST['changelist']);
  545. foreach($clist as $ck => $cv){
  546. $clistid = explode('->',$cv)[0];
  547. $clistarr = explode(';',explode('->',$cv)[1]);
  548. if(!empty($clistarr[0]) && !empty($clistarr[1]) && is_numeric($clistarr[3]) && is_numeric($clistarr[4]) && is_numeric($clistarr[5])){
  549. $changelistArr = $this->change->getChangeListbyid($clistid);
  550. if(!empty($changelistArr)){
  551. $total += todecimal(floatval($changelistArr['unitprice'])*floatval($clistarr[5]),$decimalnum['costdnum']);
  552. $cauditlist = new ChangeAuditList();
  553. $cauditlist->pid = $pmArray['pid'];
  554. $cauditlist->stid = $pmArray['stid'];
  555. $cauditlist->pmid = $pmArray['pmid'];
  556. $cauditlist->cid = $cid;
  557. $cauditlist->lid = $clistid;
  558. $cauditlist->lnum = $changelistArr['lnum'];
  559. $cauditlist->lname = $changelistArr['lname'];
  560. $cauditlist->unit = $changelistArr['unit'];
  561. $cauditlist->unitprice = $changelistArr['unitprice'];
  562. $cauditlist->oamount = $changelistArr['amount'];
  563. $cauditlist->camount = $clistarr[5];
  564. $cauditlist->auditjson = json_encode($auditArr);
  565. $cauditlist->insert();
  566. }else{
  567. $total += todecimal(floatval($clistarr[3])*floatval($clistarr[5]),$decimalnum['costdnum']);
  568. $cauditlist = new ChangeAuditList();
  569. $cauditlist->pid = $pmArray['pid'];
  570. $cauditlist->stid = $pmArray['stid'];
  571. $cauditlist->pmid = $pmArray['pmid'];
  572. $cauditlist->cid = $cid;
  573. $cauditlist->lid = 0;
  574. $cauditlist->lnum = $clistarr[0];
  575. $cauditlist->lname = $clistarr[1];
  576. $cauditlist->unit = $clistarr[2];
  577. $cauditlist->unitprice = $clistarr[3];
  578. $cauditlist->oamount = $clistarr[4];
  579. $cauditlist->camount = $clistarr[5];
  580. $cauditlist->auditjson = json_encode($auditArr);
  581. $cauditlist->insert();
  582. }
  583. }
  584. }
  585. }
  586. if(!empty($_POST['changewhitelist'])){
  587. $wlist = explode(',',$_POST['changewhitelist']);
  588. foreach($wlist as $wk => $wv){
  589. $wlistarr = explode(';',explode('->',$wv)[1]);
  590. if(!empty($wlistarr[0]) && !empty($wlistarr[1]) && is_numeric($wlistarr[3]) && is_numeric($wlistarr[4]) && is_numeric($wlistarr[5])){
  591. $total += todecimal(floatval($wlistarr[3])*floatval($wlistarr[5]),$decimalnum['costdnum']);
  592. $cauditlist = new ChangeAuditList();
  593. $cauditlist->pid = $pmArray['pid'];
  594. $cauditlist->stid = $pmArray['stid'];
  595. $cauditlist->pmid = $pmArray['pmid'];
  596. $cauditlist->cid = $cid;
  597. $cauditlist->lid = 0;
  598. $cauditlist->lnum = $wlistarr[0];
  599. $cauditlist->lname = $wlistarr[1];
  600. $cauditlist->unit = $wlistarr[2];
  601. $cauditlist->unitprice = $wlistarr[3];
  602. $cauditlist->oamount = $wlistarr[4];
  603. $cauditlist->camount = $wlistarr[5];
  604. $cauditlist->auditjson = json_encode($auditArr);
  605. $cauditlist->insert();
  606. }
  607. }
  608. }
  609. //变更令添加变更总金额
  610. $this->change->updateChangeTotalamount($cid,todecimal($total,$decimalnum['costdnum']));
  611. $status = isset($_POST['uncheck']) ? 2 : 3;
  612. return '/change/index/tender/'.$pmArray['pmid'].'/status/'.$status;
  613. }else{
  614. exit('添加到变更令失败');
  615. }
  616. }
  617. $this->data['companylist'] = $this->change->getCompanyList($pmid);
  618. $list = $this->change->getChangeListbyPmid($pmid);
  619. if(!empty($list)){
  620. foreach($list as $k => $v){
  621. $totalamount = floatval($v['unitprice'])*floatval($v['amount']);
  622. $list[$k]['totalamount'] = todecimal($totalamount,2);
  623. $list[$k]['index'] = $k+1;
  624. }
  625. }
  626. //获取标段审批人列表
  627. $auditactlist = $this->measureauditact->getUserAuditID($this->params['pmid']);
  628. //获取原报人
  629. $measureArray = $this->actmeasure->getRowByPmid($this->params['pmid']);
  630. $inside = 1;
  631. $userlist = array();
  632. $useridlist = array();
  633. if(!empty($auditactlist)){
  634. foreach($auditactlist as $k => $v){
  635. if($measureArray['uid'] == $v['auditoruid']){
  636. $inside = 0;
  637. }
  638. $usermsg = $this->auth->getRowByUid($v['auditoruid']);
  639. $userlist[$k]['userid'] = $usermsg['userid'];
  640. $userlist[$k]['name'] = $usermsg['name'];
  641. $userlist[$k]['jobs'] = $usermsg['jobs'];
  642. $userlist[$k]['avatar'] = $usermsg['avatar'];
  643. $userlist[$k]['company'] = $usermsg['company'];
  644. $userlist[$k]['email'] = $this->auth->getEmail($v['auditoruid']);
  645. array_push($useridlist, $usermsg['userid']);
  646. }
  647. }
  648. if($inside){
  649. $usermsg2 = $this->auth->getRowByUid($measureArray['uid']);
  650. $orginArray['userid'] = $measureArray['uid'];
  651. $orginArray['avatar'] = $usermsg2['avatar'];
  652. $orginArray['name'] = $usermsg2['name'];
  653. $orginArray['jobs'] = $usermsg2['jobs'];
  654. $orginArray['company'] = $usermsg2['company'];
  655. $orginArray['email'] = $this->auth->getEmail($measureArray['uid']);
  656. array_push($userlist,$orginArray);
  657. array_push($useridlist, $usermsg2['userid']);
  658. }
  659. $this->data['pmArray'] = $pmArray;
  660. $this->data['userlist'] = $userlist;
  661. $this->data['useridlist'] = implode(',',$useridlist);
  662. $userArray = $this->auth->getRowByUid($this->auth->getUid());
  663. $userArray['email'] = $this->auth->getEmail($this->auth->getUid());
  664. $this->data['userArray'] = $userArray;
  665. $this->data['list'] = $list;
  666. $this->data['year'] = date('Y',time());
  667. //获取此标段的最新一个变更令申请编号,没有则赋值为 变更申请编号001
  668. $lastnum = $this->change->getLastChangePnum($this->params['pmid']);
  669. if(!empty($lastnum)){
  670. //正则获取申请编号
  671. $pattern = '/(?!\d{3,6})(\D|\d)|19\d{2}|20\d{2}|\d{3,6}/i';
  672. preg_match_all($pattern, $lastnum['pnum'],$str);
  673. $arr = $str[0];
  674. $pnum = '';
  675. for($i = 0; $i < count($arr); $i++){
  676. if(mb_strlen($arr[$i],'UTF8') > 1){
  677. if(preg_match('/19\d{2}|20\d{2}/i',$arr[$i])){
  678. $pnum .= $arr[$i];
  679. }else{
  680. $pnum .= $this->makenum($arr[$i]);
  681. }
  682. }else{
  683. $pnum .= $arr[$i];
  684. }
  685. }
  686. $this->data['pnum'] = $pnum;
  687. }else{
  688. $this->data['pnum'] = '变更申请编号001';
  689. }
  690. $cfuhashids = new Hashids\Hashids('cfileupload', 15);
  691. $this->data['uid'] = $this->auth->getUid();
  692. $verification = $cfuhashids->encode($pmArray['pmid'],$this->auth->getUid());
  693. $this->data['verification'] = $verification;
  694. $this->render('biangeng-new', $this->data, TRUE);
  695. }else{
  696. exit('不存在此标段');
  697. }
  698. }
  699. //生成和num相同位数的并加一 001 -》 002, 0023 -》 0024
  700. function makenum($num){
  701. $len = mb_strlen($num,'UTF8'); //获取原位数
  702. $intnum = intval($num)+1; //获取int
  703. $len2 = mb_strlen($intnum,'UTF8'); //获取int位数
  704. if($len > $len2){
  705. $arr = Array();
  706. for($i = 0; $i < $len-$len2; $i++){
  707. $arr[$i] = '0';
  708. }
  709. $intnum = implode('',$arr).$intnum;
  710. }
  711. return $intnum;
  712. }
  713. public function changeApproval(){
  714. if (isset($this->params['cid']) && is_numeric($this->params['cid'])) {
  715. $cid = $this->params['cid'];
  716. $changeArray = $this->change->getChangebyid($cid);
  717. if (!empty($changeArray)) {
  718. //判断当前变更令是否处于你审批状态,否 则显示详情页
  719. $userchange = $this->change->getOneChangeAudit($this->auth->getUid(), $cid, $changeArray['times']);
  720. if ($changeArray['status'] != 'checking' || empty($userchange) || $userchange['status'] != 'checking') {
  721. return '/change/detail/' . $cid;
  722. die;
  723. }
  724. $pmArray = $this->actmeasure->getRowByPmid($changeArray['pmid']);
  725. if (empty($pmArray)) {
  726. exit('不存在此标段');
  727. }
  728. include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
  729. $decimalnum = $this->getdecimal($changeArray['decimalnum']);
  730. // $step = $this->makestep($decimalnum['numberdnum']);
  731. //审批结果
  732. if(isset($_POST['approval']) && is_numeric($_POST['approval'])){
  733. $status = $_POST['status'];
  734. Doo::loadModel('change');
  735. Doo::loadModel('changeaudit');
  736. Doo::loadModel('changeauditlist');
  737. $sintime = time();
  738. if($status == 'checked'){
  739. //通过
  740. $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'checked',$_POST['desc'],$sintime,$_POST['clist']);
  741. //更新audit_list
  742. $clist = explode(',',$_POST['clist']);
  743. $totalamount = 0;
  744. foreach($clist as $k => $v){
  745. $lid = explode('_',$v)[0];
  746. $ucamount = explode('_',$v)[1] != '' ? explode('_',$v)[1] : 0;
  747. $oneauditlist = $this->change->getOneChangeAuditList($lid);
  748. $totalamount += todecimal(floatval($oneauditlist['unitprice'])*floatval($ucamount),$decimalnum['costdnum']);
  749. $auditjson = json_decode($oneauditlist['auditjson'],true);
  750. foreach($auditjson as $ak => $av){
  751. if($av['uid'] == $this->auth->getUid()){
  752. $auditjson[$ak]['ucamount'] = $ucamount;
  753. }
  754. }
  755. $cauditlist = new ChangeAuditList();
  756. $cauditlist->id = $lid;
  757. $cauditlist->samount = $ucamount;
  758. $cauditlist->auditjson = json_encode($auditjson);
  759. $cauditlist->update();
  760. }
  761. //更新change总金额
  762. $this->change->updateChangeTotalamount($cid,todecimal($totalamount,$decimalnum['costdnum']));
  763. //更改下一个审批状态或结束审批
  764. $audit = new ChangeAudit();
  765. $auditlist = $audit->getChangeAuditbylastlist($cid,$changeArray['times']);
  766. $flag = true;
  767. foreach($auditlist as $uk => $uv){
  768. if($uv['status'] == 'uncheck'){
  769. $changeaudit = new ChangeAudit();
  770. $changeaudit->id = $uv['id'];
  771. $changeaudit->status = 'checking';
  772. $changeaudit->update();
  773. $flag = false;
  774. break;
  775. }
  776. }
  777. //审批完成,更改change状态
  778. if($flag){
  779. $changes = new Change();
  780. $changes->cid = $cid;
  781. $changes->bnum = isset($_POST['bnum']) ? $_POST['bnum'] : $changeArray['pnum'];
  782. $changes->status = 'checked';
  783. $changes->sintime = $sintime;
  784. $changes->update();
  785. }
  786. }elseif($status == 'back'){
  787. if(isset($_POST['back']) && $_POST['back'] == 1 && !empty($_POST['lastuid'])){
  788. //退回到上一个审批人
  789. $lastuid = $_POST['lastuid'];
  790. //新增本次审批人,设为未审批并排序加2;
  791. $auditArray2 = $this->change->getOneChangeAudit($this->auth->getUid(),$cid,$changeArray['times']);
  792. //改变当前状态
  793. $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'back',$_POST['desc'],$sintime);
  794. $changeaudit2 = new ChangeAudit();
  795. $changeaudit2->insertChangeAudit($auditArray2,'uncheck',$auditArray2['usort']+2);
  796. //新增上一个审批人,设为审批中并排序加1;
  797. $changeaudit = new ChangeAudit();
  798. $auditArray = $changeaudit->getOneChangeAudit($lastuid,$cid,$changeArray['times']);
  799. $changeaudit->insertChangeAudit($auditArray,'checking',$auditArray2['usort']+1);
  800. //把接下未审批的审批人排序都加2
  801. $changeaudit3 = new ChangeAudit();
  802. $auditlist = $changeaudit3->getChangeAuditsbycidtimeWithout($cid,$changeArray['times'],$lastuid,$this->auth->getUid());
  803. if(!empty($auditlist)){
  804. foreach($auditlist as $ak => $av){
  805. $changeaudit4 = new ChangeAudit();
  806. $changeaudit4->id = $av['id'];
  807. $changeaudit4->usort = $av['usort']+2;
  808. $changeaudit4->update();
  809. }
  810. }
  811. //获取上上个审批通过人uid
  812. if($auditArray2['usite'] > 2){
  813. $lastlastuid = $changeaudit3->getChangeAuditbycidsitetime($cid,$changeArray['times'],$auditArray2['usite']-2)['uid'];
  814. }else{
  815. $lastlastuid = '';
  816. }
  817. //更新audit_list
  818. $clist = $this->change->getChangeAuditListbycid($cid);
  819. $totalamount = 0;
  820. foreach($clist as $ck => $cv){
  821. $auditjson = json_decode($cv['auditjson'],true);
  822. $samount = '';
  823. if(empty($lastlastuid)){
  824. $totalamount += todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
  825. }
  826. foreach($auditjson as $jk => $jv){
  827. if(!empty($lastlastuid) && $jv['uid'] == $lastlastuid){
  828. $totalamount += todecimal(floatval($cv['unitprice'])*floatval($jv['ucamount']),$decimalnum['costdnum']);
  829. $samount = $jv['ucamount'];
  830. }
  831. // if($jv['uid'] == $lastuid){
  832. // $auditjson[$jk]['ucamount'] = '';
  833. // }
  834. }
  835. $cauditlist = new ChangeAuditList();
  836. $cauditlist->id = $cv['id'];
  837. $cauditlist->samount = $samount;
  838. // $cauditlist->auditjson = json_encode($auditjson);
  839. $cauditlist->update();
  840. }
  841. //更新change总金额
  842. $this->change->updateChangeTotalamount($cid,todecimal($totalamount,$decimalnum['costdnum']));
  843. }elseif(isset($_POST['back']) && $_POST['back'] == 2){
  844. //退回到提交人,重新上报
  845. $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'backnew',$_POST['desc'],$sintime);
  846. $changeaudit = new ChangeAudit();
  847. //获取最后一次上报的上报人信息
  848. $auditArray = $changeaudit->getChangeAuditLastUser($cid,0);
  849. //获取uid最新上报人信息
  850. $userArray = $this->auth->getRowByUid($auditArray['uid']);
  851. $auditArray['company'] = $userArray['company'];
  852. $auditArray['jobs'] = $userArray['jobs'];
  853. $auditArray['name'] = $userArray['name'];
  854. //获取最后一个审批人的usort
  855. $auditArray2 = $changeaudit->getChangeAuditLastUser($cid);
  856. //新建新的提交人,并把time+1
  857. $changeaudit->insertChangeAudit($auditArray,'checking',$auditArray2['usort']+1,$auditArray['times']+1);
  858. //更新audit_list
  859. $clist = $this->change->getChangeAuditListbycid($cid);
  860. $totalamount = 0;
  861. foreach($clist as $ck => $cv){
  862. $totalamount += todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
  863. $cauditlist = new ChangeAuditList();
  864. $cauditlist->id = $cv['id'];
  865. $cauditlist->samount = '';
  866. $cauditlist->auditjson = '';
  867. $cauditlist->update();
  868. }
  869. //更新change
  870. $changes = new Change();
  871. $changes->cid = $cid;
  872. $changes->status = 'back';
  873. $changes->totalamount = todecimal($totalamount,$decimalnum['costdnum']);
  874. $changes->update();
  875. }
  876. }elseif($status == 'checkno'){
  877. //不通过
  878. $this->change->updateChangeAudit($this->auth->getUid(),$cid, $changeArray['times'], 'checkno',$_POST['desc'],$sintime);
  879. $changes = new Change();
  880. $changes->cid = $cid;
  881. $changes->status = 'checkno';
  882. $changes->sintime = time();
  883. $changes->update();
  884. }
  885. return '/change/detail/'. $cid;
  886. }
  887. $this->data['pmArray'] = $pmArray;
  888. $ctypelist = array();
  889. if (!empty($changeArray['ctype'])) {
  890. $ctype = explode(',', $changeArray['ctype']);
  891. foreach ($ctype as $tk => $tv) {
  892. $ctypelist[$tk]['typename'] = $this->changeType[$tv];
  893. }
  894. }
  895. $changeArray['ctypelist'] = $ctypelist;
  896. $changeArray['categoryname'] = $this->changeCategory[$changeArray['category']];
  897. $changeArray['naturename'] = $this->changeNature[$changeArray['cnature']];
  898. $changeArray['companyname'] = $this->change->getCompanybyid($changeArray['companyid'])['name'];
  899. $this->data['changeArray'] = $changeArray;
  900. //获取用户审批变更清单的列表
  901. $auditlist = $this->change->getChangeAuditbylastlist($cid,$changeArray['times']);
  902. //获取清单,按清单编号排序
  903. $clist = $this->change->getChangeAuditListbycid($cid);
  904. $ototalnum = 0;
  905. $ctotalnum = 0;
  906. $stotalnum = 0;
  907. $listtablehtml = '<table class="table table-striped table-bordered nowrap qd-table" id="tablelist" cellspacing="0" style="width:100%">
  908. <thead>
  909. <tr><th rowspan="2" class="text-center" width="100">清单编号</th><th rowspan="2" class="text-center">名称</th><th rowspan="2" class="text-center">单位</th><th rowspan="2" class="text-center">单价</th><th colspan="2" class="text-center">原设计</th><th colspan="2" class="text-center">申报变更增(+)减(-)</th>';
  910. $thhtml = '<th class="text-center">数量</th>
  911. <th class="text-center">金额</th>
  912. <th class="text-center">数量</th>
  913. <th class="text-center">金额</th>';
  914. $utotalarr = array();
  915. $checkinguid = 0;
  916. $firstcheck = 0;
  917. $lastid = 0;
  918. foreach ($auditlist as $ak => $av) {
  919. $listtablehtml .= '<th colspan="2" class="text-center">'.$av['name'].' 审批</th>';
  920. $thhtml .= '<th class="text-center">数量</th><th class="text-center">金额</th>';
  921. $utotalarr[$ak]['uid'] = $av['uid'];
  922. $utotalarr[$ak]['status'] = $av['status'];
  923. $utotalarr[$ak]['usum'] = 0;
  924. if($av['status'] == 'checking'){
  925. $checkinguid = $av['uid'];
  926. if($ak == 0){
  927. $firstcheck = 1;
  928. }else{
  929. $lastid = $auditlist[$ak-1]['uid'];
  930. }
  931. }
  932. }
  933. $this->data['lastuid'] = $lastid;
  934. //获取上一个审批人名称和提交人名称
  935. if($lastid != ''){
  936. $this->data['lastusername'] = $this->auth->getRowByUid($lastid)['name'];
  937. }
  938. $this->data['createusername'] = $this->auth->getRowByUid($changeArray['uid'])['name'];
  939. $this->data['firstcheck'] = $firstcheck;
  940. $listtablehtml .= '</tr><tr>'. $thhtml .'</tr>
  941. </thead>
  942. <tbody id="list">';
  943. if (!empty($clist)) {
  944. foreach ($clist as $ck => $cv) {
  945. $osum = floatval($cv['unitprice']) * floatval($cv['oamount']);
  946. $osum = $cv['lid'] != 0 ? todecimal($osum,$decimalnum['costdnum']) : $osum;
  947. $clist[$ck]['osum'] = $osum;
  948. $ototalnum += $osum;
  949. $csum = todecimal(floatval($cv['unitprice']) * floatval($cv['camount']),$decimalnum['costdnum']);
  950. $clist[$ck]['csum'] = $csum;
  951. $ctotalnum += $csum;
  952. $listtablehtml .= '<tr class="clist"><td>' . $cv['lnum'] . '</td><td>' . $cv['lname'] . '</td><td>' . $cv['unit'] . '</td><td>' . tofloat($cv['unitprice']) . '</td><td>' . $cv['oamount'] . '</td><td>' . $osum . '</td><td>' . $cv['camount'] . '</td><td>' . $csum . '</td>';
  953. $userjson = json_decode($cv['auditjson'], true);
  954. $tdhtml = '';
  955. foreach ($userjson as $uk => $uv) {
  956. if ($uv['uid'] == $checkinguid) {
  957. if($uv['ucamount'] != '') {
  958. $ssum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']);
  959. $samount = $uv['ucamount'];
  960. $stotalnum += $ssum;
  961. }else if ($cv['samount'] != ''){
  962. $ssum = todecimal(floatval($cv['unitprice'])*floatval($cv['samount']),$decimalnum['costdnum']);
  963. $samount = $cv['samount'];
  964. $stotalnum += $ssum;
  965. }else{
  966. $ssum = $csum;
  967. $samount = $cv['camount'];
  968. $stotalnum += $ssum;
  969. }
  970. $tdhtml .= '<td><input class="form-control input-sm" type="text" onkeyup="RegNum(this,event,'.$decimalnum['numberdnum'].')" listid="'.$cv['id'].'" value="'.$samount.'" placeholder="请输入变更数量"></td><td class="cnum">'.$ssum.'</td>';
  971. }else{
  972. if($uv['ucamount'] != ''){
  973. $usum = todecimal(floatval($cv['unitprice'])*floatval($uv['ucamount']),$decimalnum['costdnum']);
  974. $tdhtml .= '<td>'.$uv['ucamount'].'</td><td>'.$usum.'</td>';
  975. //update utotalarr value=>usum
  976. foreach($utotalarr as $tk => $tv){
  977. if($tv['uid'] == $uv['uid']){
  978. $utotalarr[$tk]['usum'] = todecimal(floatval($utotalarr[$tk]['usum'])+$usum,$decimalnum['costdnum']);
  979. break;
  980. }
  981. }
  982. }else{
  983. $tdhtml .= '<td></td><td></td>';
  984. }
  985. }
  986. }
  987. $listtablehtml = $listtablehtml.$tdhtml.'</tr>';
  988. }
  989. }
  990. $listtablehtml .= '</tbody><tfoot><tr class="info"><td>合计</td><td></td><td></td><td></td><td></td><td>'.$ototalnum.'</td><td></td><td>'.todecimal($ctotalnum,$decimalnum['costdnum']).'</td>';
  991. foreach($utotalarr as $tk => $tv){
  992. $addtd = $tv['status'] == 'checking' ? todecimal($stotalnum,$decimalnum['costdnum']) : ($tv['usum'] != 0 ? todecimal($tv['usum'],$decimalnum['costdnum']) : '');
  993. $checkinghtml = $tv['status'] == 'checking' ? ' class="utotalnum"': '';
  994. $listtablehtml .= '<td></td><td'. $checkinghtml .'>'.$addtd.'</td>';
  995. }
  996. $listtablehtml .= '</tr>
  997. </tfoot>
  998. </table>';
  999. $this->data['listtablehtml'] = $listtablehtml;
  1000. //uid
  1001. $this->data['userid'] = $this->auth->getUid();
  1002. //cid
  1003. $this->data['cid'] = $cid;
  1004. //获取附件
  1005. $attlist = $this->change->getChangeAttListbycid($cid);
  1006. $showattlist = array();
  1007. if (!empty($attlist)) {
  1008. foreach ($attlist as $k => $v) {
  1009. //加密下载的id
  1010. $fid = $this->__hashids->encode($v['id']);
  1011. $showattlist[$k]['fid'] = $v['id'];
  1012. $showattlist[$k]['uid'] = $v['uid'];
  1013. $showattlist[$k]['sort'] = $k + 1;
  1014. $showattlist[$k]['downurl'] = '/change/file/download/' . $fid;
  1015. $showattlist[$k]['filename'] = $v['filename'] . '.' . $v['fileext'];
  1016. $showattlist[$k]['time'] = date('Y-m-d H:i', $v['intime']);
  1017. $showattlist[$k]['size'] = $this->changefilesize($v['filesize']);
  1018. }
  1019. }
  1020. $this->data['attlist'] = $showattlist;
  1021. $auditlist2 = $this->change->getChangeAuditsbySort($cid);
  1022. if(!empty($auditlist2)){
  1023. foreach($auditlist2 as $ak => $av){
  1024. $auditlist2[$ak]['email'] = $this->auth->getEmail($av['uid']);
  1025. $auditlist2[$ak]['lastusite'] = $this->change->getChangeAuditsMaxUsite($cid,$av['times'])['maxsite'];
  1026. }
  1027. }
  1028. $this->data['auditlist'] = $auditlist2;
  1029. //判断是否为本标段终审人
  1030. $auditArray = $this->change->getChangeAuditLastUser($cid);
  1031. $this->data['isenduser'] = $auditArray['uid'] == $this->auth->getUid() ? 1 : 0;
  1032. $cfuhashids = new Hashids\Hashids('cfileupload', 15);
  1033. $this->data['uid'] = $this->auth->getUid();
  1034. $verification = $cfuhashids->encode($pmArray['pmid'],$this->auth->getUid());
  1035. $this->data['verification'] = $verification;
  1036. $this->render('biangeng-approval', $this->data, TRUE);exit;
  1037. }
  1038. }
  1039. exit('参数有误');
  1040. }
  1041. //重新上报、修改变更内容
  1042. public function changeReport(){
  1043. if(isset($this->params['cid']) && is_numeric($this->params['cid'])){
  1044. $cid = $this->params['cid'];
  1045. $changeArray = $this->change->getChangebyid($cid);
  1046. //判断当前变更令是否处于上报或重新上报状态,否 则显示详情页
  1047. if (!empty($changeArray) && ($changeArray['status'] == 'back' || $changeArray['status'] == 'uncheck') && $changeArray['uid'] == $this->auth->getUid() ) {
  1048. $pmArray = $this->actmeasure->getRowByPmid($changeArray['pmid']);
  1049. if (empty($pmArray)) {
  1050. exit('不存在此标段');
  1051. }
  1052. if($this->auth->getUid() != $pmArray['uid']){
  1053. exit('不是原报人无法修改或重新上报变更令');
  1054. }
  1055. include (DOO::conf()->SITE_PATH . 'protected/plugin/TemplateTag.php');
  1056. //取标段位数设置
  1057. $decimalnum = $this->getdecimal($changeArray['decimalnum']);
  1058. $this->data['costdnum'] = $decimalnum['costdnum'];
  1059. $this->data['numberdnum'] = $decimalnum['numberdnum'];
  1060. //删除变更令
  1061. if(isset($_POST['delete']) && !empty($_POST['delete']) && $changeArray['status'] == 'uncheck'){
  1062. //需要删除变更令表,清单表,变更审批人表,附件表及附件
  1063. $this->change->delChangebyCid($cid);
  1064. $this->change->delChangeAuditListbyCid($cid);
  1065. $this->change->delChangeAuditbyCid($cid);
  1066. $changeAttList = $this->change->getChangeAttListbycid($cid);
  1067. if(!empty($changeAttList)){
  1068. Doo::loadModel('changeatt');
  1069. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  1070. $pathf = DOO::conf()->SITE_PATH;
  1071. foreach($changeAttList as $k => $v){
  1072. $this->IoHandler = new IoHandler();
  1073. $this->IoHandler->DeleteFile($pathf.$v['filepath']);
  1074. $changeAtt = new ChangeAtt();
  1075. $changeAtt->delChangeAttbyFid($v['id']);
  1076. }
  1077. }
  1078. return '/change/index/tender/'.$pmArray['pmid'];
  1079. }
  1080. //表单提交
  1081. if(isset($_POST['pnum'])){
  1082. if(isset($_POST['status']) && $_POST['status'] == 'checking'){
  1083. if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname']) || !isset($_POST['description']) || empty($_POST['description']) || !isset($_POST['changeaudit']) || empty($_POST['changeaudit']) || !isset($_POST['changelist']) || !isset($_POST['changewhitelist'])){
  1084. exit('参数缺失或为空');
  1085. }
  1086. if(empty($_POST['changelist']) && empty($_POST['changewhitelist'])){
  1087. exit('变更清单缺失');
  1088. }
  1089. }elseif(isset($_POST['status']) && $_POST['status'] == 'save'){
  1090. if(empty($_POST['pnum']) || !isset($_POST['pname']) || empty($_POST['pname'])){
  1091. exit('参数缺失或为空');
  1092. }
  1093. }
  1094. Doo::loadModel('change');
  1095. Doo::loadModel('changeaudit');
  1096. Doo::loadModel('changeauditlist');
  1097. //获取提交人audit表信息
  1098. $creatorArray = $this->change->getChangeAuditLastUser($cid,0);
  1099. $sort = $creatorArray['usort']+1;
  1100. //先修改成变更令
  1101. $status = isset($_POST['status']) && $_POST['status'] == 'checking' ? 'checking' : '';
  1102. $this->change->updateChangeMsg($cid,$_POST,$creatorArray['times'],$status);
  1103. if($status){
  1104. //再修改提交人上报信息
  1105. $changeaudit2 = new ChangeAudit();
  1106. $changeaudit2->id = $creatorArray['id'];
  1107. $changeaudit2->status = 'checked';
  1108. $changeaudit2->sintime = time();
  1109. $changeaudit2->update();
  1110. }
  1111. //附件添加cid
  1112. if(!empty($_POST['changeatt'])){
  1113. Doo::loadModel('changeatt');
  1114. $attlist = explode(',', $_POST['changeatt']);
  1115. foreach($attlist as $ak => $av){
  1116. $changeAtt = new ChangeAtt();
  1117. $changeAtt->id = $av;
  1118. $changeAtt->cid = $cid;
  1119. $changeAtt->update();
  1120. }
  1121. }
  1122. //先删除所有审批人列,再重新添加
  1123. $caudit = new ChangeAudit();
  1124. $caudit->deleteChangeAuditthisTime($cid,$creatorArray['times']);
  1125. //审批人添加
  1126. $auditArr = array();
  1127. if(!empty($_POST['changeaudit'])){
  1128. $auditlist = explode(',', $_POST['changeaudit']);
  1129. $site = 1;
  1130. foreach($auditlist as $uk => $uv){
  1131. $userArray = $this->auth->getRowByUid($uv);
  1132. $changeaudit = new ChangeAudit();
  1133. $changeaudit->pid = $pmArray['pid'];
  1134. $changeaudit->stid = $pmArray['stid'];
  1135. $changeaudit->pmid = $pmArray['pmid'];
  1136. $changeaudit->cid = $cid;
  1137. $changeaudit->times = $creatorArray['times'];
  1138. $changeaudit->usite = $site;
  1139. $changeaudit->usort = $sort;
  1140. $changeaudit->uid = $uv;
  1141. $changeaudit->company = $userArray['company'];
  1142. $changeaudit->jobs = $userArray['jobs'];
  1143. $changeaudit->name = $userArray['name'];
  1144. $changeaudit->status = (isset($_POST['status']) && $_POST['status'] == 'checking' && $uk == 0) ? 'checking' : 'uncheck';
  1145. $changeaudit->insert();
  1146. $sort++;
  1147. $site++;
  1148. array_push($auditArr,array('uid' => $uv, 'ucamount' => ''));
  1149. }
  1150. }
  1151. //先删除变更令所有清单列,再重新添加
  1152. $cauditlist2 = new ChangeAuditList();
  1153. $cauditlist2->delChangeAuditListbyCid($cid);
  1154. //清单添加,不分顺序,最终展示按清单编号排序
  1155. $total = 0;
  1156. if(!empty($_POST['changelist'])){
  1157. $clist = explode(',',$_POST['changelist']);
  1158. foreach($clist as $ck => $cv){
  1159. $clistid = explode('->',$cv)[0];
  1160. $clistarr = explode(';',explode('->',$cv)[1]);
  1161. if(!empty($clistarr[0]) && !empty($clistarr[1]) && is_numeric($clistarr[3]) && is_numeric($clistarr[4]) && is_numeric($clistarr[5])){
  1162. $changelistArr = $this->change->getChangeListbyid($clistid);
  1163. if(!empty($changelistArr)){
  1164. $total += todecimal(floatval($changelistArr['unitprice'])*floatval($clistarr[5]),$decimalnum['costdnum']);
  1165. $cauditlist = new ChangeAuditList();
  1166. $cauditlist->pid = $pmArray['pid'];
  1167. $cauditlist->stid = $pmArray['stid'];
  1168. $cauditlist->pmid = $pmArray['pmid'];
  1169. $cauditlist->cid = $cid;
  1170. $cauditlist->lid = $clistid;
  1171. $cauditlist->lnum = $changelistArr['lnum'];
  1172. $cauditlist->lname = $changelistArr['lname'];
  1173. $cauditlist->unit = $changelistArr['unit'];
  1174. $cauditlist->unitprice = $changelistArr['unitprice'];
  1175. $cauditlist->oamount = $changelistArr['amount'];
  1176. $cauditlist->camount = $clistarr[5];
  1177. $cauditlist->auditjson = json_encode($auditArr);
  1178. $cauditlist->insert();
  1179. }else{
  1180. $total += todecimal(floatval($clistarr[3])*floatval($clistarr[5]),$decimalnum['costdnum']);
  1181. $cauditlist = new ChangeAuditList();
  1182. $cauditlist->pid = $pmArray['pid'];
  1183. $cauditlist->stid = $pmArray['stid'];
  1184. $cauditlist->pmid = $pmArray['pmid'];
  1185. $cauditlist->cid = $cid;
  1186. $cauditlist->lid = 0;
  1187. $cauditlist->lnum = $clistarr[0];
  1188. $cauditlist->lname = $clistarr[1];
  1189. $cauditlist->unit = $clistarr[2];
  1190. $cauditlist->unitprice = $clistarr[3];
  1191. $cauditlist->oamount = $clistarr[4];
  1192. $cauditlist->camount = $clistarr[5];
  1193. $cauditlist->auditjson = json_encode($auditArr);
  1194. $cauditlist->insert();
  1195. }
  1196. }
  1197. }
  1198. }
  1199. if(!empty($_POST['changewhitelist'])){
  1200. $wlist = explode(',',$_POST['changewhitelist']);
  1201. foreach($wlist as $wk => $wv){
  1202. $wlistarr = explode(';',explode('->',$wv)[1]);
  1203. if(!empty($wlistarr[0]) && !empty($wlistarr[1]) && is_numeric($wlistarr[3]) && is_numeric($wlistarr[4]) && is_numeric($wlistarr[5])){
  1204. $total += todecimal(floatval($wlistarr[3])*floatval($wlistarr[5]),$decimalnum['costdnum']);
  1205. $cauditlist = new ChangeAuditList();
  1206. $cauditlist->pid = $pmArray['pid'];
  1207. $cauditlist->stid = $pmArray['stid'];
  1208. $cauditlist->pmid = $pmArray['pmid'];
  1209. $cauditlist->cid = $cid;
  1210. $cauditlist->lid = 0;
  1211. $cauditlist->lnum = $wlistarr[0];
  1212. $cauditlist->lname = $wlistarr[1];
  1213. $cauditlist->unit = $wlistarr[2];
  1214. $cauditlist->unitprice = $wlistarr[3];
  1215. $cauditlist->oamount = $wlistarr[4];
  1216. $cauditlist->camount = $wlistarr[5];
  1217. $cauditlist->auditjson = json_encode($auditArr);
  1218. $cauditlist->insert();
  1219. }
  1220. }
  1221. }
  1222. //变更令添加变更总金额
  1223. $this->change->updateChangeTotalamount($cid,todecimal($total,$decimalnum['costdnum']));
  1224. $status = isset($_POST['status']) && $_POST['status'] == 'checking' ? 3 : 2;
  1225. return '/change/index/tender/'.$pmArray['pmid'].'/status/'.$status;
  1226. }
  1227. $this->data['companylist'] = $this->change->getCompanyList($pmArray['pmid']);
  1228. $list = $this->change->getChangeListbyPmid($pmArray['pmid']);
  1229. if(!empty($list)){
  1230. foreach($list as $k => $v){
  1231. $totalamount = floatval($v['unitprice'])*floatval($v['amount']);
  1232. $list[$k]['totalamount'] = todecimal($totalamount,2);
  1233. $list[$k]['index'] = $k+1;
  1234. }
  1235. }
  1236. //获取标段审批人列表
  1237. $auditactlist = $this->measureauditact->getUserAuditID($pmArray['pmid']);
  1238. //获取原报人
  1239. $measureArray = $this->actmeasure->getRowByPmid($pmArray['pmid']);
  1240. $inside = 1;
  1241. $userlist = array();
  1242. $useridlist = array();
  1243. if(!empty($auditactlist)){
  1244. foreach($auditactlist as $k => $v){
  1245. if($measureArray['uid'] == $v['auditoruid']){
  1246. $inside = 0;
  1247. }
  1248. $usermsg = $this->auth->getRowByUid($v['auditoruid']);
  1249. $userlist[$k]['userid'] = $usermsg['userid'];
  1250. $userlist[$k]['name'] = $usermsg['name'];
  1251. $userlist[$k]['jobs'] = $usermsg['jobs'];
  1252. $userlist[$k]['avatar'] = $usermsg['avatar'];
  1253. $userlist[$k]['company'] = $usermsg['company'];
  1254. $userlist[$k]['email'] = $this->auth->getEmail($v['auditoruid']);
  1255. array_push($useridlist, $usermsg['userid']);
  1256. }
  1257. }
  1258. if($inside){
  1259. $usermsg2 = $this->auth->getRowByUid($measureArray['uid']);
  1260. $orginArray['userid'] = $measureArray['uid'];
  1261. $orginArray['avatar'] = $usermsg2['avatar'];
  1262. $orginArray['name'] = $usermsg2['name'];
  1263. $orginArray['jobs'] = $usermsg2['jobs'];
  1264. $orginArray['company'] = $usermsg2['company'];
  1265. $orginArray['email'] = $this->auth->getEmail($measureArray['uid']);
  1266. array_push($userlist,$orginArray);
  1267. array_push($useridlist, $usermsg2['userid']);
  1268. }
  1269. //获取已选审批人列表,生成changeaudit和selectauditlist,并把未在常用审批人的uid找出来
  1270. $auditlist = $this->change->getChangeAuditsbycidtime($cid,$changeArray['times']);
  1271. $changeauditList = array();
  1272. $selectauditlist = array();
  1273. foreach($auditlist as $adk => $adv){
  1274. $email = $this->auth->getEmail($adv['uid']);
  1275. $auditlist[$adk]['email'] = $email;
  1276. $auditlist[$adk]['lastusite'] = count($auditlist);
  1277. array_push($changeauditList,$adv['uid']);
  1278. $addauditlist = $adv['uid'].'_'.$adv['name'].'_'.$adv['company'].'_'.$adv['jobs'].'_'.$email;
  1279. array_push($selectauditlist,$addauditlist);
  1280. // if(!in_array($adv['uid'],$useridlist)){
  1281. // $auditlist[$adk]['email'] = $this->auth->getEmail($adv['uid']);
  1282. // array_push($useridlist,$adv['uid']);
  1283. // }
  1284. $auditlist[$adk]['islast'] = $adk+1 == count($auditlist) ? 1 : 0;
  1285. }
  1286. $this->data['changeaudit'] = implode(',',$changeauditList);
  1287. $this->data['selectauditlist'] = implode('->',$selectauditlist);
  1288. $this->data['auditlist'] = $auditlist;
  1289. //获取已选清单列表,已选清单id列表,属于签约清单的changelist,和changewhitelist
  1290. $clist = $this->change->getChangeAuditListbycid($cid);
  1291. $ototalnum = 0;
  1292. $ctotalnum = 0;
  1293. $changeidlist = array();
  1294. $changelist = array();
  1295. $changewhitelist = array();
  1296. $changeRepeatList = array();
  1297. $changeRepeatWhiteList = array();
  1298. if(!empty($clist)){
  1299. $addnum = 1;
  1300. foreach($clist as $ck => $cv){
  1301. $osum = floatval($cv['unitprice'])*floatval($cv['oamount']);
  1302. $osum = todecimal($osum,2);
  1303. $csum = todecimal(floatval($cv['unitprice'])*floatval($cv['camount']),$decimalnum['costdnum']);
  1304. $clist[$ck]['csum'] = $csum;
  1305. $ctotalnum += $csum;
  1306. //判断这条清单是否已被替换或删除,有则变成空白清单显示
  1307. $oneclist = $this->change->getChangeListbyid($cv['lid']);
  1308. if($cv['lid'] != 0 && !empty($oneclist)){
  1309. array_push($changeidlist,$cv['lid']);
  1310. array_push($changelist,$cv['lid'].'->'.$cv['lnum'].';'.$cv['lname'].';'.$cv['unit'].';'.$cv['unitprice'].';'.$cv['oamount'].';'.$cv['camount']);
  1311. $clist[$ck]['iswhite'] = 0;
  1312. array_push($changeRepeatList, $cv['lnum'].'|'.$cv['lname'].'|'.$cv['unit'].'|'.$cv['unitprice']);
  1313. }else{
  1314. $clist[$ck]['add'] = $addnum;
  1315. array_push($changewhitelist,$addnum.'->'.$cv['lnum'].';'.$cv['lname'].';'.$cv['unit'].';'.$cv['unitprice'].';'.$cv['oamount'].';'.$cv['camount']);
  1316. $addnum++;
  1317. $clist[$ck]['changeunit'] = $this->changeUnit;
  1318. $clist[$ck]['iswhite'] = 1;
  1319. array_push($changeRepeatWhiteList, $cv['lnum'].'|'.$cv['lname'].'|'.$cv['unit'].'|'.$cv['unitprice']);
  1320. }
  1321. $clist[$ck]['osum'] = $osum;
  1322. $ototalnum += $osum;
  1323. }
  1324. }
  1325. $this->data['changelist'] = implode(',',$changelist);
  1326. $this->data['changewhitelist'] = implode(',',$changewhitelist);
  1327. $this->data['changeidlist'] = implode(',',$changeidlist);
  1328. $this->data['ototalnum'] = $ototalnum;
  1329. $this->data['ctotalnum'] = todecimal($ctotalnum,$decimalnum['costdnum']);
  1330. $this->data['clist'] = $clist;
  1331. $this->data['changeRepeatList'] = implode(',',$changeRepeatList);
  1332. $this->data['changeRepeatWhiteList'] = implode(',',$changeRepeatWhiteList);
  1333. //获取已添加的附件列表
  1334. $attlist = $this->change->getChangeAttListbycid($cid);
  1335. $showattlist = array();
  1336. if (!empty($attlist)) {
  1337. foreach ($attlist as $k => $v) {
  1338. //加密下载的id
  1339. $fid = $this->__hashids->encode($v['id']);
  1340. $showattlist[$k]['fid'] = $v['id'];
  1341. $showattlist[$k]['uid'] = $v['uid'];
  1342. $showattlist[$k]['sort'] = $k + 1;
  1343. $showattlist[$k]['downurl'] = '/change/file/download/' . $fid;
  1344. $showattlist[$k]['filename'] = $v['filename'] . '.' . $v['fileext'];
  1345. $showattlist[$k]['time'] = date('Y-m-d H:i', $v['intime']);
  1346. $showattlist[$k]['size'] = $this->changefilesize($v['filesize']);
  1347. }
  1348. }
  1349. $this->data['attlist'] = $showattlist;
  1350. $this->data['changeArray'] = $changeArray;
  1351. $this->data['pmArray'] = $pmArray;
  1352. $this->data['userlist'] = $userlist;
  1353. $this->data['useridlist'] = implode(',',$useridlist);
  1354. $userArray = $this->auth->getRowByUid($this->auth->getUid());
  1355. $userArray['email'] = $this->auth->getEmail($this->auth->getUid());
  1356. $this->data['userArray'] = $userArray;
  1357. $this->data['list'] = $list;
  1358. $this->data['year'] = date('Y',time());
  1359. //输出重新上报的审批列表信息
  1360. if($changeArray['status'] == 'back'){
  1361. $creatorArray = $this->change->getChangeAuditLastUser($cid,0);
  1362. $auditlist2 = $this->change->getChangeAuditsbySort($cid,$creatorArray['times']);
  1363. if(!empty($auditlist2)){
  1364. foreach($auditlist2 as $ak => $av){
  1365. $auditlist2[$ak]['email'] = $this->auth->getEmail($av['uid']);
  1366. $auditlist2[$ak]['lastusite'] = $this->change->getChangeAuditsMaxUsite($cid,$av['times'])['maxsite'];
  1367. }
  1368. }
  1369. $this->data['auditlist2'] = $auditlist2;
  1370. }
  1371. $cfuhashids = new Hashids\Hashids('cfileupload', 15);
  1372. $this->data['uid'] = $this->auth->getUid();
  1373. $verification = $cfuhashids->encode($pmArray['pmid'],$this->auth->getUid());
  1374. $this->data['verification'] = $verification;
  1375. // $this->data['stepnumdnum'] = $this->makestep(intval($decimalnum['numberdnum']));
  1376. $this->render('biangeng-update', $this->data, TRUE);
  1377. }else{
  1378. return '/change/detail/' . $cid;
  1379. die;
  1380. }
  1381. }else{
  1382. exit('不存在此变更令');
  1383. }
  1384. }
  1385. public function editCompany(){
  1386. if(isset($_POST['uci']) && isset($_POST['uc']) && isset($_POST['ac'])){
  1387. $addhtml = '';
  1388. $selecthtml = '';
  1389. Doo::loadModel('changecompany');
  1390. if(!empty($_POST['uci'])){
  1391. $idarr = $_POST['uci'];
  1392. $namearr = $_POST['uc'];
  1393. foreach($idarr as $k => $v){
  1394. $company = new ChangeCompany();
  1395. $company->id = $v;
  1396. $company->name = $namearr[$k];
  1397. $company->update();
  1398. $selecthtml .= '<option value="'.$v.'">'.$namearr[$k].'</option>';
  1399. }
  1400. }
  1401. if(!empty($_POST['ac'])){
  1402. $addarr = $_POST['ac'];
  1403. $pmArray = $this->actmeasure->getRowByPmid($_POST['pmid']);
  1404. foreach($addarr as $ak => $av){
  1405. if(!empty(trim($av))){
  1406. $company2 = new ChangeCompany();
  1407. $company2->pid = $pmArray['pid'];
  1408. $company2->stid = $pmArray['stid'];
  1409. $company2->pmid = $pmArray['pmid'];
  1410. $company2->name = $av;
  1411. $id = $company2->insert();
  1412. $selecthtml .= '<option value="'.$id.'">'.$av.'</option>';
  1413. $addhtml .= '<div class="form-group"><input type="text" id="'.$id.'" class="form-control" value="'.$av.'"></div>';
  1414. }
  1415. }
  1416. }
  1417. echo json_encode(array('code' => 200, 'addhtml' => $addhtml, 'selecthtml' => $selecthtml));
  1418. die;
  1419. }else{
  1420. echo json_encode(array('code' => 500));
  1421. die;
  1422. }
  1423. }
  1424. public function searchUser(){
  1425. if(!isset($_GET['name']) || empty($_GET['name'])){
  1426. echo json_encode(array('code' => 400, 'msg' => '请输入审批人名称'));
  1427. exit;
  1428. }
  1429. $usermsg = $this->profile->checkUserName($_GET['name']);
  1430. if(!empty($usermsg)){
  1431. $useridlist = $_POST['useridlist'];
  1432. $userlist = array();
  1433. foreach($usermsg as $k => $v){
  1434. if(!in_array($v['userid'], $useridlist)){
  1435. $usermsg[$k]['email'] = $this->auth->getEmail($v['userid']);
  1436. array_push($userlist,$usermsg[$k]);
  1437. }
  1438. }
  1439. if(!empty($userlist)){
  1440. echo json_encode(array('code' => 200, 'userlist' => $userlist));
  1441. exit;
  1442. }else{
  1443. echo json_encode(array('code' => 400, 'msg' => '常用中已存在当前审批人'));
  1444. exit;
  1445. }
  1446. }else{
  1447. echo json_encode(array('code' => 400, 'msg' => '不存在此审批人名称'));
  1448. exit;
  1449. }
  1450. }
  1451. public function fileUpload(){
  1452. // session_write_close();
  1453. // if(isset($_POST['sessionid'])){
  1454. // session_id($_POST['sessionid']);
  1455. // setcookie('PHPSESSID',$_POST['sessionid']);
  1456. // session_start();
  1457. // }
  1458. if(!isset($this->params['pmid']) && !is_numeric($this->params['pmid'])){
  1459. exit(json_encode(array('success' => false, 'msg' => '参数有误')));
  1460. }
  1461. $pmArray = $this->actmeasure->getRowByPmid($this->params['pmid']);
  1462. if(empty($pmArray)){
  1463. exit(json_encode(array('success' => false, 'msg' => '不存在此标段,无法上传')));
  1464. }
  1465. Doo::loadClass('extras/Uploader');
  1466. $files = array();
  1467. $upload_dir = Doo::conf()->SITE_PATH . 'cfiles/';
  1468. $uploader = new FileUpload('uploadfile');
  1469. $intime = time();
  1470. $extPathdir = $upload_dir.date('Y/md/',$intime);
  1471. if (!$this->dir_create2($extPathdir)) {
  1472. $status = array('success' => FALSE, 'msg' => '文件夹创建失败');
  1473. echo json_encode($status, JSON_UNESCAPED_UNICODE);
  1474. die();
  1475. }
  1476. $files['filename'] = $uploader->getFileNameWithoutExt();
  1477. $files['fileext'] = $uploader->getExtension();
  1478. $files['filesize'] = $uploader->getFileSize();
  1479. $filepath = date('Ymdhis',$intime) . rand(100, 999) . '.' . $files['fileext'];
  1480. $uploader->newFileName = $filepath;
  1481. $files['filepath'] = 'cfiles/'.date('Y/md/',$intime).$filepath;
  1482. $result = $uploader->handleUpload($extPathdir);
  1483. if (!$result) {
  1484. exit(json_encode(array('success' => false, 'msg' => $uploader->getErrorMsg())));
  1485. }
  1486. $files['pid'] = $pmArray['pid'];
  1487. $files['stid'] = $pmArray['stid'];
  1488. $files['pmid'] = $pmArray['pmid'];
  1489. $files['cid'] = isset($this->params['cid']) && is_numeric($this->params['cid']) ? $this->params['cid'] : 0;
  1490. $files['uid'] = $this->auth->getUid();
  1491. $files['intime'] = $intime;
  1492. $result2 = $this->change->insertChangeAtt($files);
  1493. if(empty($result2)){
  1494. exit(json_encode(array('success' => false, 'msg' => '添加到数据库发生错误')));
  1495. }
  1496. $files2 = array();
  1497. $files2['id'] = $result2;
  1498. //加密下载的id
  1499. $fid = $this->__hashids->encode($result2);
  1500. $files2['downurl'] = '/change/file/download/'.$fid;
  1501. $files2['filename'] = $files['filename'].'.'.$files['fileext'];
  1502. $files2['time'] = date('Y-m-d H:i',$intime);
  1503. $files2['size'] = $this->changefilesize($files['filesize']);
  1504. echo json_encode(array('success' => true, 'files' => $files2));
  1505. }
  1506. public function fileDownload(){
  1507. $fid = isset($this->params['fid'])?$this->params['fid']:null;
  1508. if($fid) {
  1509. //解密下载的id
  1510. $fid = $this->__hashids->decode($fid)[0];
  1511. $fileArray = $this->change->getChangeAttbyFid($fid);
  1512. if (!empty($fileArray)) {
  1513. $pathf = DOO::conf()->SITE_PATH;
  1514. $this->file_down($pathf.$fileArray['filepath'],$fileArray['filename'].'.'.$fileArray['fileext']);
  1515. }
  1516. }
  1517. }
  1518. public function fileDelete(){
  1519. $fid = isset($_POST['fid']) && is_numeric($_POST['fid']) ? $_POST['fid'] : null;
  1520. if($fid){
  1521. $fileArray = $this->change->getChangeAttbyFid($fid);
  1522. if (!empty($fileArray) && $fileArray['uid'] == $this->auth->getUid()) {
  1523. include (DOO::conf()->SITE_PATH . 'protected/plugin/io.han.php');
  1524. $pathf = DOO::conf()->SITE_PATH;
  1525. $this->IoHandler = new IoHandler();
  1526. $this->IoHandler->DeleteFile($pathf.$fileArray['filepath']);
  1527. $this->change->delChangeAttbyFid($fid);
  1528. exit(json_encode(array('code' => 200)));
  1529. }
  1530. }
  1531. exit(json_encode(array('code' => 400)));
  1532. }
  1533. public function pnumCheck(){
  1534. if(isset($_POST['pnum']) && !empty($_POST['pnum']) && isset($_POST['status']) && !empty($_POST['status']) && isset($_POST['pmid']) && is_numeric($_POST['pmid'])){
  1535. if($_POST['status'] == 'new'){
  1536. $changeArray = $this->change->getChangebyPnumPmid($_POST['pnum'],$_POST['pmid']);
  1537. if(!empty($changeArray)){
  1538. exit(json_encode(array('code' => 400,'msg' => '当前标段变更令已存在此申请编号,请重新输入或改变自增编号值')));
  1539. }else{
  1540. exit(json_encode(array('code' => 200,'msg' => '')));
  1541. }
  1542. }elseif($_POST['status'] == 'update'){
  1543. if(isset($_POST['cid']) && is_numeric($_POST['cid'])){
  1544. $changeArray = $this->change->getChangebyPnumPmid($_POST['pnum'],$_POST['pmid'],$_POST['cid']);
  1545. if(!empty($changeArray)){
  1546. exit(json_encode(array('code' => 400,'msg' => '当前标段变更令已存在此申请编号,请重新输入或改变自增编号值')));
  1547. }else{
  1548. exit(json_encode(array('code' => 200,'msg' => '')));
  1549. }
  1550. }
  1551. }
  1552. }
  1553. exit(json_encode(array('code' => 400,'msg' => '判断参数有误')));
  1554. }
  1555. //设置小数位数
  1556. public function setDecimalnum(){
  1557. $num = array(0,1,2,3,4,5,6);
  1558. if(isset($_POST['costdnum']) && isset($_POST['numberdnum']) && in_array(intval($_POST['costdnum']), $num) && in_array(intval($_POST['numberdnum']), $num)){
  1559. $dnum = intval($_POST['costdnum']).'_'.intval($_POST['numberdnum']);
  1560. //判断更改类型
  1561. if(isset($_POST['pmid']) && is_numeric($_POST['pmid'])){
  1562. $pmArray = $this->actmeasure->getRowByPmid($_POST['pmid']);
  1563. if(!empty($pmArray)){
  1564. $this->actmeasure->updateChangeDecimalNum($_POST['pmid'],$dnum);
  1565. exit(json_encode(array('code' => 200,'msg' => '更新小数位数成功')));
  1566. }else{
  1567. exit(json_encode(array('code' => 400,'msg' => '不存在此标段')));
  1568. }
  1569. }elseif(isset($_POST['cid']) && is_numeric($_POST['cid'])){
  1570. $changeArray = $this->change->getChangebyid($_POST['cid']);
  1571. if(!empty($changeArray)){
  1572. $this->change->updateChangeDecimalNum($_POST['cid'],$dnum);
  1573. exit(json_encode(array('code' => 200,'msg' => '更新小数位数成功')));
  1574. }else{
  1575. exit(json_encode(array('code' => 400,'msg' => '不存在此变更令')));
  1576. }
  1577. }
  1578. }
  1579. exit(json_encode(array('code' => 400,'msg' => '参数或小数位数有误')));
  1580. }
  1581. //根据位数生成几位小数,0位-》1,1位-》0.1 ,5位-》0.00001
  1582. function makestep($num){
  1583. if($num >= 1 && $num <= 6){
  1584. $arr = [];
  1585. for($i=0;$i< $num;$i++){
  1586. if($i != $num-1){
  1587. $arr[$i] = 0;
  1588. }else{
  1589. $arr[$i] = 1;
  1590. }
  1591. }
  1592. return '0.'.implode('',$arr);
  1593. }else{
  1594. return 1;
  1595. }
  1596. }
  1597. //获取costdnum和numberdnum
  1598. function getdecimal($arr){
  1599. //取变更令位数设置
  1600. $decimalnum = explode('_',$arr);
  1601. $decimal = array();
  1602. $decimal['costdnum'] = $decimalnum[0];
  1603. $decimal['numberdnum'] = $decimalnum[1];
  1604. return $decimal;
  1605. }
  1606. public function substr_replace_cn($string, $repalce = '*', $start = 0, $len = 0)
  1607. {
  1608. $count = mb_strlen($string, 'UTF-8'); //此处传入编码,建议使用utf-8。此处编码要与下面mb_substr()所使用的一致
  1609. if (!$count) {
  1610. return $string;
  1611. }
  1612. if ($len == 0) {
  1613. $end = $count; //传入0则替换到最后
  1614. } else {
  1615. $end = $start + $len; //传入指定长度则为开始长度+指定长度
  1616. }
  1617. $i = 0;
  1618. $returnString = '';
  1619. while ($i < $count) { //循环该字符串
  1620. $tmpString = mb_substr($string, $i, 1, 'UTF-8'); // 与mb_strlen编码一致
  1621. if ($start <= $i && $i < $end) {
  1622. $returnString .= $repalce;
  1623. } else {
  1624. $returnString .= $tmpString;
  1625. }
  1626. $i++;
  1627. }
  1628. return $returnString;
  1629. }
  1630. function unicode_encode($name)
  1631. {//to Unicode
  1632. $name = iconv('UTF-8', 'UCS-2', $name);
  1633. $len = strlen($name);
  1634. $str = '';
  1635. for ($i = 0; $i < $len - 1; $i = $i + 2) {
  1636. $c = $name[$i];
  1637. $c2 = $name[$i + 1];
  1638. if (ord($c) > 0) {// 两个字节的字
  1639. $str .= '\\' . base_convert(ord($c), 10, 16) . base_convert(ord($c2), 10, 16);
  1640. } else {
  1641. $str .= $c2;
  1642. }
  1643. }
  1644. $str = strtoupper($str);
  1645. return $str;
  1646. }
  1647. function unicode_decode($name)
  1648. {//Unicode to
  1649. $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
  1650. preg_match_all($pattern, $name, $matches);
  1651. if (!empty($matches)) {
  1652. $name = '';
  1653. for ($j = 0; $j < count($matches[0]); $j++) {
  1654. $str = $matches[0][$j];
  1655. if (strpos($str, '\\u') === 0) {
  1656. $code = base_convert(substr($str, 2, 2), 16, 10);
  1657. $code2 = base_convert(substr($str, 4), 16, 10);
  1658. $c = chr($code) . chr($code2);
  1659. $c = iconv('UCS-2', 'UTF-8', $c);
  1660. $name .= $c;
  1661. } else {
  1662. $name .= $str;
  1663. }
  1664. }
  1665. }
  1666. return $name;
  1667. }
  1668. function dir_create2($path, $mode = 0777)
  1669. {
  1670. if (is_dir($path))
  1671. return TRUE;
  1672. $path = $this->dir_path($path);
  1673. $parent = dirname($path);
  1674. if (!is_dir($parent)){
  1675. @mkdir($parent, 0777);
  1676. @chmod($parent, 0777);
  1677. }
  1678. @mkdir($path, 0777);
  1679. @chmod($path, 0777);
  1680. return is_dir($path);
  1681. }
  1682. function dir_path($path)
  1683. {
  1684. $path = str_replace('\\', '/', $path);
  1685. if (substr($path, -1) != '/')
  1686. $path = $path . '/';
  1687. return $path;
  1688. }
  1689. //字节转换
  1690. function changefilesize($value){
  1691. $units = array(' B', ' KB', ' MB', ' GB', ' TB');
  1692. for ($i = 0; $value >= 1024 && $i < 4; $i++) $value /= 1024;
  1693. return round($value, 2).$units[$i];
  1694. }
  1695. /**
  1696. * 文件下载
  1697. * @param $filepath 文件路径
  1698. * @param $filename 文件名称
  1699. */
  1700. public function file_down($filepath,$filename) {
  1701. if (ob_get_length() !== false)
  1702. @ob_end_clean();
  1703. header('Content-Description: File Download');
  1704. header('Content-Type: application/octet-stream');
  1705. header('Content-Disposition: attachment; filename='.basename($filename));
  1706. header('Content-Transfer-Encoding: binary');
  1707. header('Expires: 0');
  1708. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  1709. header('Pragma: public');
  1710. header('Content-Length: ' . filesize($filepath));
  1711. @readfile($filepath);
  1712. }
  1713. }
  1714. ?>