OrderOutChild.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\model;
  4. use app\admin\common\YouZan;use think\Model;
  5. /**
  6. * @mixin \think\Model
  7. */
  8. class OrderOutChild extends Model
  9. { /**
  10. * @param array $sale 销售单信息
  11. * @param string $outCode 发货单信息
  12. * @param int $num 发货单数量
  13. * @throws \Exception
  14. */
  15. static function makeChild(string $outCode=''){
  16. if($outCode=='')throw new \Exception("分单发货单单号不能为空");
  17. $out=self::name("order_out")->where(["outCode"=>$outCode,"is_del"=>0])->findOrEmpty();
  18. if(empty($out)) throw new \Exception("发货单信息未找到");
  19. if($out['send_status']!=0) throw new \Exception("发货单拆单状态有误");
  20. $sale = self::name("sale")->where(["orderCode"=>$out['orderCode'],"is_del"=>0])->findOrEmpty();
  21. if(empty($sale)) throw new \Exception("订单信息未找到");
  22. if($sale['wsend_num']<$out['send_num']) throw new \Exception("订单待发货数量不足");
  23. $num= $out['send_num'];
  24. $wsmlist = self::name("good_stock")->alias("a")
  25. ->leftJoin("warehouse_info b","a.wsm_code=b.wsm_code")
  26. ->field("a.id,a.usable_stock,a.wait_out_stock,b.wsm_code,b.supplierNo,b.supplierName")
  27. ->where(["spuCode"=>$sale['good_code'],"a.is_del"=>0])->findOrEmpty();
  28. if($wsmlist['usable_stock']<$num) return false;
  29. $outinfo = self::name("order_out")->where(["outCode"=>$outCode,"is_del"=>0])->findOrEmpty();
  30. if(empty($outinfo))throw new \Exception("发货单信息未找到");
  31. $child=[
  32. "outChildCode"=>makeNo("TCD"),
  33. "outCode"=>$outCode,
  34. "orderCode"=>$sale['orderCode'],
  35. "companyNo"=>$sale['companyNo'],
  36. "companyName"=>$sale['companyName'],
  37. "supplierNo"=>$sale['supplierNo'],
  38. "supplierName"=>$sale['supplierName'],
  39. "cutomer_code"=>$sale['cutomer_code'],
  40. "spuCode"=>$sale['good_code'],
  41. "skuCode"=>$sale['skuCode'],
  42. "good_name"=>$sale['good_name'],
  43. "order_type"=>$sale['order_type'],
  44. "order_source"=>$sale['order_source'],
  45. "total_num"=>$num,
  46. "num"=>$num,
  47. "wsm_code"=>$wsmlist['wsm_code'],
  48. "apply_id"=>$outinfo['apply_id'],
  49. "apply_name"=>$outinfo['apply_name'],
  50. "addrid"=>$outinfo['addrid'],
  51. "addtime"=>date("Y-m-d H:i:s"),
  52. "updatetime"=>date("Y-m-d H:i:s")
  53. ];
  54. $childout=self::insert($child);
  55. if($childout==false)throw new \Exception("分单失败");
  56. $outup=self::name("order_out")->where(["outCode"=>$outCode,"is_del"=>0])->update(["send_status"=>1,"status"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
  57. if($outup==false)throw new \Exception("发货单信息更新失败");
  58. $bnadd = GoodStockInfo::ChildAddBn($child['outChildCode'],$wsmlist['id']);
  59. if($bnadd==false)throw new \Exception("库存更新失败");
  60. return true;
  61. }
  62. }