AssetItems.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. <?php
  2. namespace app\common\model;
  3. use app\hander\HelpHander;
  4. use think\Db;
  5. use think\Exception;
  6. use think\Model;
  7. class AssetItems extends Model
  8. {
  9. public function add(){
  10. $data = [
  11. 'id' => input('id/d',0),
  12. 'title' => input('title','','trim'),
  13. 'spec' => input('spec','','trim'),
  14. 'price' => input('price/f',0),
  15. 'org_id' => input('orgId/d',0),
  16. 'cate_id' => input('cateId/d',0),
  17. 'unit_id' => input('unitId/d',0),
  18. 'add_id' => input('addId/d',0),
  19. 'class_id' => input('classId/d',0),
  20. 'company_id' => input('companyId/d',0),
  21. 'buy_time' => input('buyTime','','trim'),
  22. 'nums' => input('nums/d',0),
  23. 'remark' => input('remark','','trim'),
  24. 'brand' => input('brand','','trim'),
  25. 'address' => input('address','','trim'),
  26. 'used' => input('used','','trim'),
  27. 'print' => input('print/d',0),
  28. 'enable' => input('enable/d',1),
  29. 'remark2' => input('remark2','','trim'),
  30. 'remark3' => input('remark3','','trim'),
  31. 'remark4' => input('remark4','','trim'),
  32. 'remark5' => input('remark5','','trim'),
  33. 'dep_id' => input('depId/d',0),
  34. 'user_id' => input('uid/d',0),
  35. 'finance_sn' => input('financeSn','','trim'),
  36. 'sn' => input('sn','','trim')
  37. ];
  38. if($data['id'] == 0){
  39. $data['sn'] = '';
  40. }
  41. $logdata = json_encode($data);
  42. $result = validate('AssetItems')->check($data,[],'');
  43. if(true !== $result){
  44. HelpHander::error(validate('AssetItems')->getError());
  45. }
  46. $id = $data['id'];
  47. if($id > 0){ //已拆分的不能修改数量
  48. $info = Db::name('asset_items')->where('id',$id)->where('del',0)->find();
  49. if(!$info){
  50. HelpHander::error('记录不存在');
  51. }
  52. if($data['nums'] != $info['nums'] && $info['nums'] == 1){
  53. HelpHander::error('该记录已拆分,不能修改数量');
  54. }
  55. }
  56. unset($data['id']);
  57. if($id > 0){
  58. $data['update_time'] = date('Y-m-d H:i:s');
  59. $ret = $this->allowField(true)->save($data,['id'=>$id]);
  60. if(!$ret){
  61. HelpHander::error('操作失败');
  62. }
  63. }else{
  64. $data['create_time'] = date('Y-m-d H:i:s');
  65. Db::startTrans();
  66. try{
  67. // 去当天最大编号
  68. $max = Db::name('asset_items')
  69. ->where('org_id',$data['org_id'])
  70. ->where('create_time','>=',date('Y-m-d').' 00:00:00')
  71. ->where('create_time','<=',date('Y-m-d').' 23:59:59')
  72. ->where('sn','like',date('Ymd').'%')
  73. ->max('sn');
  74. $maxinit = $max?$max:date('Ymd').'0000';
  75. // 添加是不再拆分
  76. $data['sn'] = $maxinit + 1;
  77. $ret = Db::name('asset_items')->insert($data);
  78. if(!$ret){
  79. \exception('操作失败');
  80. }
  81. /*$nums = $data['nums']; // 拆分程序
  82. $data['nums'] = 1;
  83. for ($i=1;$i<=$nums;$i++){
  84. $data['sn'] = $maxinit + $i;
  85. $ret = Db::name('asset_items')->insert($data);
  86. if(!$ret){
  87. \exception('操作失败');
  88. }
  89. }*/
  90. Db::commit();
  91. }catch (Exception $e){
  92. Db::rollback();
  93. HelpHander::error($e->getMessage());
  94. }
  95. }
  96. if($id > 0){
  97. $content = '修改资产';
  98. }else{
  99. $content = '添加资产';
  100. }
  101. model('ActionLog')->add(12,$content,0,$logdata);
  102. return true;
  103. }
  104. public function split($id){
  105. $info = $this->info($id);
  106. if($info['nums'] == 1){
  107. HelpHander::error('该资产不能再拆分');
  108. }
  109. $time = date('Y-m-d',strtotime($info['create_time']));
  110. $max = Db::name('asset_items')
  111. ->where('org_id',$info['org_id'])
  112. ->where('create_time','>=',$time.' 00:00:00')
  113. ->where('create_time','<=',$time.' 23:59:59')
  114. ->order('id desc')
  115. ->value('sn');
  116. $maxinit = $max?$max:date('Ymd').'0000';
  117. $nums = $info['nums'] - 1;
  118. Db::startTrans();
  119. try{
  120. $ret = Db::name('asset_items')->where('id',$info['id'])->update(['nums' => 1,'update_time' => date('Y-m-d H:i:s')]);
  121. if(!$ret){
  122. \exception('操作失败');
  123. }
  124. $data = $info;
  125. $data['nums'] = 1;
  126. unset($data['id']);
  127. for ($i=1;$i<=$nums;$i++){
  128. $data['sn'] = $maxinit + $i;
  129. $ret = Db::name('asset_items')->insert($data);
  130. if(!$ret){
  131. \exception('操作失败');
  132. }
  133. }
  134. Db::commit();
  135. return true;
  136. }catch (Exception $e){
  137. Db::rollback();
  138. HelpHander::error($e->getMessage());
  139. }
  140. }
  141. public function info($id){
  142. $info = $this->where('id',$id)->find();
  143. if(!$info){
  144. HelpHander::error('数据不存在');
  145. }
  146. return $info->toArray();
  147. }
  148. public function lists($orgId){
  149. $page = input('page/d',1);
  150. $size = input('size/d',10);
  151. $title = input('title','','trim');
  152. $cateId = input('cateId/d',0);
  153. $companyId = input('companyId/d',0);
  154. $addId = input('addId/d',0);
  155. $classId = input('classId/d',0);
  156. $enable = input('enable/d',-1);
  157. $spec = input('spec','','trim');
  158. $brand = input('brand','','trim');
  159. $remark = input('remark','','trim');
  160. $address = input('address','','trim');
  161. $dep = input('dep','','trim');
  162. $user = input('user','','trim');
  163. $startTime = input('startTime','','trim');
  164. $endTime = input('endTime','','trim');
  165. $financeSn = input('financeSn','','trim');
  166. $price = input('price','','trim');
  167. $maxPrice = input('maxPrice','','trim');
  168. $map[] = ['org_id','=',$orgId];
  169. $map[] = ['del','=',0];
  170. if($cateId > 0){
  171. $map[] = ['cate_id','=',$cateId];
  172. }
  173. if($dep){
  174. $map[] = ['dep_id','in',explode(',',$dep)];
  175. }
  176. if($user){
  177. $map[] = ['user_id','in',explode(',',$user)];
  178. }
  179. if($title){
  180. $map[] = ['sn|title','like','%'.$title.'%'];
  181. }
  182. if($spec){
  183. $map[] = ['spec','like','%'.$spec.'%'];
  184. }
  185. if($brand){
  186. $map[] = ['brand','like','%'.$brand.'%'];
  187. }
  188. if($remark){
  189. $map[] = ['remark','like','%'.$remark.'%'];
  190. }
  191. if($address){
  192. $map[] = ['address','like','%'.$address.'%'];
  193. }
  194. if($companyId > 0){
  195. $map[] = ['company_id','=',$companyId];
  196. }
  197. if($addId > 0){
  198. $map[] = ['add_id','=',$addId];
  199. }
  200. if($classId > 0){
  201. $map[] = ['class_id','=',$classId];
  202. }
  203. if($enable >= 0){
  204. $map[] = ['enable','=',$enable];
  205. }
  206. if($startTime && $endTime){
  207. $map[] = ['buy_time','>=',$startTime];
  208. $map[] = ['buy_time','<=',$endTime];
  209. }
  210. if($financeSn){
  211. $map[] = ['finance_sn','like','%'.$financeSn.'%'];
  212. }
  213. if($price != ''){
  214. $map[] = ['price','>=',$price];
  215. }
  216. if($maxPrice != ''){
  217. $map[] = ['price','<=',$maxPrice];
  218. }
  219. $lists = $this
  220. ->where($map)
  221. ->page($page,$size)
  222. ->order('id desc')
  223. ->select();
  224. $lists = $lists?$lists->toArray():[];
  225. foreach ($lists as $k=>$v){
  226. $lists[$k]['cate_name'] = Db::name('asset_cate')->where('id',$v['cate_id'])->value('title');
  227. $lists[$k]['unit_name'] = Db::name('asset_unit')->where('id',$v['unit_id'])->value('title');
  228. $lists[$k]['company_name'] = Db::name('company')->where('id',$v['company_id'])->value('title');
  229. $lists[$k]['class_name'] = Db::name('asset_class')->where('id',$v['class_id'])->value('title');
  230. $lists[$k]['add_name'] = Db::name('asset_add')->where('id',$v['add_id'])->value('title');
  231. $lists[$k]['user_name'] = '';
  232. $lists[$k]['dep_name'] = '';
  233. if($v['user_id'] > 0){
  234. $lists[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  235. }
  236. if($v['dep_id'] > 0){
  237. $lists[$k]['dep_name'] = Db::name('dep')->where('id',$v['dep_id'])->value('name');
  238. }
  239. }
  240. $total = $this->where($map)->count();
  241. $totalPrice = $this->where($map)->sum('price*nums');
  242. $data = [
  243. 'total' => $total,
  244. 'list' => $lists,
  245. 'totalPrice' => $totalPrice
  246. ];
  247. return $data;
  248. }
  249. public function exportLists($mb,$selectData,$orgId,$all){
  250. $map[] = ['org_id','=',$orgId];
  251. $map[] = ['del','=',0];
  252. if($all == 1){
  253. $title = input('title','','trim');
  254. $cateId = input('cateId/d',0);
  255. $companyId = input('companyId/d',0);
  256. $addId = input('addId/d',0);
  257. $classId = input('classId/d',0);
  258. $enable = input('enable/d',-1);
  259. $spec = input('spec','','trim');
  260. $brand = input('brand','','trim');
  261. $remark = input('remark','','trim');
  262. $address = input('address','','trim');
  263. $dep = input('dep','','trim');
  264. $user = input('user','','trim');
  265. $startTime = input('startTime','','trim');
  266. $endTime = input('endTime','','trim');
  267. $financeSn = input('financeSn','','trim');
  268. $price = input('price','','trim');
  269. $maxPrice = input('maxPrice','','trim');
  270. if($cateId > 0){
  271. $map[] = ['cate_id','=',$cateId];
  272. }
  273. if($dep){
  274. $map[] = ['dep_id','in',explode(',',$dep)];
  275. }
  276. if($user){
  277. $map[] = ['user_id','in',explode(',',$user)];
  278. }
  279. if($title){
  280. $map[] = ['sn|title','like','%'.$title.'%'];
  281. }
  282. if($spec){
  283. $map[] = ['spec','like','%'.$spec.'%'];
  284. }
  285. if($brand){
  286. $map[] = ['brand','like','%'.$brand.'%'];
  287. }
  288. if($remark){
  289. $map[] = ['remark','like','%'.$remark.'%'];
  290. }
  291. if($address){
  292. $map[] = ['address','like','%'.$address.'%'];
  293. }
  294. if($companyId > 0){
  295. $map[] = ['company_id','=',$companyId];
  296. }
  297. if($addId > 0){
  298. $map[] = ['add_id','=',$addId];
  299. }
  300. if($classId > 0){
  301. $map[] = ['class_id','=',$classId];
  302. }
  303. if($enable >= 0){
  304. $map[] = ['enable','=',$enable];
  305. }
  306. if($startTime && $endTime){
  307. $map[] = ['buy_time','>=',$startTime];
  308. $map[] = ['buy_time','<=',$endTime];
  309. }
  310. if($financeSn){
  311. $map[] = ['finance_sn','like','%'.$financeSn.'%'];
  312. }
  313. if($price != ''){
  314. $map[] = ['price','>=',$price];
  315. }
  316. if($maxPrice != ''){
  317. $map[] = ['price','<=',$maxPrice];
  318. }
  319. }else{
  320. $map[] = ['id','in',$selectData];
  321. }
  322. $lists = $this
  323. ->where($map)
  324. ->order('id desc')
  325. ->select();
  326. $lists = $lists?$lists->toArray():[];
  327. foreach ($lists as $k=>$v){
  328. $lists[$k]['cate_name'] = Db::name('asset_cate')->where('id',$v['cate_id'])->value('title');
  329. $lists[$k]['unit_name'] = Db::name('asset_unit')->where('id',$v['unit_id'])->value('title');
  330. $lists[$k]['company_name'] = Db::name('company')->where('id',$v['company_id'])->value('title');
  331. $lists[$k]['class_name'] = Db::name('asset_class')->where('id',$v['class_id'])->value('title');
  332. $lists[$k]['add_name'] = Db::name('asset_add')->where('id',$v['add_id'])->value('title');
  333. $lists[$k]['user_name'] = '';
  334. $lists[$k]['dep_name'] = '';
  335. if($v['user_id'] > 0){
  336. $lists[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  337. }
  338. if($v['dep_id'] > 0){
  339. $lists[$k]['dep_name'] = Db::name('dep')->where('id',$v['dep_id'])->value('name');
  340. }
  341. if($v['enable'] == 1){
  342. $lists[$k]['enableText'] = '在库';
  343. }else if($v['enable'] == 2){
  344. $lists[$k]['enableText'] = '使用';
  345. }else if($v['enable'] == 4){
  346. $lists[$k]['enableText'] = '维修';
  347. }else if($v['enable'] == 5){
  348. $lists[$k]['enableText'] = '处置';
  349. }else{
  350. $lists[$k]['enableText'] = '';
  351. }
  352. $lists[$k]['printText'] = $v['print'] == 1?"是":"否";
  353. }
  354. $columns = [];
  355. foreach ($mb as $k=>$v){
  356. if($v['select']){
  357. $title = $v['title2']?$v['title2']:$v['title'];
  358. $columns[] = [
  359. "title" => $title,
  360. "key" => $v['name']
  361. ];
  362. }
  363. }
  364. // $columns = [
  365. // ["title" => "编号","key" => "sn"],
  366. // ["title" => "名称","key" => "title"],
  367. // ["title" => "规格","key" => "spec"],
  368. // ["title" => "所属公司","key" => "companyName"],
  369. // ["title" => "数量","key" => "nums"],
  370. // ["title" => "单位","key" => "unitName"],
  371. // ["title" => "状态","key" => "enableText"],
  372. // ["title" => "使用部门","key" => "depName"],
  373. // ["title" => "使用人员","key" => "userName"],
  374. // ["title" => "类型","key" => "cateName"],
  375. // ["title" => "类别","key" => "className"],
  376. // ["title" => "增加方式","key" => "addName"],
  377. // ["title" => "品牌","key" => "brand"],
  378. // ["title" => "原值","key" => "price"],
  379. // ["title" => "存放地点","key" => "address"],
  380. // ["title" => "资产用途","key" => "used"],
  381. // ["title" => "购置日期","key" => "buyTime"],
  382. // ["title" => "是否打印标签","key"=>"printText"],
  383. // ["title" => "备注","key" => "remark"],
  384. // ];
  385. $data = [
  386. 'columns' => $columns,
  387. 'list' => $lists
  388. ];
  389. return $data;
  390. }
  391. // type 0=全部在库和使用 1=在库 2=使用
  392. // 去除掉正在审批中的物品
  393. public function selectlists($page,$size,$title,$cateId,$companyId,$addId,$classId,$userId,$orgId,$type=0){
  394. $map[] = ['a.org_id','=',$orgId];
  395. $map[] = ['a.del','=',0];
  396. $map[] = ['a.nums','=',1];
  397. $dep = input('dep','','trim');
  398. // $map[] = ['is_check','=',0]; // 不取盘库中的物品
  399. // $ids = $this->itemsuse($orgId);
  400. // if($ids){
  401. // $map[] = ['id','not in',$ids];
  402. // }
  403. if($dep){
  404. $map[] = ['a.dep_id','in',explode(',',$dep)];
  405. }
  406. if($cateId > 0){
  407. $map[] = ['a.cate_id','=',$cateId];
  408. }
  409. if($title){
  410. $map[] = ['a.sn|a.title|b.name','like','%'.$title.'%'];
  411. }
  412. if($companyId > 0){
  413. $map[] = ['a.company_id','=',$companyId];
  414. }
  415. if($addId > 0){
  416. $map[] = ['a.add_id','=',$addId];
  417. }
  418. if($classId > 0){
  419. $map[] = ['a.class_id','=',$classId];
  420. }
  421. if($type == 1){
  422. $map[] = ['a.enable','=',1];
  423. } else if($type == 2){
  424. $map[] = ['a.enable','=',2];
  425. // $map[] = ['user_id','=',$userId];
  426. }else{
  427. $map[] = ['a.enable','in','1,2'];
  428. }
  429. $lists = $this
  430. ->alias('a')
  431. ->join('user_info b','a.user_id = b.user_id','left')
  432. ->field('a.*,b.name as user_name')
  433. ->where($map)
  434. ->page($page,$size)
  435. ->order('a.id desc')
  436. ->select();
  437. $lists = $lists?$lists->toArray():[];
  438. foreach ($lists as $k=>$v){
  439. $lists[$k]['cate_name'] = Db::name('asset_cate')->where('id',$v['cate_id'])->value('title');
  440. $lists[$k]['unit_name'] = Db::name('asset_unit')->where('id',$v['unit_id'])->value('title');
  441. $lists[$k]['company_name'] = Db::name('company')->where('id',$v['company_id'])->value('title');
  442. $lists[$k]['class_name'] = Db::name('asset_class')->where('id',$v['class_id'])->value('title');
  443. $lists[$k]['add_name'] = Db::name('asset_add')->where('id',$v['add_id'])->value('title');
  444. $lists[$k]['user_name'] = $lists[$k]['user_name']? $lists[$k]['user_name']:'';
  445. $lists[$k]['dep_name'] = '';
  446. // if($v['user_id'] > 0){
  447. // $lists[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  448. // }
  449. if($v['dep_id'] > 0){
  450. $lists[$k]['dep_name'] = Db::name('dep')->where('id',$v['dep_id'])->value('name');
  451. }
  452. }
  453. $total = $this->where($map)
  454. ->alias('a')
  455. ->join('user_info b','a.user_id = b.user_id','left')
  456. ->count();
  457. $data = [
  458. 'total' => $total,
  459. 'list' => $lists
  460. ];
  461. return $data;
  462. }
  463. // 正在审核中的物品
  464. public function itemsuse($orgId){
  465. $map[] = ['b.status','=',0];
  466. $map[] = ['b.org_id','=',$orgId];
  467. $ids1 = Db::name('asset_receive_items')
  468. ->alias('a')
  469. ->join('asset_receive b','a.receive_id = b.id')
  470. ->where($map)
  471. ->column('a.items_id');
  472. $ids1 = $ids1?$ids1:[];
  473. $ids2 = Db::name('asset_withdraw_items')
  474. ->alias('a')
  475. ->join('asset_withdraw b','a.withdraw_id = b.id')
  476. ->where($map)
  477. ->column('a.items_id');
  478. $ids2 = $ids2?$ids2:[];
  479. $ids3 = Db::name('asset_repair_items')
  480. ->alias('a')
  481. ->join('asset_repair b','a.repair_id = b.id')
  482. ->where($map)
  483. ->column('a.items_id');
  484. $ids3 = $ids3?$ids3:[];
  485. $ids4 = Db::name('asset_disposal_items')
  486. ->alias('a')
  487. ->join('asset_disposal b','a.disposal_id = b.id')
  488. ->where($map)
  489. ->column('a.items_id');
  490. $ids4 = $ids4?$ids4:[];
  491. return array_unique(array_merge($ids1,$ids2,$ids3,$ids4));
  492. }
  493. public function del($id){
  494. // 检查是否已被使用
  495. $info = Db::name('office_receive_items')
  496. ->where('items_id',$id)
  497. ->find();
  498. if($info){
  499. HelpHander::error('已被使用,无法删除');
  500. }
  501. $ret = $this->where('id',$id)->setField('del',1);
  502. if(!$ret){
  503. HelpHander::error('删除失败');
  504. }
  505. $logdata = json_encode(['id' => $id]);
  506. model('ActionLog')->add(12,'删除资产',0,$logdata);
  507. return true;
  508. }
  509. // 获取资产数量
  510. public function getCountByCompany($companyId){
  511. $map[] = ['del','=',0];
  512. $map[] = ['enable','>',0];
  513. $map[] = ['company_id','=',$companyId];
  514. $count = Db::name('asset_items')
  515. ->where($map)
  516. ->sum('nums');
  517. return $count;
  518. }
  519. public function getMoneyByCompany($companyId){
  520. $map[] = ['del','=',0];
  521. $map[] = ['enable','>',0];
  522. $map[] = ['company_id','=',$companyId];
  523. $count = Db::name('asset_items')
  524. ->where($map)
  525. ->sum('price*nums');
  526. return $count;
  527. }
  528. // 我领取的资产
  529. public function myLists($page,$size,$title,$userId,$orgId){
  530. $map[] = ['org_id','=',$orgId];
  531. $map[] = ['del','=',0];
  532. if($title){
  533. $map[] = ['sn|title','like','%'.$title.'%'];
  534. }
  535. if($userId > 0){
  536. $map[] = ['user_id','=',$userId];
  537. }
  538. $lists = $this
  539. ->where($map)
  540. ->page($page,$size)
  541. ->order('id desc')
  542. ->select();
  543. $lists = $lists?$lists->toArray():[];
  544. foreach ($lists as $k=>$v){
  545. $lists[$k]['cate_name'] = Db::name('asset_cate')->where('id',$v['cate_id'])->value('title');
  546. $lists[$k]['unit_name'] = Db::name('asset_unit')->where('id',$v['unit_id'])->value('title');
  547. $lists[$k]['company_name'] = Db::name('company')->where('id',$v['company_id'])->value('title');
  548. $lists[$k]['class_name'] = Db::name('asset_class')->where('id',$v['class_id'])->value('title');
  549. $lists[$k]['add_name'] = Db::name('asset_add')->where('id',$v['add_id'])->value('title');
  550. $lists[$k]['user_name'] = '';
  551. $lists[$k]['dep_name'] = '';
  552. if($v['user_id'] > 0){
  553. $lists[$k]['user_name'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name');
  554. }
  555. if($v['dep_id'] > 0){
  556. $lists[$k]['dep_name'] = Db::name('dep')->where('id',$v['dep_id'])->value('name');
  557. }
  558. }
  559. $total = $this->where($map)->count();
  560. $totalPrice = $this->where($map)->sum('price');
  561. $data = [
  562. 'total' => $total,
  563. 'list' => $lists,
  564. 'totalPrice' => $totalPrice
  565. ];
  566. return $data;
  567. }
  568. }