GoodStockInfo.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\model;
  4. use think\Exception;
  5. use think\Model;
  6. /**
  7. * @mixin \think\Model
  8. */
  9. class GoodStockInfo extends Model
  10. {
  11. /**
  12. * @param int $stockid 仓库库存id
  13. * @param string $bn bn编号
  14. * @param int $num bn数量
  15. * @param float $origin_price 采购成本价
  16. * @return bool 入库bn库存数新建 或退回bn库存数
  17. */
  18. public function AddBn(int $stockid,string $bn,int $num,float $origin_price=0){
  19. $data=$this->where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty();
  20. if(empty($data)){
  21. $data=[
  22. "stockid"=>$stockid,
  23. "bnCode"=>$bn,
  24. "total_num"=>$num,
  25. "used_num"=>0,
  26. "balance_num"=>$num,
  27. "origin_price"=>$origin_price,
  28. "addtime"=>date("Y-m-d H:i:s"),
  29. "updatetime"=>date("Y-m-d H:i:s")
  30. ];
  31. }else{
  32. $total_num = $data["balance_num"]+$num;
  33. if($total_num> $data["total_num"]) throw new Exception("批次入库数量超过总数",1006);
  34. $data["balance_num"]=$num;
  35. $data["updatetime"]=date("Y-m-d H:i:s");
  36. }
  37. return $this->save($data);
  38. }
  39. /**
  40. * @param int $stockid
  41. * @param int $num
  42. * @return array 库存品下单消耗bn库存数
  43. * @throws \think\Exception
  44. * @throws \think\db\exception\DataNotFoundException
  45. * @throws \think\db\exception\DbException
  46. * @throws \think\db\exception\ModelNotFoundException
  47. */
  48. public function SaleBn(int $stockid,int $num){
  49. $arr = $this->where([["stockid","=",$stockid],["balance_num",">",0]])->select()->toArray();
  50. if(empty($arr)) throw new Exception("库存批次数量不足","1006");
  51. $list=[];
  52. foreach ($arr as $item) {
  53. if($num<=0) break;
  54. $temp=[];
  55. if($item['balance_num']<=$num){
  56. $item['balance_num'] =0;
  57. $item['used_num'] +=$item['balance_num'];
  58. $num-=$item['balance_num'];
  59. $item['updatetime'] =date("Y-m-d H:i:s");
  60. $temp=["bnCode"=>$item['bnCode'],"num"=>$item['balance_num']];
  61. }else{
  62. $item['balance_num']-=$num;
  63. $item['used_num'] +=$num;
  64. $num=0;
  65. $item['updatetime'] =date("Y-m-d H:i:s");
  66. $temp=["bnCode"=>$item['bnCode'],"num"=>$num];
  67. }
  68. $this->save($item);
  69. $list[]=$temp;
  70. }
  71. return $list;
  72. }
  73. /**
  74. * @param int $stockid
  75. * @param string $bn
  76. * @param int $num
  77. * @return bool 盘点修改bn仓库库存数
  78. * @throws \think\Exception
  79. */
  80. public function CheckBn(int $stockid,string $bn,int $num){
  81. $data=$this->where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty();
  82. if(empty($data)) throw new Exception("未找到Bn库存数据",1006);
  83. $data["balance_num"]=$num;
  84. $data["total_num"]=$data["used_num"]+$num;
  85. $data["updatetime"]=date("Y-m-d H:i:s");
  86. return $this->save($data);
  87. }
  88. /**
  89. * @param string $orderCode
  90. * @param int $stockid
  91. * @param int $num
  92. * @return int
  93. * @throws \think\Exception
  94. * @throws \think\db\exception\DataNotFoundException
  95. * @throws \think\db\exception\DbException
  96. * @throws \think\db\exception\ModelNotFoundException
  97. */
  98. public function OrderBn(string $orderCode,int $stockid,int $num){
  99. $bnArr=$this->SaleBn($stockid,$num);
  100. if(empty($bnArr)) throw new Exception("未找到Bn库存数据",1006);
  101. $ordBn=[];
  102. foreach ($bnArr as $value){
  103. $saleBn=[
  104. "orderCode"=>$orderCode,
  105. "bnCode"=>$value['bnCode'],
  106. "stockid"=>$stockid,
  107. "num"=>$value['num'],
  108. "addtime"=>date("Y-m-d H:i:s"),
  109. "updatetime"=>date("Y-m-d H:i:s"),
  110. ];
  111. $ordBn[]=$saleBn;
  112. }
  113. return $this->name("sale_info")->insertAll($ordBn);
  114. }
  115. }