DeviceRepair.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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' => time(), // 提交时间
  47. 'status' => 0, // 初始状态:未处理
  48. 'order_id' =>$data['order_id'],
  49. 'product_id' => $data['product_id']
  50. ];
  51. // 新增数据
  52. return self::create($submitData);
  53. }
  54. /**
  55. * 生成充值订单号
  56. * @param int $uid
  57. * @return bool|string
  58. */
  59. // public static function getNewOrderId($uid = 0)
  60. // {
  61. // if (!$uid) return false;
  62. // $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();
  63. // return 'bx' . date('YmdHis', time()) . (10000 + $count + $uid);
  64. // }
  65. // public static function getNewOrderId()
  66. // {
  67. // do {
  68. // list($msec, $sec) = explode(' ', microtime());
  69. // $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
  70. // $orderId = 'bx' . $msectime . mt_rand(10000, 99999);
  71. // } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
  72. // return $orderId;
  73. // }
  74. /**
  75. * 后台获取报修列表(带分页、状态筛选)
  76. * @param int $page 页码
  77. * @param int $limit 每页条数
  78. * @param int $status 处理状态(-1=全部,0=未处理,1=已处理)
  79. * @return \think\Paginator 分页列表
  80. */
  81. public static function getAdminRepairList($page = 1, $limit = 10, $status = -1)
  82. {
  83. $query = self::order('create_time DESC'); // 按提交时间倒序
  84. // 状态筛选(-1表示不筛选)
  85. if ($status != -1) {
  86. $query->where('status', $status);
  87. }
  88. // 分页查询
  89. return $query->paginate([
  90. 'page' => $page,
  91. 'list_rows' => $limit,
  92. 'query' => request()->param() // 保留分页链接参数
  93. ]);
  94. }
  95. /**
  96. * 标记报修单为“已处理”
  97. * @param int $id 报修单ID
  98. * @param int $adminId 处理人ID
  99. * @return bool 成功返回true,失败返回false
  100. */
  101. public static function markAsHandled($id, $adminId)
  102. {
  103. return self::where('id', $id)->update([
  104. 'status' => 1,
  105. 'handle_admin_id' => $adminId,
  106. 'handle_time' => time()
  107. ]) > 0;
  108. }
  109. /**
  110. * 根据ID获取单个报修单详情(用于下载)
  111. * @param int $id 报修单ID
  112. * @return array|null 详情数据
  113. */
  114. public static function getRepairDetailForDownload($id)
  115. {
  116. $detail = self::find($id);
  117. if (!$detail) {
  118. return null;
  119. }
  120. // 格式化时间(时间戳转字符串)
  121. $detail = $detail->toArray();
  122. $detail['create_time_text'] = date('Y-m-d H:i:s', $detail['create_time']);
  123. $detail['handle_time_text'] = $detail['handle_time'] ? date('Y-m-d H:i:s', $detail['handle_time']) : '未处理';
  124. $detail['status_text'] = $detail['status'] ? '已处理' : '未处理';
  125. return $detail;
  126. }
  127. }