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