OrderNoService.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace App\Service;
  3. use App\Model\Construction;
  4. use App\Model\OrderNoCount;
  5. use App\Model\SalesOrder;
  6. class OrderNoService extends Service
  7. {
  8. //采购 收货 发货 单号生成
  9. public function createOrderNumber($prefix){
  10. return $prefix . date('YmdHis',time()) . rand(1000,9999);
  11. }
  12. //合同编号
  13. public static function createSalesOrderNumber($prefix){
  14. return $prefix . date('YmdHis',time()). rand(1000,9999);
  15. }
  16. public static function createSalesOrderNumberImport($prefix) {
  17. // 获取当前时间的微秒级时间戳
  18. list($micro, $seconds) = explode(' ', microtime());
  19. // 从微秒部分截取全部6位作为唯一标识符
  20. $microSuffix = substr($micro, 2, 6);
  21. return $prefix . date('YmdHis', $seconds) . $microSuffix;
  22. }
  23. //施工单订单合同号
  24. public static function createConstructionOrderNumber($prefix){
  25. return $prefix . date('YmdHis',time()). rand(1000,9999);
  26. }
  27. //退换货 单号生成
  28. public function createReturnExchangeOrderNumber($prefix){
  29. return $prefix . date('YmdHis',time()) . rand(1000,9999);
  30. }
  31. //暂时不用--------------------------------------------------------------------------
  32. //合同编号
  33. public static function createSalesOrderNumber1($prefix){
  34. $str = $prefix . date('Ymd',time());
  35. $order_number = SalesOrder::where('order_number','Like','%'. $str . '%')
  36. ->max('order_number');
  37. if(empty($order_number)){
  38. $number = str_pad(1,3,'0',STR_PAD_LEFT);
  39. $number = $str . $number;
  40. }else{
  41. $tmp = substr($order_number, -3);
  42. $tmp = $tmp + 1;
  43. //超过999
  44. if(strlen($tmp) > 3) return '';
  45. $number = str_pad($tmp,3,'0',STR_PAD_LEFT);
  46. $number = $str . $number;
  47. }
  48. return $number;
  49. }
  50. //施工单订单合同号
  51. public static function createConstructionOrderNumber1($prefix){
  52. $str = $prefix . date('Ymd',time());
  53. $order_number = Construction::where('order_number','Like','%'. $str . '%')
  54. ->max('order_number');
  55. if(empty($order_number)){
  56. $number = str_pad(1,3,'0',STR_PAD_LEFT);
  57. $number = $str . $number;
  58. }else{
  59. $tmp = substr($order_number, -3);
  60. $tmp = $tmp + 1;
  61. //超过999
  62. if(strlen($tmp) > 3) return '';
  63. $number = str_pad($tmp,3,'0',STR_PAD_LEFT);
  64. $number = $str . $number;
  65. }
  66. return $number;
  67. }
  68. static function generateOrderNumber() {
  69. // 获取当前日期
  70. $date = date('Ymd', time());
  71. // 从数据库中获取已存在的最大单据号
  72. $maxOrderNumber = SalesOrder::max('order_number');
  73. // 定义单据号位数
  74. $digitCount = 6;
  75. // 如果数据库中没有单据号,则从000001开始
  76. if(empty($maxOrderNumber)){
  77. $number = $date . str_pad(1, $digitCount, '0', STR_PAD_LEFT);
  78. }else{
  79. // 获取数字部分
  80. $lastNumber = substr($maxOrderNumber, -1 * $digitCount);
  81. $lastNumber = (int)$lastNumber;
  82. // 数字自增
  83. $number = $lastNumber + 1;
  84. $number = str_pad($number, $digitCount, '0', STR_PAD_LEFT);
  85. // 拼接单据号
  86. $number = $date . $number;
  87. }
  88. return $number;
  89. }
  90. }