Workorder.php 5.1 KB

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