| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- namespace app\api\controller\ps;
- use app\common\controller\Api;
- use app\common\library\ps\FactoryContext;
- use app\common\library\ps\FactoryPerm;
- use app\common\library\ps\ProcessWriter;
- use app\common\model\ps\Product as ProductModel;
- use app\common\model\ps\Workorder as WorkorderModel;
- /**
- * 工单接口
- */
- class Workorder extends Api
- {
- protected $noNeedRight = '*';
- /**
- * @var WorkorderModel
- */
- protected $model = null;
- public function _initialize()
- {
- parent::_initialize();
- if (!FactoryContext::id()) {
- $this->error('账号未绑定工厂');
- }
- $this->model = new WorkorderModel;
- $map = [
- 'index' => 'workorder.view',
- 'info' => 'workorder.view',
- 'add' => 'workorder.edit',
- 'edit' => 'workorder.edit',
- 'del' => 'workorder.delete',
- ];
- $action = strtolower($this->request->action());
- if (isset($map[$action]) && FactoryPerm::deny($map[$action])) {
- $this->error('没有权限:' . FactoryPerm::label($map[$action]));
- }
- }
- /**
- * 列表
- */
- public function index()
- {
- $limit = $this->request->request('limit/d', 10);
- $keyword = $this->request->request('keyword', '', 'trim');
- $query = $this->model->with(['product'])->order('id desc');
- if ($keyword !== '') {
- $query->where('no|batch_no|customer|product_name|spec|remark', 'like', '%' . $keyword . '%');
- }
- $list = $query->paginate($limit);
- $this->success('', ['total' => $list->total(), 'rows' => $list->items()]);
- }
- /**
- * 详情
- */
- public function info()
- {
- $id = $this->request->request('id/d');
- $row = $this->model->with(['processes', 'product.processes'])->find($id);
- if (!$row) {
- $this->error(__('No Results were found'));
- }
- $this->success('', $row);
- }
- /**
- * 添加
- */
- public function add()
- {
- $params = $this->request->post();
- if (!$params) {
- $this->error(__('Parameter %s can not be empty', ''));
- }
- $params['creator_user_id'] = $this->auth->id;
- unset($params['id'], $params['factory_id'], $params['qty'], $params['sheet_qty'], $params['product']);
- $params = $this->normalizeProduct($params);
- $processes = isset($params['processes']) ? $params['processes'] : [];
- unset($params['processes']);
- $this->model->allowField(true)->save($params);
- if (!$processes && !empty($params['product_id'])) {
- $product = ProductModel::with('processes')->find($params['product_id']);
- $processes = $product ? $product['processes'] : [];
- }
- ProcessWriter::save($this->model->id, $processes, 'workorder');
- $this->success('', ['id' => $this->model->id]);
- }
- /**
- * 编辑
- */
- public function edit()
- {
- $id = $this->request->post('id/d');
- $row = $this->model->find($id);
- if (!$row) {
- $this->error(__('No Results were found'));
- }
- $params = $this->request->post();
- unset($params['id'], $params['factory_id'], $params['qty'], $params['sheet_qty'], $params['product']);
- $params = $this->normalizeProduct($params);
- $processes = isset($params['processes']) ? $params['processes'] : null;
- unset($params['processes']);
- $row->allowField(true)->save($params);
- if (is_array($processes)) {
- ProcessWriter::save($row->id, $processes, 'workorder');
- }
- $this->success();
- }
- /**
- * 删除
- */
- public function del()
- {
- $ids = $this->request->post('id');
- if (!$ids) {
- $this->error(__('Parameter %s can not be empty', 'id'));
- }
- $list = $this->model->where('id', 'in', $ids)->select();
- foreach ($list as $row) {
- \think\Db::name('ps_workorder_process')->where('workorder_id', $row->id)->delete();
- $row->delete();
- }
- $this->success();
- }
- /**
- * 产品可选:选了带出名称,不选则必填名称。
- *
- * @param array $params
- * @return array
- */
- protected function normalizeProduct(array $params)
- {
- $productId = (int)($params['product_id'] ?? 0);
- $name = trim((string)($params['product_name'] ?? ''));
- $spec = trim((string)($params['spec'] ?? ''));
- unset($params['name']);
- $product = null;
- if ($productId > 0) {
- $product = ProductModel::get($productId);
- }
- if ($productId > 0 && $name === '') {
- $name = $product ? (string)$product['name'] : '';
- }
- if ($name === '') {
- $this->error('请选择产品或填写名称');
- }
- if ($spec === '' && $product) {
- $spec = (string)$product['spec'];
- }
- $params['product_id'] = $productId;
- $params['product_name'] = mb_substr($name, 0, 100);
- $params['spec'] = mb_substr($spec, 0, 100);
- return $params;
- }
- }
|