OrderNoService.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. function generateOrderNumberNew($prefix, $user) {
  9. $data['depart_id'] = $this->getDepart($user);
  10. $top_depart_id = $user['depart_map'][$data['depart_id']] ?? 0;
  11. // 使用 strtotime 将日期字符串转换为时间戳,并设置为当天零时
  12. $timestampZero = strtotime(date('Y-m-d') . ' 00:00:00');
  13. $order_no_count = OrderNoCount::where('prefix',$prefix)
  14. ->where('top_depart_id',$top_depart_id)
  15. ->where('time', $timestampZero)
  16. ->first();
  17. if(empty($order_no_count)) {
  18. $counter = 1;
  19. }else{
  20. $counter = $order_no_count->count + 1;
  21. }
  22. // 格式化计数器为至少三位数
  23. $number = str_pad($counter, ($counter >= 1000 ? 4 : 3), '0', STR_PAD_LEFT);
  24. // 生成订单单号
  25. $orderNumber = $prefix . date('Ymd') . $number;
  26. return $orderNumber;
  27. }
  28. //采购 收货 发货 单号生成
  29. public function createOrderNumber($prefix){
  30. return $prefix . date('YmdHis',time()) . rand(1000,9999);
  31. }
  32. //合同编号
  33. public static function createSalesOrderNumber($prefix){
  34. return $prefix . date('YmdHis',time()). rand(1000,9999);
  35. }
  36. public static function createSalesOrderNumberImport($prefix) {
  37. // 获取当前时间的微秒级时间戳
  38. list($micro, $seconds) = explode(' ', microtime());
  39. // 从微秒部分截取全部6位作为唯一标识符
  40. $microSuffix = substr($micro, 2, 6);
  41. return $prefix . date('YmdHis', $seconds) . $microSuffix;
  42. }
  43. //施工单订单合同号
  44. public static function createConstructionOrderNumber($prefix){
  45. return $prefix . date('YmdHis',time()). rand(1000,9999);
  46. }
  47. //退换货 单号生成
  48. public function createReturnExchangeOrderNumber($prefix){
  49. return $prefix . date('YmdHis',time()) . rand(1000,9999);
  50. }
  51. //暂时不用--------------------------------------------------------------------------
  52. //合同编号
  53. public static function createSalesOrderNumber1($prefix){
  54. $str = $prefix . date('Ymd',time());
  55. $order_number = SalesOrder::where('order_number','Like','%'. $str . '%')
  56. ->max('order_number');
  57. if(empty($order_number)){
  58. $number = str_pad(1,3,'0',STR_PAD_LEFT);
  59. $number = $str . $number;
  60. }else{
  61. $tmp = substr($order_number, -3);
  62. $tmp = $tmp + 1;
  63. //超过999
  64. if(strlen($tmp) > 3) return '';
  65. $number = str_pad($tmp,3,'0',STR_PAD_LEFT);
  66. $number = $str . $number;
  67. }
  68. return $number;
  69. }
  70. //施工单订单合同号
  71. public static function createConstructionOrderNumber1($prefix){
  72. $str = $prefix . date('Ymd',time());
  73. $order_number = Construction::where('order_number','Like','%'. $str . '%')
  74. ->max('order_number');
  75. if(empty($order_number)){
  76. $number = str_pad(1,3,'0',STR_PAD_LEFT);
  77. $number = $str . $number;
  78. }else{
  79. $tmp = substr($order_number, -3);
  80. $tmp = $tmp + 1;
  81. //超过999
  82. if(strlen($tmp) > 3) return '';
  83. $number = str_pad($tmp,3,'0',STR_PAD_LEFT);
  84. $number = $str . $number;
  85. }
  86. return $number;
  87. }
  88. static function generateOrderNumber() {
  89. // 获取当前日期
  90. $date = date('Ymd', time());
  91. // 从数据库中获取已存在的最大单据号
  92. $maxOrderNumber = SalesOrder::max('order_number');
  93. // 定义单据号位数
  94. $digitCount = 6;
  95. // 如果数据库中没有单据号,则从000001开始
  96. if(empty($maxOrderNumber)){
  97. $number = $date . str_pad(1, $digitCount, '0', STR_PAD_LEFT);
  98. }else{
  99. // 获取数字部分
  100. $lastNumber = substr($maxOrderNumber, -1 * $digitCount);
  101. $lastNumber = (int)$lastNumber;
  102. // 数字自增
  103. $number = $lastNumber + 1;
  104. $number = str_pad($number, $digitCount, '0', STR_PAD_LEFT);
  105. // 拼接单据号
  106. $number = $date . $number;
  107. }
  108. return $number;
  109. }
  110. }