Workorder.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace app\api\controller\ps;
  3. use app\common\controller\Api;
  4. use app\common\library\ps\FactoryContext;
  5. use app\common\library\ps\ProcessWriter;
  6. use app\common\model\ps\Product as ProductModel;
  7. use app\common\model\ps\Workorder as WorkorderModel;
  8. /**
  9. * 工单接口
  10. */
  11. class Workorder extends Api
  12. {
  13. protected $noNeedRight = '*';
  14. /**
  15. * @var WorkorderModel
  16. */
  17. protected $model = null;
  18. public function _initialize()
  19. {
  20. parent::_initialize();
  21. if (!FactoryContext::id()) {
  22. $this->error('账号未绑定工厂');
  23. }
  24. $this->model = new WorkorderModel;
  25. }
  26. /**
  27. * 列表
  28. */
  29. public function index()
  30. {
  31. $limit = $this->request->request('limit/d', 10);
  32. $keyword = $this->request->request('keyword', '', 'trim');
  33. $query = $this->model->with(['product'])->order('id desc');
  34. if ($keyword !== '') {
  35. $query->where('no|batch_no|customer|product_name', 'like', '%' . $keyword . '%');
  36. }
  37. $list = $query->paginate($limit);
  38. $this->success('', ['total' => $list->total(), 'rows' => $list->items()]);
  39. }
  40. /**
  41. * 详情
  42. */
  43. public function info()
  44. {
  45. $id = $this->request->request('id/d');
  46. $row = $this->model->with(['processes', 'product.processes'])->find($id);
  47. if (!$row) {
  48. $this->error(__('No Results were found'));
  49. }
  50. $this->success('', $row);
  51. }
  52. /**
  53. * 添加
  54. */
  55. public function add()
  56. {
  57. $params = $this->request->post();
  58. if (!$params) {
  59. $this->error(__('Parameter %s can not be empty', ''));
  60. }
  61. $params['creator_user_id'] = $this->auth->id;
  62. unset($params['id'], $params['factory_id'], $params['qty'], $params['sheet_qty'], $params['product']);
  63. $params = $this->normalizeProduct($params);
  64. $processes = isset($params['processes']) ? $params['processes'] : [];
  65. unset($params['processes']);
  66. $this->model->allowField(true)->save($params);
  67. if (!$processes && !empty($params['product_id'])) {
  68. $product = ProductModel::with('processes')->find($params['product_id']);
  69. $processes = $product ? $product['processes'] : [];
  70. }
  71. ProcessWriter::save($this->model->id, $processes, 'workorder');
  72. $this->success('', ['id' => $this->model->id]);
  73. }
  74. /**
  75. * 编辑
  76. */
  77. public function edit()
  78. {
  79. $id = $this->request->post('id/d');
  80. $row = $this->model->find($id);
  81. if (!$row) {
  82. $this->error(__('No Results were found'));
  83. }
  84. $params = $this->request->post();
  85. unset($params['id'], $params['factory_id'], $params['qty'], $params['sheet_qty'], $params['product']);
  86. $params = $this->normalizeProduct($params);
  87. $processes = isset($params['processes']) ? $params['processes'] : null;
  88. unset($params['processes']);
  89. $row->allowField(true)->save($params);
  90. if (is_array($processes)) {
  91. ProcessWriter::save($row->id, $processes, 'workorder');
  92. }
  93. $this->success();
  94. }
  95. /**
  96. * 删除
  97. */
  98. public function del()
  99. {
  100. $ids = $this->request->post('id');
  101. if (!$ids) {
  102. $this->error(__('Parameter %s can not be empty', 'id'));
  103. }
  104. $list = $this->model->where('id', 'in', $ids)->select();
  105. foreach ($list as $row) {
  106. \think\Db::name('ps_workorder_process')->where('workorder_id', $row->id)->delete();
  107. $row->delete();
  108. }
  109. $this->success();
  110. }
  111. /**
  112. * 产品可选:选了带出名称,不选则必填名称。
  113. *
  114. * @param array $params
  115. * @return array
  116. */
  117. protected function normalizeProduct(array $params)
  118. {
  119. $productId = (int)($params['product_id'] ?? 0);
  120. $name = trim((string)($params['product_name'] ?? ''));
  121. unset($params['name']);
  122. if ($productId > 0 && $name === '') {
  123. $product = ProductModel::get($productId);
  124. $name = $product ? (string)$product['name'] : '';
  125. }
  126. if ($name === '') {
  127. $this->error('请选择产品或填写名称');
  128. }
  129. $params['product_id'] = $productId;
  130. $params['product_name'] = mb_substr($name, 0, 100);
  131. return $params;
  132. }
  133. }