DeviceRepair.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace app\admin\model\store;
  3. use crmeb\basic\BaseModel;
  4. use think\facade\Db;
  5. /**
  6. * 设备报修申请表模型
  7. * 处理单号生成、表单新增、状态更新、列表查询
  8. */
  9. class DeviceRepair extends BaseModel
  10. {
  11. // 关联数据表名
  12. protected $name = 'device_repair';
  13. // 主键字段
  14. protected $pk = 'id';
  15. /**
  16. * 自动生成报修单号(规则:REPAIR+日期+6位随机数,确保唯一)
  17. * @return string 唯一报修单号
  18. */
  19. public static function generateRepairSn()
  20. {
  21. $date = date('Ymd'); // 日期:20251021
  22. $rand = mt_rand(100000, 999999); // 6位随机数
  23. $sn = "REPAIR{$date}{$rand}";
  24. // 校验单号唯一性(极端情况重名时重新生成)
  25. $exists = self::where('repair_sn', $sn)->find();
  26. if ($exists) {
  27. return self::generateRepairSn();
  28. }
  29. return $sn;
  30. }
  31. /**
  32. * 提交新的报修表单
  33. * @param array $data 表单数据(device_name/device_number等)
  34. */
  35. public static function addRepairForm($data)
  36. {
  37. // 补充默认数据
  38. $submitData = [
  39. 'repair_sn' => \app\models\store\DeviceRepair::getNewOrderId(), // 自动填单号
  40. 'device_name' => $data['device_name'],
  41. 'device_number' => $data['device_number'],
  42. 'repair_problem' => $data['repair_problem'],
  43. 'return_address' => $data['return_address'],
  44. 'contact_name' => $data['contact_name'],
  45. 'contact_phone' => $data['contact_phone'],
  46. 'create_time' => strval(time()), // 提交时间
  47. 'status' => 0 // 初始状态:未处理
  48. ];
  49. var_dump($submitData);
  50. // 新增数据
  51. return self::create($submitData);
  52. }
  53. /**
  54. * 生成充值订单号
  55. * @param int $uid
  56. * @return bool|string
  57. */
  58. // public static function getNewOrderId($uid = 0)
  59. // {
  60. // if (!$uid) return false;
  61. // $count = (int)self::where('uid', $uid)->where('add_time', '>=', strtotime(date("Y-m-d")))->where('add_time', '<', strtotime(date("Y-m-d", strtotime('+1 day'))))->count();
  62. // return 'bx' . date('YmdHis', time()) . (10000 + $count + $uid);
  63. // }
  64. // public static function getNewOrderId()
  65. // {
  66. // do {
  67. // list($msec, $sec) = explode(' ', microtime());
  68. // $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
  69. // $orderId = 'bx' . $msectime . mt_rand(10000, 99999);
  70. // } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
  71. // return $orderId;
  72. // }
  73. /**
  74. * 后台获取报修列表(带分页、状态筛选)
  75. * @param int $page 页码
  76. * @param int $limit 每页条数
  77. * @param int $status 处理状态(-1=全部,0=未处理,1=已处理)
  78. * @return \think\Paginator 分页列表
  79. */
  80. public static function getAdminRepairList($page = 1, $limit = 10, $status = -1)
  81. {
  82. $query = self::order('create_time DESC'); // 按提交时间倒序
  83. // 状态筛选(-1表示不筛选)
  84. if ($status != -1) {
  85. $query->where('status', $status);
  86. }
  87. // 分页查询
  88. return $query->paginate([
  89. 'page' => $page,
  90. 'list_rows' => $limit,
  91. 'query' => request()->param() // 保留分页链接参数
  92. ]);
  93. }
  94. /**
  95. * 标记报修单为“已处理”
  96. * @param int $id 报修单ID
  97. * @param int $adminId 处理人ID
  98. * @return bool 成功返回true,失败返回false
  99. */
  100. public static function markAsHandled($id, $adminId)
  101. {
  102. return self::where('id', $id)->update([
  103. 'status' => 1,
  104. 'handle_admin_id' => $adminId,
  105. 'handle_time' => time()
  106. ]) > 0;
  107. }
  108. /**
  109. * 根据ID获取单个报修单详情(用于下载)
  110. * @param int $id 报修单ID
  111. * @return array|null 详情数据
  112. */
  113. public static function getRepairDetailForDownload($id)
  114. {
  115. $detail = self::find($id);
  116. if (!$detail) {
  117. return null;
  118. }
  119. // 格式化时间(时间戳转字符串)
  120. $detail = $detail->toArray();
  121. $detail['create_time_text'] = date('Y-m-d H:i:s', $detail['create_time']);
  122. $detail['handle_time_text'] = $detail['handle_time'] ? date('Y-m-d H:i:s', $detail['handle_time']) : '未处理';
  123. $detail['status_text'] = $detail['status'] ? '已处理' : '未处理';
  124. return $detail;
  125. }
  126. }