SurveyController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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 Yii;
  9. use yii\helpers\ArrayHelper;
  10. use api\common\behaviors\QueryParamAuth;
  11. use yii\captcha\CaptchaAction;
  12. use common\enums\CodeEnum;
  13. use common\models\Policy;
  14. class SurveyController extends Controller {
  15. public function behaviors()
  16. {
  17. return ArrayHelper::merge(parent::behaviors(), [
  18. [
  19. 'class' => QueryParamAuth::className(),
  20. 'tokenParam' => 'token',
  21. 'optional' => ['index','submit','enterprise','captcha']
  22. ]
  23. ]);
  24. }
  25. public function actionCaptcha()
  26. {
  27. // $obj = new CaptchaAction(\Yii::$app->controller->id,\Yii::$app->controller);
  28. //
  29. // $obj->width = 100;
  30. // $obj->minLength = 3;
  31. // $obj->maxLength = 3;
  32. // $obj->offset = 3;
  33. // $code = $obj->getVerifyCode(true);
  34. // //echo $code;die;
  35. // // 生成图片
  36. // echo $obj->run();
  37. // die;
  38. $CodeImgGenerate = new CodeImgGenerate(\Yii::$app->controller->id,\Yii::$app->controller);
  39. $codeInfo = $CodeImgGenerate->inline(); // 验证码二进制流
  40. header("Content-type: image/png"); // 输出图片
  41. exit($codeInfo);
  42. }
  43. /**
  44. * @api {get} /v1/survey 列表
  45. * @apiVersion 1.0.0
  46. * @apiName index
  47. * @apiGroup Survey
  48. *
  49. *
  50. */
  51. public function actionIndex()
  52. {
  53. $type = request()->get('type');
  54. if(empty($type)) $type = 'industry';
  55. $lists = ArrayHelper::toArray(Config::find()->select(['name','value','extra','description','type'])->where(['group' => $type])->all());
  56. foreach ($lists as &$value) {
  57. $value['value'] = explode("\r\n",$value['extra']);
  58. foreach($value['value'] as &$val){
  59. $val = trim($val);
  60. }
  61. unset($value['extra']);
  62. }
  63. return ['data' => $lists];
  64. }
  65. public function actionEnterprise()
  66. {
  67. $params = request()->post();
  68. // $params = [
  69. // 'name'=>'企业名称1',
  70. // 'address'=>'企业注册地',
  71. // 'estdate'=>'2023-10-23',
  72. // 'busAddress'=>'企业实际经营地',
  73. // 'propertyNumber'=>1, //企业有效l类知识产权数
  74. // 'propertyNumber2'=>2, //有效、高企认定中未使用过的II类知识产权数
  75. // 'propertyMode'=>1, //知识产权获取方式 1:自主研发 2:仅有受让、受赠和并购等
  76. // 'isStandard'=>0, //企业参与编制国家标准、行业标准、检测方法、技术规范的情况 1:是 0:否
  77. // 'achievementNumber'=>1, //科技成果数,
  78. // 'manageLevel1'=>1, //定制了企业研究开发组织管理制度
  79. // 'manageLevel2'=>1, //建立了研发投入核算体系
  80. // 'manageLevel3'=>1, //编制了研发费用辅助帐
  81. // 'manageLevel4'=>1, //设立了内部科技技术研究开发机构并具备相应的科研条件
  82. // 'manageLevel5'=>1, //与国内外研究开发机构开展多种形式的产学研合作
  83. // 'manageLevel6'=>1, //建立了科技成果转化的组织实施与激励奖励制度
  84. // 'manageLevel7'=>1, //建立开放式的创新创业平台
  85. // 'manageLevel8'=>1, //建立了科技人员的培养进修制度
  86. // 'manageLevel9'=>1, //建立了职工技能培训制度
  87. // 'netAssets1'=>111, //第1年 净资产
  88. // 'netAssets2'=>222, //第2年 净资产
  89. // 'netAssets3'=>333, //第3年 净资产
  90. // 'saleRevenue1'=>444, //第1年 销售收入
  91. // 'saleRevenue2'=>555, //第2年 销售收入
  92. // 'saleRevenue3'=>666 //第3年 销售收入
  93. // ];
  94. //知识产权数量
  95. $numberScore = 0;
  96. if($params['propertyNumber2'] == 1 || $params['propertyNumber2'] == 2) $numberScore = 2;
  97. if($params['propertyNumber2'] == 3 || $params['propertyNumber2'] == 4) $numberScore = 4;
  98. if($params['propertyNumber2'] >= 5) $numberScore = 6;
  99. if($params['propertyNumber'] > 1) $numberScore = 8;
  100. //知识产权获得方式
  101. $modeScore = 0;
  102. if($params['propertyMode'] == 1) $numberScore = 6;
  103. if($params['propertyMode'] == 2) $numberScore = 3;
  104. //企业参与编制国家标准、行业标准、检测方法、技术规范的情况
  105. $standardScore = 0;
  106. if($params['isStandard'] == 1) $standardScore = 2;
  107. //科技成果转化能力
  108. $techniquesAchieveScore = 0;
  109. if($params['achievementNumber'] == 1) $techniquesAchieveScore = 6;
  110. if($params['achievementNumber'] == 2) $techniquesAchieveScore = 12;
  111. if($params['achievementNumber'] == 3) $techniquesAchieveScore = 18;
  112. if($params['achievementNumber'] == 4) $techniquesAchieveScore = 25;
  113. if($params['achievementNumber'] >= 5) $techniquesAchieveScore = 30;
  114. //研究开发组织管理水平
  115. $manageLevelScore = 0;
  116. if($params['manageLevel1'] == 1) $manageLevelScore += 2;
  117. if($params['manageLevel2'] == 1) $manageLevelScore += 2;
  118. if($params['manageLevel3'] == 1) $manageLevelScore += 2;
  119. if($params['manageLevel4'] == 1) $manageLevelScore += 3;
  120. if($params['manageLevel5'] == 1) $manageLevelScore += 3;
  121. if($params['manageLevel6'] == 1) $manageLevelScore += 2;
  122. if($params['manageLevel7'] == 1) $manageLevelScore += 2;
  123. if($params['manageLevel8'] == 1) $manageLevelScore += 2;
  124. if($params['manageLevel9'] == 1) $manageLevelScore += 2;
  125. //净资产增长率
  126. $growthRate = (0.5 * ($params['netAssets2'] / $params['netAssets1'] + $params['netAssets3'] / $params['netAssets2']) - 1) * 100;
  127. $growthRateScore = 0;
  128. if($growthRate > 0) $growthRateScore = 2;
  129. if($growthRate > 5) $growthRateScore = 4;
  130. if($growthRate > 10) $growthRateScore = 6;
  131. if($growthRate > 20) $growthRateScore = 9;
  132. //销售收入增长率
  133. $saleRate = (0.5 * ($params['saleRevenue2'] / $params['saleRevenue1'] + $params['saleRevenue3'] / $params['saleRevenue2']) - 1) * 100;
  134. $saleRateScore = 0;
  135. if($saleRate > 0) $saleRateScore = 2;
  136. if($saleRate > 10) $saleRateScore = 4;
  137. if($saleRate > 20) $saleRateScore = 6;
  138. if($saleRate > 30) $saleRateScore = 7;
  139. $result = [
  140. 'totalScore'=>8 + 8 + $numberScore + $modeScore + $standardScore + $numberScore + $modeScore + $standardScore + $techniquesAchieveScore + $manageLevelScore + $growthRateScore + $saleRateScore, //企业评测总得分
  141. 'basic'=>[
  142. 'name'=>$params['name'],
  143. 'address'=>$params['address'],
  144. 'estdate'=>$params['estdate'],
  145. 'busAddress'=>$params['busAddress'],
  146. 'propertyNumber'=>$params['propertyNumber'],
  147. 'propertyNumber2'=>$params['propertyNumber2'],
  148. 'propertyMode'=>$params['propertyMode'],
  149. 'isStandard'=>$params['isStandard'],
  150. 'achievementNumber'=>$params['achievementNumber'],
  151. ],
  152. 'knowledgeVo'=>[
  153. 'knowledgeTotalScore'=>$numberScore + $modeScore + $standardScore + 8 + 8, //知识产权
  154. 'techniquesScore'=>8, //技术的先进程度
  155. 'effectScore'=>8, //对主要产品(服务)在技术上发挥核心支持作用(8分)
  156. 'numberScore'=>$numberScore, //知识产权数量
  157. 'modeScore'=>$modeScore, //知识产权获得方式
  158. 'standardScore'=>$standardScore //企业参与编制国家标准、行业标准、检测方法、技术规范的情况
  159. ],
  160. 'techniquesAchieveScore'=>$techniquesAchieveScore, //科技成果转化能力
  161. 'manageLevelScore'=>$manageLevelScore, //研究开发组织管理水平
  162. 'enterpriseGrowthVo'=>[
  163. 'totalScore'=>$growthRateScore + $saleRateScore, //企业成长性
  164. 'growthRateScore'=>$growthRateScore, //净资产增长率得分
  165. 'saleRateScore'=>$saleRateScore, //销售收入增长率得分
  166. ]
  167. ];
  168. return ['data' => $result];
  169. }
  170. public function actionSubmit()
  171. {
  172. $data = request()->post();
  173. $type = request()->get('type');
  174. if(empty($type)) $type = 'industry';
  175. $survey = Survey::find()->where(['type' => $type])->all();
  176. $captcha = new CodeImgGenerate(\Yii::$app->controller->id,\Yii::$app->controller);
  177. $result = $captcha->validate($data['code']);
  178. if(!$result){
  179. return ['errcode' => CodeEnum::CODE_ERROR, 'errmsg' => '验证码错误'];
  180. }
  181. $list = [];
  182. foreach ($survey as $key=>$value) {
  183. $filter = json_decode($value['filter'],true);
  184. foreach ($filter as $key=>$value1) {
  185. if(!empty($value1)){
  186. $str = join('|',(array)$value1);
  187. if(array_key_exists($key,$data) && !empty($data[$key])){
  188. if(strpos($str,(string)$data[$key]) !== false){
  189. $list[] = [
  190. 'id'=>$value['id'],
  191. 'title'=>$value['title'],
  192. 'content'=>$value['content']
  193. ];
  194. continue;
  195. }
  196. }
  197. }
  198. }
  199. }
  200. //去重复
  201. $cengci = [];
  202. foreach ($list as $value) {
  203. if(isset($cengci[$value['title']])){
  204. unset($value['title']);
  205. }else{
  206. $cengci[$value['title']] = $value;
  207. }
  208. }
  209. $cengci = array_values($cengci);
  210. $query = Policy::find()->select('id,title,author,content,created_at');
  211. if(!empty($cengci)){
  212. foreach ($cengci as $value) {
  213. $query->orWhere(new \yii\db\Expression('FIND_IN_SET("'.$value['title'].'", cengci)'));
  214. }
  215. $list = $query->all();
  216. }
  217. return ['data'=>$list,'cengci'=>$cengci];
  218. }
  219. /**
  220. * @api {get} /v1/category/id:\d+ 分类详情
  221. * @apiVersion 1.0.0
  222. * @apiName view
  223. * @apiGroup Category
  224. *
  225. */
  226. public function actionView($id)
  227. {
  228. $model = Category::find()->where(['id' => $id])->one();
  229. return ['data' => $model];
  230. }
  231. }