SurveyController.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. <?php
  2. namespace api\modules\v1\controllers;
  3. use api\common\controllers\Controller;
  4. use common\helpers\CodeImgGenerate;
  5. use common\helpers\Util;
  6. use common\modules\config\models\Config;
  7. use common\models\Survey;
  8. use common\models\SurveyNew;
  9. use Yii;
  10. use yii\helpers\ArrayHelper;
  11. use api\common\behaviors\QueryParamAuth;
  12. use yii\captcha\CaptchaAction;
  13. use common\enums\CodeEnum;
  14. use common\models\Policy;
  15. class SurveyController extends Controller {
  16. public function behaviors()
  17. {
  18. return ArrayHelper::merge(parent::behaviors(), [
  19. [
  20. 'class' => QueryParamAuth::className(),
  21. 'tokenParam' => 'token',
  22. 'optional' => ['index','submit','enterprise','captcha']
  23. ]
  24. ]);
  25. }
  26. public function actionCaptcha()
  27. {
  28. $CodeImgGenerate = new CodeImgGenerate(\Yii::$app->controller->id,\Yii::$app->controller);
  29. $codeInfo = $CodeImgGenerate->inline(); // 验证码二进制流
  30. header("Content-type: image/png"); // 输出图片
  31. exit($codeInfo);
  32. }
  33. /**
  34. * @api {get} /v1/survey 列表
  35. * @apiVersion 1.0.0
  36. * @apiName index
  37. * @apiGroup Survey
  38. *
  39. *
  40. */
  41. public function actionIndex()
  42. {
  43. $type = request()->get('type');
  44. if(empty($type)) $type = 'industry';
  45. $lists = ArrayHelper::toArray(Config::find()->select(['name','value','extra','description','type'])->where(['group' => $type])->all());
  46. foreach ($lists as &$value) {
  47. $value['value'] = explode("\r\n",$value['extra']);
  48. foreach($value['value'] as &$val){
  49. $val = trim($val);
  50. }
  51. unset($value['extra']);
  52. }
  53. return ['data' => $lists];
  54. }
  55. public function actionEnterprise()
  56. {
  57. $params = request()->post();
  58. // $params = [
  59. // 'name'=>'企业名称1',
  60. // 'address'=>'企业注册地',
  61. // 'estdate'=>'2023-10-23',
  62. // 'busAddress'=>'企业实际经营地',
  63. // 'propertyNumber'=>1, //企业有效l类知识产权数
  64. // 'propertyNumber2'=>2, //有效、高企认定中未使用过的II类知识产权数
  65. // 'propertyMode'=>1, //知识产权获取方式 1:自主研发 2:仅有受让、受赠和并购等
  66. // 'isStandard'=>0, //企业参与编制国家标准、行业标准、检测方法、技术规范的情况 1:是 0:否
  67. // 'achievementNumber'=>1, //科技成果数,
  68. // 'manageLevel1'=>1, //定制了企业研究开发组织管理制度
  69. // 'manageLevel2'=>1, //建立了研发投入核算体系
  70. // 'manageLevel3'=>1, //编制了研发费用辅助帐
  71. // 'manageLevel4'=>1, //设立了内部科技技术研究开发机构并具备相应的科研条件
  72. // 'manageLevel5'=>1, //与国内外研究开发机构开展多种形式的产学研合作
  73. // 'manageLevel6'=>1, //建立了科技成果转化的组织实施与激励奖励制度
  74. // 'manageLevel7'=>1, //建立开放式的创新创业平台
  75. // 'manageLevel8'=>1, //建立了科技人员的培养进修制度
  76. // 'manageLevel9'=>1, //建立了职工技能培训制度
  77. // 'netAssets1'=>111, //第1年 净资产
  78. // 'netAssets2'=>222, //第2年 净资产
  79. // 'netAssets3'=>333, //第3年 净资产
  80. // 'saleRevenue1'=>444, //第1年 销售收入
  81. // 'saleRevenue2'=>555, //第2年 销售收入
  82. // 'saleRevenue3'=>666 //第3年 销售收入
  83. // ];
  84. //知识产权数量
  85. $numberScore = 0;
  86. if($params['propertyNumber2'] == 1 || $params['propertyNumber2'] == 2) $numberScore = 2;
  87. if($params['propertyNumber2'] == 3 || $params['propertyNumber2'] == 4) $numberScore = 4;
  88. if($params['propertyNumber2'] >= 5) $numberScore = 6;
  89. if($params['propertyNumber'] > 1) $numberScore = 8;
  90. //知识产权获得方式
  91. $modeScore = 0;
  92. if($params['propertyMode'] == 1) $numberScore = 6;
  93. if($params['propertyMode'] == 2) $numberScore = 3;
  94. //企业参与编制国家标准、行业标准、检测方法、技术规范的情况
  95. $standardScore = 0;
  96. if($params['isStandard'] == 1) $standardScore = 2;
  97. //科技成果转化能力
  98. $techniquesAchieveScore = 0;
  99. if($params['achievementNumber'] == 1) $techniquesAchieveScore = 6;
  100. if($params['achievementNumber'] == 2) $techniquesAchieveScore = 12;
  101. if($params['achievementNumber'] == 3) $techniquesAchieveScore = 18;
  102. if($params['achievementNumber'] == 4) $techniquesAchieveScore = 25;
  103. if($params['achievementNumber'] >= 5) $techniquesAchieveScore = 30;
  104. //研究开发组织管理水平
  105. $manageLevelScore = 0;
  106. if($params['manageLevel1'] == 1) $manageLevelScore += 2;
  107. if($params['manageLevel2'] == 1) $manageLevelScore += 2;
  108. if($params['manageLevel3'] == 1) $manageLevelScore += 2;
  109. if($params['manageLevel4'] == 1) $manageLevelScore += 3;
  110. if($params['manageLevel5'] == 1) $manageLevelScore += 3;
  111. if($params['manageLevel6'] == 1) $manageLevelScore += 2;
  112. if($params['manageLevel7'] == 1) $manageLevelScore += 2;
  113. if($params['manageLevel8'] == 1) $manageLevelScore += 2;
  114. if($params['manageLevel9'] == 1) $manageLevelScore += 2;
  115. //净资产增长率
  116. $growthRate = (0.5 * ($params['netAssets2'] / $params['netAssets1'] + $params['netAssets3'] / $params['netAssets2']) - 1) * 100;
  117. $growthRateScore = 0;
  118. if($growthRate > 0) $growthRateScore = 2;
  119. if($growthRate > 5) $growthRateScore = 4;
  120. if($growthRate > 10) $growthRateScore = 6;
  121. if($growthRate > 20) $growthRateScore = 9;
  122. //销售收入增长率
  123. $saleRate = (0.5 * ($params['saleRevenue2'] / $params['saleRevenue1'] + $params['saleRevenue3'] / $params['saleRevenue2']) - 1) * 100;
  124. $saleRateScore = 0;
  125. if($saleRate > 0) $saleRateScore = 2;
  126. if($saleRate > 10) $saleRateScore = 4;
  127. if($saleRate > 20) $saleRateScore = 6;
  128. if($saleRate > 30) $saleRateScore = 7;
  129. $result = [
  130. 'totalScore'=>8 + 8 + $numberScore + $modeScore + $standardScore + $numberScore + $modeScore + $standardScore + $techniquesAchieveScore + $manageLevelScore + $growthRateScore + $saleRateScore, //企业评测总得分
  131. 'basic'=>[
  132. 'name'=>$params['name'],
  133. 'address'=>$params['address'],
  134. 'estdate'=>$params['estdate'],
  135. 'busAddress'=>$params['busAddress'],
  136. 'propertyNumber'=>$params['propertyNumber'],
  137. 'propertyNumber2'=>$params['propertyNumber2'],
  138. 'propertyMode'=>$params['propertyMode'],
  139. 'isStandard'=>$params['isStandard'],
  140. 'achievementNumber'=>$params['achievementNumber'],
  141. ],
  142. 'knowledgeVo'=>[
  143. 'knowledgeTotalScore'=>$numberScore + $modeScore + $standardScore + 8 + 8, //知识产权
  144. 'techniquesScore'=>8, //技术的先进程度
  145. 'effectScore'=>8, //对主要产品(服务)在技术上发挥核心支持作用(8分)
  146. 'numberScore'=>$numberScore, //知识产权数量
  147. 'modeScore'=>$modeScore, //知识产权获得方式
  148. 'standardScore'=>$standardScore //企业参与编制国家标准、行业标准、检测方法、技术规范的情况
  149. ],
  150. 'techniquesAchieveScore'=>$techniquesAchieveScore, //科技成果转化能力
  151. 'manageLevelScore'=>$manageLevelScore, //研究开发组织管理水平
  152. 'enterpriseGrowthVo'=>[
  153. 'totalScore'=>$growthRateScore + $saleRateScore, //企业成长性
  154. 'growthRateScore'=>$growthRateScore, //净资产增长率得分
  155. 'saleRateScore'=>$saleRateScore, //销售收入增长率得分
  156. ]
  157. ];
  158. return ['data' => $result];
  159. }
  160. public function actionSubmit()
  161. {
  162. $data = request()->post();
  163. $type = request()->post('type');
  164. if(empty($type)) $type = 'industry';
  165. $survey = ArrayHelper::toArray(SurveyNew::find()->where(['type' => $type])->all());
  166. // $captcha = new CodeImgGenerate(\Yii::$app->controller->id,\Yii::$app->controller);
  167. //
  168. // $result = $captcha->validate($data['code']);
  169. //
  170. // if(!$result){
  171. // return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => '验证码错误'];
  172. // }
  173. $selects = ArrayHelper::toArray(Config::find()->where(['group' => 'industry','type' => 'select'])->all());
  174. $list = [];
  175. if($type == 'special'){
  176. foreach ($survey as $key=>$value) {
  177. $filter = explode(';',$value['filter']);//先判断第一层and关系
  178. $is_match = [];
  179. foreach ($filter as $key1 => $value1){
  180. if(!empty($value1)){
  181. if(strpos($value1,'|') !== false){//如果有存在判断大小
  182. $filter2 = explode('|',$value1);
  183. if(array_key_exists($filter2[0],$data) && !empty($data[$filter2[0]]) && $data[$filter2[0]] != '请选择'){
  184. switch ($filter2[1]){
  185. case '>=':
  186. if($data[$filter2[0]] >= $filter2[2]){
  187. $is_match[$key1] = true;
  188. }else{
  189. $is_match[$key1] = false;
  190. continue 2;
  191. }
  192. break;
  193. case '=':
  194. if($data[$filter2[0]] == $filter2[2]){
  195. $is_match[$key1] = true;
  196. }else{
  197. $is_match[$key1] = false;
  198. continue 2;
  199. }
  200. break;
  201. case '<=':
  202. if($data[$filter2[0]] <= $filter2[2] && $data[$filter2[0]] > 0){
  203. $is_match[$key1] = true;
  204. }else{
  205. $is_match[$key1] = false;
  206. continue 2;
  207. }
  208. break;
  209. }
  210. }else{
  211. $is_match[$key1] = false;
  212. continue 2;
  213. }
  214. }
  215. }
  216. }
  217. $match_count = 0;
  218. foreach ($is_match as $v){
  219. if($v){
  220. $match_count++;
  221. }
  222. }
  223. if($match_count == count($filter)){
  224. $list[] = [
  225. 'id'=>$value['id'],
  226. 'title'=>$value['title'],
  227. 'content'=>$value['content'],
  228. 'level' => $value['cengci']
  229. ];
  230. }
  231. }
  232. foreach($list as $k => $v){
  233. $zclist = Policy::find()->where(['type' => Policy::TYPE_SURVEY, 'estate' => $type,'title' => $v['title']])->andWhere(['like','cengci',"{$v['level']}"])->all();
  234. $list[$k]['policy'] = $zclist;
  235. }
  236. $cengci = [];
  237. foreach ($list as $value) {
  238. if(!isset($cengci[$value['level']])){
  239. $cengci[$value['level']] = $value;
  240. }
  241. }
  242. $cengci = array_values($cengci);
  243. }else{
  244. foreach ($survey as $key=>$value) {
  245. $filter = explode(';',$value['filter']);//先判断第一层and关系
  246. $is_match = [];
  247. foreach ($filter as $key1 => $value1){
  248. if(!empty($value1)){
  249. if(array_key_exists($value1,$data) && !empty($data[$value1]) && $data[$value1] != '请选择' && !in_array($value1,['shengte','shenga','quanyi','shengb','rencaileixing','zhuanyelingyunianxian'])){
  250. if(strpos($value['title'],(string)$data[$value1]) === false){//如果用户提交的信息字眼有出现在政策条件内,相当于条件符合
  251. $is_match[$key1] = false;
  252. continue 2;
  253. }else{
  254. $is_match[$key1] = true;
  255. }
  256. }
  257. if(strpos($value1,'-') !== false){//如果有存在或关系
  258. $filter1 = explode('-',$value1);
  259. $i = 0;
  260. foreach ($filter1 as $key2 => $value2){
  261. if(!in_array($value2,['shengte','shenga','quanyi','shengb','rencaileixing','zhuanyelingyunianxian'])){
  262. if(array_key_exists($value2,$data) && !empty($data[$value2]) && $data[$value2] != '请选择'){
  263. if(strpos($value['title'],(string)$data[$value2]) !== false){//如果用户提交的信息字眼有出现在政策条件内,相当于条件符合
  264. $i++;
  265. }
  266. }
  267. }else{
  268. if(strpos($value2,'|') !== false){
  269. $filter3 = explode('|',$value2);
  270. if(array_key_exists($filter3[0],$data) && !empty($data[$filter3[0]]) && $data[$filter3[0]] != '请选择'){
  271. switch ($filter3[1]){
  272. case '>=':
  273. if($data[$filter3[0]] >= $filter3[2]){
  274. $i++;
  275. }
  276. break;
  277. case '=':
  278. if($data[$filter3[0]] == $filter3[2]){
  279. $i++;
  280. }
  281. break;
  282. case '<=':
  283. if($data[$filter3[0]] <= $filter3[2] && $data[$filter3[0]] > 0){
  284. $i++;
  285. }
  286. break;
  287. }
  288. }
  289. }
  290. }
  291. }
  292. if($i == 0){
  293. $is_match[$key1] = false;
  294. continue 2;
  295. }else{
  296. $is_match[$key1] = true;
  297. }
  298. }
  299. if(strpos($value1,'|') !== false){//如果有存在判断大小
  300. $filter2 = explode('|',$value1);
  301. if(array_key_exists($filter2[0],$data) && !empty($data[$filter2[0]]) && $data[$filter2[0]] != '请选择'){
  302. switch ($filter2[1]){
  303. case '>=':
  304. if($data[$filter2[0]] >= $filter2[2]){
  305. $is_match[$key1] = true;
  306. }else{
  307. $is_match[$key1] = false;
  308. continue 2;
  309. }
  310. break;
  311. case '=':
  312. if($data[$filter2[0]] == $filter2[2]){
  313. $is_match[$key1] = true;
  314. }else{
  315. $is_match[$key1] = false;
  316. continue 2;
  317. }
  318. break;
  319. case '<=':
  320. if($data[$filter2[0]] <= $filter2[2] && $data[$filter2[0]] > 0){
  321. $is_match[$key1] = true;
  322. }else{
  323. $is_match[$key1] = false;
  324. continue 2;
  325. }
  326. break;
  327. }
  328. }else{
  329. $is_match[$key1] = false;
  330. continue 2;
  331. }
  332. }
  333. }
  334. }
  335. $match_count = 0;
  336. foreach ($is_match as $v){
  337. if($v){
  338. $match_count++;
  339. }
  340. }
  341. if($match_count == count($filter)){
  342. switch ($value['cengci']){
  343. case '1':
  344. $level = '第一层次';
  345. break;
  346. case '2':
  347. $level = '第二层次';
  348. break;
  349. case '3':
  350. $level = '第三层次';
  351. break;
  352. case '4':
  353. $level = '第四层次';
  354. break;
  355. case '5':
  356. $level = '第五层次';
  357. break;
  358. case '6':
  359. $level = '第六层次';
  360. break;
  361. case '7':
  362. $level = '第七层次';
  363. break;
  364. }
  365. $list[] = [
  366. 'id'=>$value['id'],
  367. 'title'=>$value['title'],
  368. 'content'=>$value['content'],
  369. 'level' => $level
  370. ];
  371. }
  372. }
  373. foreach($list as $k => $v){
  374. $zclist = Policy::find()->where(['type' => Policy::TYPE_SURVEY, 'estate' => $type])->andWhere(['like','cengci',"{$v['level']}"])->all();
  375. $list[$k]['policy'] = $zclist;
  376. }
  377. //去重复
  378. $cengci = [];
  379. foreach ($list as $value) {
  380. if(isset($cengci[$value['level']])){
  381. unset($value['level']);
  382. }else{
  383. $cengci[$value['level']] = $value;
  384. }
  385. }
  386. $cengci = array_values($cengci);
  387. }
  388. return ['data' => $cengci];
  389. }
  390. /**
  391. * @api {get} /v1/category/id:\d+ 分类详情
  392. * @apiVersion 1.0.0
  393. * @apiName view
  394. * @apiGroup Category
  395. *
  396. */
  397. public function actionView($id)
  398. {
  399. $model = Category::find()->where(['id' => $id])->one();
  400. return ['data' => $model];
  401. }
  402. }