ModelBus.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. /**
  3. *
  4. *User:Administrator
  5. *Date:2021/10/11
  6. */
  7. namespace app\api\business;
  8. use app\api\exception\ApiException;
  9. use app\api\model\Ccjc;
  10. use app\api\model\Pesticides;
  11. use app\api\model\ProductClass;
  12. use app\api\model\TestModel;
  13. use app\api\model\TestPesticides;
  14. use app\api\model\TestProduct;
  15. use app\common\lib\Arr;
  16. use app\common\lib\auth\JwtAuth;
  17. class ModelBus
  18. {
  19. private $uid;
  20. public function __construct()
  21. {
  22. $jwtAuth = JwtAuth::getInstance();
  23. $this->uid = $jwtAuth->getUid();
  24. }
  25. //获取当前用户的模型页列表
  26. public function selectModelList($data)
  27. {
  28. $pageNum = $data['pageNum'];
  29. $pageSize = $data['pageSize'];
  30. $type_id = $data['type_id'];//1.种植业 2.畜牧业 3.渔业 4.其他
  31. $where = [];
  32. if (!empty($type_id)) {
  33. array_push($where, ['type_id', '=', (int)$type_id]);
  34. }
  35. $result = (new TestModel())->getListByUserId($this->uid,$pageNum,$pageSize,$where)->toArray();
  36. $count = (new TestModel())->countListByUserId($this->uid, $where);
  37. return ['rows'=>$result, 'total' => $count,];
  38. }
  39. //获取模型信息
  40. public function getModelInfoByModelId($tmp_data)
  41. {
  42. $model_id = $tmp_data['id'];
  43. $model_info=(new TestModel())->getModelInfoByModelID($model_id);//获取模型信息
  44. $model_product=(new TestModel())->getProductInfo($model_id)->toArray();//检测对象
  45. $model_pesticides = (new TestModel())->getPesticidesInfo($model_id)->toArray();//检测项
  46. $data=[
  47. 'name'=>$model_info,
  48. 'product'=>$model_product,
  49. 'pesticides'=>$model_pesticides
  50. ];
  51. return $data;
  52. }
  53. //获取模型信息
  54. public function getModelInfoByTaskId($data)
  55. {
  56. $task_id = $data['task_id'];
  57. $test_model_id['id'] = (new Ccjc())->getTaskInfoByTaskID($task_id)['test_model_id'];
  58. $model_info = $this->getModelInfoByModelId($test_model_id);
  59. return $model_info;
  60. }
  61. public function updateInfoByTaskID($data)
  62. {
  63. $task_id = $data['task_id'];
  64. $tmp_data = [
  65. 'endtime_cydsb' => $data['endtime_cydsb'],
  66. 'is_divide' => $data['is_divide'],
  67. 'test_model_id' => $data['test_model_id'],
  68. 'industry' => (new TestModel())->getModelInfoByModelID($data['test_model_id'])['type_id'],
  69. ];
  70. $result = (new Ccjc())->updateInfoByTaskID($task_id, $tmp_data);
  71. return $result;
  72. }
  73. //修改模型信息
  74. public function updateModelInfo($model_id,$model_info,$product='',$pesticides='')
  75. {
  76. //检测对象如果不为空则存在需要更新的信息,$product_update_Data
  77. $product_update_data = [];
  78. if ($product != '') {
  79. foreach ($product as $k => $value) {
  80. $product_update_data[$k] = [
  81. 'test_model_id' => $model_id,
  82. 'product_id' => $value['id'],
  83. 'product_name' => $value['name'],
  84. ];
  85. }
  86. //删除原有Product中model_id的内容
  87. (new TestProduct())->deleteProductInfoByTestModelID($model_id);
  88. //添加新的Product中model_id的内容
  89. (new TestProduct())->insertProductInfo($product_update_data);
  90. }
  91. //检测项目如果不为空则存在需要更新的信息,$product_update_Data
  92. $pesticides_update_data = [];
  93. if ($pesticides != '') {
  94. foreach ($pesticides as $k => $value) {
  95. $pesticides_update_data [$k]= [
  96. 'test_model_id' => $model_id,
  97. 'test_id' => $value['id'],
  98. 'test_name' => $value['name'],
  99. ];
  100. }
  101. //删除原有Pesticides中model_id的内容
  102. (new TestPesticides())->deletePesticidesInfoByTestModelID($model_id);
  103. //添加新的Pesticides中model_id的内容
  104. (new TestPesticides())->insertPesticidesInfo($pesticides_update_data);
  105. }
  106. //更新model_test表中的信息(model_name和type_id)
  107. (new TestModel())->updateModelInfoByModelID($model_id,$model_info);
  108. return true;
  109. }
  110. //新增模型
  111. public function createModelInfo($model_name,$type_id,$product_data,$pesticides_data)
  112. {
  113. $uid=$this->uid;
  114. $model_id = (new TestModel())->createModelInfo($model_name, $type_id, $uid);
  115. //格式化$product_data=》$product
  116. $product=[];
  117. //todo 需要重写foreach
  118. foreach ($product_data as $k=>$v){
  119. $j=[];
  120. $j['test_model_id']=$model_id;
  121. $j['product_id']=$v['id'];
  122. $j['product_name']=$v['name'];
  123. $product[]=$j;
  124. }
  125. //格式化$pesticides_data=》$pesticides
  126. $pesticides=[];
  127. foreach ($pesticides_data as $i=>$o){
  128. $p=[];
  129. $p['test_model_id']=$model_id;
  130. $p['test_name']=$o['name'];
  131. $p['test_id']=$o['id'];
  132. $pesticides[]=$p;
  133. }
  134. //todo 写到一个model里
  135. $update_test_product = (new TestProduct())->createProductInfo($product);
  136. if ($update_test_product == 0) {
  137. throw new ApiException(config('status.none_model_product'));
  138. }
  139. $update_test_pesticide =(new TestPesticides())->insertPesticidesInfo($pesticides);
  140. if ($update_test_pesticide == 0) {
  141. throw new ApiException(config('status.none_model_pesticides'));
  142. }
  143. return true;
  144. }
  145. //删除模型
  146. public function deleteModelInfo($data,$data_count)
  147. {
  148. for ($i = 0; $i < $data_count; $i++) {
  149. //从数据库获取当前模型的user_id //验证模型创建者是否一致
  150. $user_id = (new TestModel())->getUserIdByModelID($data[$i]['id'])['user_id'];
  151. //查询模型绑定任务,如果绑定则禁止删除
  152. $ccjc_info = (new Ccjc())->getTaskInfoByModelId($data[$i]['id']);
  153. if ( !($ccjc_info==[])) {
  154. throw new ApiException(config('status.err_disable_delete'));
  155. }
  156. if ($user_id != $this->uid) {
  157. throw new ApiException(config('status.none_authority'));
  158. }
  159. //删除test_model信息
  160. (new TestModel())->deleteModelInfoByID($data[$i]['id']);
  161. //删除test_product信息
  162. (new TestProduct())->deleteProductInfoByTestModelID($data[$i]['id']);
  163. //删除test_pesticides信息
  164. (new TestPesticides())->deletePesticidesInfoByTestModelID($data[$i]['id']);
  165. }
  166. return true;
  167. }
  168. //获取检测项目列表
  169. public function selectPesticidesList($pageNum,$pageSize,$key_word)
  170. {
  171. $data = (new Pesticides())->selectPesticidesList($key_word, $pageNum, $pageSize)->toArray();
  172. $count = (new Pesticides())->countPesticidesList($key_word);
  173. $result = [
  174. 'rows' => $data,
  175. 'total' => $count,
  176. ];
  177. return $result;
  178. }
  179. //获取检测对象列表
  180. public function selectProductList($type_id)
  181. {
  182. //todo cache缓存优化数据
  183. $field='id,parent_id,product_code,name,alias';
  184. $tmp_result = (new ProductClass())->selectProductListByTypeID($type_id,$field)->toArray();//字段调用的field过滤
  185. //todo 树状化需要看一下,回调可以优化
  186. $result = (new Arr())->Arr_tree($tmp_result,'0'.$type_id);
  187. return $result;
  188. }
  189. }