Stock.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace app\Admin\controller;
  3. use think\Db;
  4. class Stock extends Base
  5. {
  6. public function __construct()
  7. {
  8. parent::__construct();
  9. }
  10. /**
  11. * @param status
  12. * @param username
  13. * @param nickname
  14. * @param mobile
  15. * @param stock_low
  16. * @param stock_up
  17. */
  18. public function StockList(){
  19. $page = isset($this->post['page'])&&$this->post['page']!="" ? intval($this->post['page']) : 1;
  20. $size = isset($this->post['size'])&&$this->post['size']!="" ? intval($this->post['size']) :10;
  21. $status = isset($this->post['status'])&&$this->post['status']!=="" ? intval($this->post['status']) :"";
  22. $where=[];
  23. if($status!==""){
  24. $where['status'] = $status;
  25. }
  26. $username = isset($this->post['username'])&&$this->post['username']!=="" ? trim($this->post['username']) :"";
  27. if($username!=""){
  28. $where['username'] = ["like"=>"%{$username}%"];
  29. }
  30. $nickname = isset($this->post['nickname'])&&$this->post['nickname']!=="" ? trim($this->post['nickname']) :"";
  31. if($nickname!=""){
  32. $where['nickname'] = ["like"=>"%{$nickname}%"];
  33. }
  34. $mobile = isset($this->post['mobile'])&&$this->post['mobile']!=="" ? trim($this->post['mobile']) :"";
  35. if($mobile!=""){
  36. $where['mobile'] = ["like"=>"%{$mobile}%"];
  37. }
  38. $stock_low = isset($this->post['stock_low'])&&$this->post['stock_low']!=="" ? intval($this->post['stock_low'])
  39. :"";
  40. if($stock_low!=""){
  41. $where['stock_balance'] = [">=",$stock_low];
  42. }
  43. $stock_up = isset($this->post['stock_up'])&&$this->post['stock_up']!=="" ? intval($this->post['stock_up']) :"";
  44. if($stock_up!=""){
  45. $where['stock_balance'] = ["<=",$stock_up];
  46. }
  47. $count= Db::name("stock_list")->where($where)->count();
  48. $total = ceil($count/$size);
  49. $page = $page>=$total? $total:$page;
  50. $list = Db::name("stock_list")->where($where)->page($page,$size)->field("id,username,status,nickname,mobile,stock_balance,stock_update")->order("stock_update desc")->select();
  51. return app_show(0,"获取成功",["list"=>$list,"count"=>$count]);
  52. }
  53. /**
  54. * @param id
  55. * @param stock
  56. * @param type
  57. */
  58. public function Save(){
  59. $id = isset($this->post['id'])&&$this->post['id']!=""? intval($this->post["id"]) :"";
  60. if($id==""){
  61. return error_show(1004,"参数id 不能为空");
  62. }
  63. $account = Db::name("account")->where(["is_del"=>0,"id"=>$id])->find();
  64. if(empty($account)){
  65. return error_show(1005,"账户信息不存在");
  66. }
  67. $stock = isset($this->post['stock'])&&$this->post['stock']!==""? $this->post["stock"] :"";
  68. if($stock==""){
  69. return error_show(1005,"参数stock 不能为空或0");
  70. }
  71. $type = isset($this->post['type'])&&$this->post['type']!=""?intval($this->post['type']) :"";
  72. if($type===""){
  73. return error_show(1005,"参数type 不能为空");
  74. }
  75. if(!in_array($type,[1,2])){
  76. return error_show(1005,"参数type 值无效");
  77. }
  78. $stockinfo = Db::name("account_stock")->where(["accountid"=>$id,"is_del"=>0])->find();
  79. Db::startTrans();
  80. try {
  81. $msg = $type==1?"增加库存":"减少库存";
  82. $log=[
  83. "accountid"=>$id,
  84. "run_stock"=>$stock,
  85. "type"=>$type,
  86. "after_stock"=>isset($stockinfo['stock_balance']) ? $stockinfo['stock_balance']+$stock:$stock,
  87. "before_stock"=>isset($stockinfo['stock_balance']) ? $stockinfo['stock_balance']:0,
  88. "action_uid"=>$this->userinfo['id'],
  89. "action_name"=>$this->userinfo['nickname'],
  90. "addtime"=>date("Y-m-d H:i:s")
  91. ];
  92. $stocklog= Db::name("stock_log")->insert($log);
  93. if($stocklog){
  94. if($stockinfo){
  95. if($type==1){
  96. $stockinfo['stock_total']+=$stock;
  97. $stockinfo['stock_balance']+=$stock;
  98. }else{
  99. if($stockinfo['stock_balance']<$stock){
  100. Db::rollback();
  101. return error_show(1005,"剩余库存不足");
  102. }
  103. $stockinfo['stock_total']-=$stock;
  104. $stockinfo['stock_balance']-=$stock;
  105. }
  106. $stockinfo['updatetime']=date("Y-m-d H:i:s");
  107. $accstock = Db::name("account_stock")->update($stockinfo);
  108. }else{
  109. if($type==1){
  110. $data = [
  111. "accountid"=>$id,
  112. "stock_total"=>$stock,
  113. "stock_balance"=>$stock,
  114. "stock_used"=>0,
  115. "stock_delivery"=>0,
  116. "status"=>1,
  117. "is_del"=>0,
  118. "updatetime"=>date("Y-m-d H:i:s"),
  119. "addtime"=>date("Y-m-d H:i:s")
  120. ];
  121. $accstock = Db::name("account_stock")->insert($data);
  122. }else{
  123. Db::rollback();
  124. return error_show(1005,"账户剩余库存不足");
  125. }
  126. }
  127. if($accstock){
  128. write_log("账户{$account['username']}{$msg}:{$stock}",$this->userinfo,"stock","edit","0");
  129. Db::commit();
  130. return app_show(0,"{$msg}成功");
  131. }
  132. }
  133. Db::rollback();
  134. return error_show(1005,"{$msg}失败");
  135. }catch (\Exception $e){
  136. Db::rollback();
  137. return error_show(1004,$e->getMessage());
  138. }
  139. }
  140. /**
  141. * @param id
  142. * @param page
  143. * @param size
  144. */
  145. public function StockLog(){
  146. $id = isset($this->post['id'])&&$this->post['id']!=""? intval($this->post["id"]) :"";
  147. if($id==""){
  148. return error_show(1004,"参数id 不能为空");
  149. }
  150. $account = Db::name("account_list")->where(["is_del"=>0,"id"=>$id])->find();
  151. if(empty($account)){
  152. return error_show(1005,"账户信息不存在");
  153. }
  154. $page = isset($this->post['page'])&&$this->post['page']!="" ? intval($this->post['page']) : 1;
  155. $size = isset($this->post['size'])&&$this->post['size']!="" ? intval($this->post['size']) :10;
  156. $count = Db::name("stock_log")->where(["accountid"=>$id])->count();
  157. $total = ceil($count/$size);
  158. $page = $page>=$total? $total:$page;
  159. $list = Db::name("stock_log")->where(["accountid"=>$id])->page($page,$size)->order("addtime desc")->select();
  160. foreach ($list as $key=>$value){
  161. $list[$key]['username']=$account['username'];
  162. $list[$key]['nickname']=$account['nickname'];
  163. }
  164. return app_show(0,"获取成功",['list'=>$list,"count"=>$count]);
  165. }
  166. }