Project.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace app\common\model;
  3. use think\facade\Db;
  4. use app\common\model\Contract;
  5. use app\common\model\ProjectSchedule;
  6. /**
  7. *
  8. * @property string $status 状态值
  9. * @property array<number> $participants_id
  10. * @property number $responsibility_person_id
  11. * @property array<ProjectSchedule> $schedules
  12. * @property array<Contract> $contracts
  13. */
  14. class Project extends Base
  15. {
  16. protected $schema = [
  17. 'id' => 'int', // id
  18. 'create_time' => 'datetime', // 创建时间
  19. 'update_time' => 'datetime', // 更新时间
  20. 'delete_time' => 'datetime', // 删除时间
  21. 'name' => 'varchar', // 名称
  22. 'responsibility_person_id' => 'int', // 责任人id
  23. 'desc' => 'text', // 描述
  24. 'source' => 'varchar', // 来源
  25. 'estimated_amount' => 'int', // 预估金额, 分为单位
  26. 'status' => 'varchar', // 状态值
  27. 'project_start_date' => 'date', // 项目周期开始时间
  28. 'project_end_date' => 'date', // 项目周期结束时间
  29. 'dev_start_date' => 'date', // 开发开始时间
  30. 'dev_end_date' => 'date', // 开发结束时间
  31. 'pre_dev_time' => 'int', // 约定开发周期,单位为天
  32. 'maintain_start_date' => 'date', // 维护开始时间
  33. 'maintain_end_date' => 'date', // 维护结束时间
  34. 'pre_maintain_time' => 'int', // 约定维护周期,单位为天
  35. 'participants_id' => 'json', // 项目参与人员
  36. ];
  37. protected $type = [
  38. 'participants_id' => 'array'
  39. ];
  40. public function responsibilityPersonName()
  41. {
  42. return $this->belongsTo(Admin::class, 'responsibility_person_id', 'id');
  43. }
  44. public function contracts()
  45. {
  46. return $this->hasMany(Contract::class);
  47. }
  48. public function schedules()
  49. {
  50. return $this->hasMany(ProjectSchedule::class)
  51. ->field('s.*')
  52. ->field('a.real_name as updater')
  53. ->alias('s')
  54. ->order('s.start_date asc')
  55. ->join('admin a', 'a.id = s.updater_id', 'LEFT');
  56. }
  57. public function getParticipantsIdAttr($value, $data) {
  58. return array_map(fn($i) => (int) $i, json_decode($value) ?? []);
  59. }
  60. public function getParticipantsAttr($value, $data) {
  61. return (new Admin)->where('id', 'in', $this->participants_id)->select()->map(fn($admin) => $admin->real_name);
  62. }
  63. }