AutoNumberTrait.php 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * 自动编号(合同、回款、回访、发票)
  4. *
  5. * @author qifan
  6. * @date 2020-12-09
  7. */
  8. namespace app\crm\traits;
  9. use app\crm\model\NumberSequence;
  10. use think\Db;
  11. trait AutoNumberTrait
  12. {
  13. private $stringToDate = ['yyyyMMdd' => 'Ymd', 'yyyy' => 'Y', 'yyyyMM' => 'Ym'];
  14. /**
  15. * 获取自动编号
  16. *
  17. * @param $type 1合同;2回款;3回访;4发票
  18. * @return array
  19. * @throws \think\db\exception\DataNotFoundException
  20. * @throws \think\db\exception\ModelNotFoundException
  21. * @throws \think\exception\DbException
  22. */
  23. public function getAutoNumbers($type)
  24. {
  25. $number = '';
  26. $data = [];
  27. # 根据设置重置编号(不想改下面的代码,在这里在写一个,多公海版本出来后,用定时来做)
  28. $list = Db::name('crm_number_sequence')->where('number_type', $type)->where('status', 0)->select();
  29. foreach ($list AS $key => $value) {
  30. if ($value['type'] == 3 && $value['reset'] != 0) {
  31. # 1:每天;2:每月;3:每年;
  32. $currentDate = [
  33. 1 => date('Y-m-d'),
  34. 2 => date('Y-m'),
  35. 3 => date('Y')
  36. ];
  37. $lastDate = [
  38. 1 => date('Y-m-d', $value['last_date']),
  39. 2 => date('Y-m', $value['last_date']),
  40. 3 => date('Y', $value['last_date'])
  41. ];
  42. if ($currentDate[$value['reset']] != $lastDate[$value['reset']]) {
  43. Db::name('crm_number_sequence')->where('number_sequence_id', $value['number_sequence_id'])->update([
  44. 'last_number' => !empty($value['value']) ? $value['value'] : 1
  45. ]);
  46. }
  47. }
  48. }
  49. $info = Db::name('crm_number_sequence')->where('number_type', $type)->order('sort', 'asc')->where('status', 0)->select();
  50. foreach ($info AS $key => $value) {
  51. # 文本
  52. if ($value['type'] == 1) {
  53. $number .= $value['value'] . '-';
  54. }
  55. # 日期
  56. if ($value['type'] == 2) {
  57. $number .= date($this->stringToDate[$value['value']]) . '-';
  58. }
  59. # 数字
  60. if ($value['type'] == 3) {
  61. $number .= $value['last_number'] . '-';
  62. # 需要更新的数据
  63. $data[] = [
  64. 'number_sequence_id' => $value['number_sequence_id'],
  65. 'last_number' => $value['last_number'] + $value['increase_number'],
  66. 'last_date' => time()
  67. ];
  68. }
  69. }
  70. return ['number' => rtrim($number, '-'), 'data' => $data];
  71. }
  72. }