PolicyExaminationService.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. package platform.modules.government.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.serializer.PascalNameFilter;
  5. import com.xiaoleilu.hutool.crypto.SecureUtil;
  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.HttpStatus;
  9. import org.apache.http.client.methods.HttpPost;
  10. import org.apache.http.entity.StringEntity;
  11. import org.apache.http.impl.client.CloseableHttpClient;
  12. import org.apache.http.impl.client.HttpClientBuilder;
  13. import org.apache.http.util.EntityUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import platform.common.base.service.BaseService;
  17. import platform.common.util.HttpClientUtil;
  18. import platform.modules.build.entity.Company;
  19. import platform.modules.build.service.CompanyService;
  20. import platform.modules.company.entity.CompanyBrdinvestment;
  21. import platform.modules.company.entity.CompanyPolicy;
  22. import platform.modules.company.service.CompanyBrdinvestmentService;
  23. import platform.modules.government.dao.PolicyExaminationDao;
  24. import platform.modules.government.dto.CompanyInfoDto;
  25. import platform.modules.government.dto.CompanyPolicyDto;
  26. import platform.modules.government.dto.PolicyResultDto;
  27. import platform.modules.sys.entity.DiagnosticReport;
  28. import platform.modules.sys.entity.DiagnosticUserGroup;
  29. import platform.modules.sys.service.DiagnosticReportService;
  30. import platform.modules.sys.service.DiagnosticUserGroupService;
  31. //import sun.tools.tree.DoubleExpression;
  32. import tk.mybatis.mapper.entity.Example;
  33. import java.text.ParseException;
  34. import java.text.SimpleDateFormat;
  35. import java.util.Date;
  36. import java.util.List;
  37. import java.util.Map;
  38. @Service
  39. public class PolicyExaminationService extends BaseService<CompanyPolicy>{
  40. @Autowired
  41. private PolicyExaminationDao policyExaminationDao;
  42. @Autowired
  43. private CompanyBrdinvestmentService companyBrdinvestmentServince;
  44. @Autowired
  45. private CompanyService companyService;
  46. @Autowired
  47. public HttpClientUtil httpClientUtil;
  48. @Autowired
  49. private DiagnosticReportService diagnosticReportService;
  50. @Autowired
  51. private DiagnosticUserGroupService diagnosticUserGroupService;
  52. /**
  53. * 根据公司id找数据
  54. * @param company_id
  55. * @return
  56. */
  57. public CompanyPolicy findByCid(Integer company_id) {
  58. Example example = new Example(CompanyPolicy.class);
  59. Example.Criteria criteria = example.createCriteria();
  60. criteria.andEqualTo("del_flag", 0);
  61. criteria.andEqualTo("cid", company_id);
  62. List<CompanyPolicy> contents = this.selectByExample(example);
  63. if (contents != null && contents.size() > 0){
  64. return contents.get(0);
  65. }
  66. return new CompanyPolicy();
  67. }
  68. /**
  69. * 保存诊断数据
  70. * @param companyPolicy
  71. */
  72. public void savePolicyData(CompanyPolicy companyPolicy) {
  73. CompanyPolicy policy = findByCid(companyPolicy.getCid());
  74. if (policy.getId() != null){
  75. updateSelective(companyPolicy);
  76. }
  77. else {
  78. //保存企业信息
  79. insertAndGetId(companyPolicy);
  80. }
  81. //保存近三年经营数据
  82. if (companyPolicy.getCompanyBrdinvestments() != null){
  83. List<CompanyBrdinvestment> brdinvestments = companyPolicy.getCompanyBrdinvestments();
  84. for (CompanyBrdinvestment brdinvestment : brdinvestments){
  85. brdinvestment.setCid(companyPolicy.getCid());
  86. if (brdinvestment.getId() != null){
  87. companyBrdinvestmentServince.updateSelective(brdinvestment);
  88. }
  89. else {
  90. companyBrdinvestmentServince.insertAndGetId(brdinvestment);
  91. }
  92. }
  93. }
  94. }
  95. /**
  96. * 更新企业诊断信息
  97. * @param companyPolicy
  98. */
  99. public String companyUpdateApi(CompanyPolicy companyPolicy) {
  100. String result = "";
  101. String url = "http://snd.ideatob.com/mp/api/?apikey=snd_apis&at=11";
  102. Company company = companyService.findById(companyPolicy.getCid());
  103. if (company != null){
  104. //将企业id加密作为passwd凭证
  105. String passwd = SecureUtil.md5().digestHex(company.getId().toString());
  106. // String passwd = "e10adc3949ba59abbe56e057f20f883e";
  107. url += "&uid="+company.getId()+"&passwd="+ passwd;
  108. // url += "&uid=47653&passwd="+ SecureUtil.md5().digestHex(company.getId().toString());
  109. }
  110. CloseableHttpClient httpClient = HttpClientBuilder.create().build();
  111. HttpPost httpPost = new HttpPost(url);
  112. //请求头
  113. httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
  114. //json转application/x-www-form-url格式
  115. String formData = "";
  116. JSONObject jsonObj = JSON.parseObject(postEntity(companyPolicy));
  117. for (Map.Entry<String, Object> entry : jsonObj.entrySet()) {
  118. formData += entry.getKey()+"="+entry.getValue()+"&";
  119. }
  120. System.out.println(formData.substring(0,formData.length()-1));
  121. //请求实体(json/xml适用)
  122. StringEntity entity = new StringEntity(formData.substring(0,formData.length()-1), "GBK");
  123. entity.setContentType("application/x-www-form-urlencoded");
  124. httpPost.setEntity(entity);
  125. try {
  126. HttpResponse httpResponse = httpClient.execute(httpPost);
  127. int statusCode = httpResponse.getStatusLine().getStatusCode();
  128. if (statusCode == HttpStatus.SC_OK) {
  129. HttpEntity resEntity = httpResponse.getEntity();
  130. result = EntityUtils.toString(resEntity);
  131. //用json将中文解码
  132. JSONObject jo = JSONObject.parseObject(result);
  133. System.out.println(jo);
  134. if (jo.getBooleanValue("result")) {
  135. return jo.toString();
  136. }
  137. else {
  138. return jo.getString("list");
  139. }
  140. }
  141. } catch (Exception e) {
  142. e.printStackTrace();
  143. }
  144. return result;
  145. }
  146. /**
  147. * 获取诊断结果
  148. * @param companyId
  149. */
  150. public String policyResultApi(Integer companyId) {
  151. String result = "";
  152. String url = "http://snd.ideatob.com/mp/api/?apikey=snd_apis&at=12";
  153. Company company = companyService.findById(companyId);
  154. if (company != null){
  155. String passwd = SecureUtil.md5().digestHex(company.getId().toString());
  156. // String passwd = "e10adc3949ba59abbe56e057f20f883e";
  157. url += "&uid=" + companyId + "&passwd=" + passwd;
  158. result = httpClientUtil.sendHttpGet(url);
  159. }
  160. return result;
  161. }
  162. /**
  163. * 获取推荐项目申报
  164. * @param companyId
  165. */
  166. public String recommendProjectApi(Integer companyId) {
  167. String result = "";
  168. String url = "http://snd.ideatob.com/mp/api/?apikey=snd_apis&at=13";
  169. // Company company = companyService.findById(companyId);
  170. if (companyId != null){
  171. String passwd = SecureUtil.md5().digestHex(companyId.toString());
  172. // String passwd = "e10adc3949ba59abbe56e057f20f883e";
  173. url += "&uid=" + companyId + "&passwd=" + passwd;
  174. result = httpClientUtil.sendHttpGet(url);
  175. }
  176. return result;
  177. }
  178. /**
  179. * 获取项目申报详情
  180. * @param bno
  181. * @return
  182. */
  183. public String projectDetailApi(Integer bno) {
  184. String result = "";
  185. String url = "http://snd.ideatob.com/mp/api/?apikey=snd_apis&at=7";
  186. if (bno != null){
  187. url += "&bno="+bno;
  188. result = httpClientUtil.sendHttpGet(url);
  189. }
  190. return result;
  191. }
  192. /**
  193. * 获取单个项目自检测
  194. * @param companyId
  195. * @param bno
  196. */
  197. public String projectSelftestApi(Integer companyId, Integer bno) {
  198. String result = "";
  199. String url = "http://snd.ideatob.com/mp/api/?apikey=snd_apis&at=15";
  200. Company company = companyService.findById(companyId);
  201. if (company != null){
  202. String passwd = SecureUtil.md5().digestHex(company.getId().toString());
  203. // String passwd = "e10adc3949ba59abbe56e057f20f883e";
  204. url += "&uid=" + companyId + "&passwd=" + passwd + "&bno="+bno;
  205. result = httpClientUtil.sendHttpGet(url);
  206. }
  207. return result;
  208. }
  209. /**
  210. *
  211. * @return
  212. *
  213. */
  214. public String postEntity(CompanyPolicy companyPolicy){
  215. //公司基本信息
  216. Company company = companyService.findById(companyPolicy.getCid());
  217. CompanyInfoDto infoDto = new CompanyInfoDto();
  218. // infoDto.setLname(company.getLegal_representative()); //法人
  219. infoDto.setLname(company.getCompany_name()); //公司称呼
  220. infoDto.setBname(company.getCompany_name());
  221. infoDto.setLkey(company.getCompany_name());
  222. infoDto.setZw(company.getLr_position()); //法人职务
  223. infoDto.setIntro("诊断"); //简介
  224. infoDto.setFw(companyPolicy.getTechregion()); //服务领域
  225. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  226. try {
  227. //获取企业注册时间(就没有就按当前时间)
  228. String establishment_date;
  229. if (companyPolicy.getEstablishmentdate() != null && !companyPolicy.getEstablishmentdate().equals("")){
  230. establishment_date = companyPolicy.getEstablishmentdate();
  231. } else {
  232. establishment_date = sdf.format(new Date());
  233. }
  234. String date = sdf.format(sdf.parse(establishment_date)).replace("-","/");
  235. infoDto.setBdt(date); //注册时间
  236. } catch (ParseException e) {
  237. e.printStackTrace();
  238. }
  239. infoDto.setUid(company.getId());
  240. infoDto.setPassword(SecureUtil.md5().digestHex(company.getId().toString()));
  241. infoDto.setJgrd(companyPolicy.getCertified()); //已获认定
  242. infoDto.setIsord(companyPolicy.getIsocertified()); //ISO认定
  243. //诊断信息
  244. CompanyPolicyDto companyPolicyDto = new CompanyPolicyDto();
  245. // infoDto.setLname(company.getLegal_representative()); //法人
  246. // companyPolicyDto.setLkey(company.getCompany_name());
  247. // companyPolicyDto.setZw(company.getLr_position()); //法人职务
  248. // companyPolicyDto.setIntro("诊断"); //简介
  249. // companyPolicyDto.setFw(companyPolicy.getTechregion()); //服务领域
  250. // companyPolicyDto.setUid(41561);
  251. // companyPolicyDto.setPasswd("e10adc3949ba59abbe56e057f20f883e");
  252. // companyPolicyDto.setJgrd(companyPolicy.getCertified()); //已获认定
  253. // companyPolicyDto.setIsord(companyPolicy.getIsocertified()); //ISO认定
  254. // companyPolicyDto.setBname(company.getCompany_name());
  255. // companyPolicyDto.setBdt(data);
  256. companyPolicyDto.setA2(companyPolicy.getRegisteredcapital().intValue());//注册资本
  257. companyPolicyDto.setA3(companyPolicy.getTechregion());//技术领域
  258. companyPolicyDto.setA5(companyPolicy.getObriskinvestment() ?1:0);//是否引入风险投资
  259. companyPolicyDto.setA6(companyPolicy.getRegisteredtrademark());//已获商标
  260. companyPolicyDto.setA8(companyPolicy.getObillegal() ?1:0);//是否存重大安全、质量事故、环境违法、偷漏税等行为(近2年内)
  261. companyPolicyDto.setA9(companyPolicy.getWorkerquantity());//职工总数
  262. companyPolicyDto.setA10_1(companyPolicy.getTechnologistquantity());//科技人员
  263. companyPolicyDto.setA10_2(companyPolicy.getMasterquantity());//硕士以上人员数
  264. companyPolicyDto.setA12(companyPolicy.getOverseaspersonquantity());//留学归国人才数
  265. companyPolicyDto.setA18(companyPolicy.getAppliedintellectualproperty());//知识产权
  266. companyPolicyDto.setA19(companyPolicy.getInventionpatent());//已获得有效发明专利数
  267. companyPolicyDto.setA20(companyPolicy.getApplingintellectualproperty());//已申请知识产权数
  268. companyPolicyDto.setA21(companyPolicy.getTakedstandards());//主持或参加制定各类标准和技术规范数
  269. companyPolicyDto.setA22(companyPolicy.getAchievements());//近三年科技成果转化总数
  270. companyPolicyDto.setA23(companyPolicy.getProductevaluation());//近三年高品认定<br/>及新产品鉴定情况
  271. companyPolicyDto.setA24(companyPolicy.getTechnicalproject());//近三年承担的<br/>政府科技项目数
  272. companyPolicyDto.setA25(companyPolicy.getExaminingreport());//近三年获得的研发<br/>活动检验检测报告数
  273. companyPolicyDto.setA26(companyPolicy.getTechnologyreport());//近三年获得的研发<br/>活动科技查新报告数
  274. companyPolicyDto.setA27(companyPolicy.getFloorspace().intValue());//场地面积
  275. companyPolicyDto.setA28(companyPolicy.getEquipmentvalue().intValue());//设备原值
  276. companyPolicyDto.setA29(companyPolicy.getIacagreement());//产学研合作协议<br/>签订数
  277. companyPolicyDto.setA30(companyPolicy.getObsubsidiaryledgers() ?1:0);//是否编制研发费用辅助账
  278. companyPolicyDto.setA31(companyPolicy.getObadditionaldeduction()?1:0);//是否办理研发费用加计扣除
  279. companyPolicyDto.setA32(companyPolicy.getObaccountingsystem()?1:0);//是否建立了研发投入核算体系
  280. companyPolicyDto.setA33(companyPolicy.getObrewardsystem()?1:0);//是否建立人才引进及绩效评价奖励制度
  281. //近三年经营数据
  282. List<CompanyBrdinvestment> brdinvestmentList = companyPolicy.getCompanyBrdinvestments();
  283. int year = com.feilong.core.date.DateUtil.getYear(new Date());
  284. for (CompanyBrdinvestment brdinvestment : brdinvestmentList){
  285. if (brdinvestment.getYear() == year-1){
  286. companyPolicyDto.setA36(brdinvestment.getTotalsales().intValue());//近三年销售额2017年
  287. companyPolicyDto.setA39(brdinvestment.getRdspending().intValue());//近三年研发费用2017年
  288. companyPolicyDto.setA48(brdinvestment.getTotalassets().intValue());//近三年资产总额2017年
  289. companyPolicyDto.setA51(brdinvestment.getTotalliabilities().intValue());//近三年负债总额2017年
  290. companyPolicyDto.setA54(brdinvestment.getTotalprofits().intValue());//近三年利润总额2017年
  291. companyPolicyDto.setA57(brdinvestment.getTotalnetprofits().intValue());//近三年净利润额2017年
  292. companyPolicyDto.setA16_1(brdinvestment.getPsincome().intValue());//上年度高新技术<br/>产品(服务)收入
  293. companyPolicyDto.setA62(brdinvestment.getTotaltaxes().intValue());//上年度实际<br/>交税总额
  294. }
  295. if (brdinvestment.getYear() == year-2){
  296. companyPolicyDto.setA35(brdinvestment.getTotalsales().intValue());//近三年销售额2016年
  297. companyPolicyDto.setA38(brdinvestment.getRdspending().intValue());//近三年研发费用2016年
  298. companyPolicyDto.setA47(brdinvestment.getTotalassets().intValue());//近三年资产总额2016年
  299. companyPolicyDto.setA50(brdinvestment.getTotalliabilities().intValue());//近三年负债总额2016年
  300. companyPolicyDto.setA53(brdinvestment.getTotalprofits().intValue());//近三年利润总额2016年
  301. companyPolicyDto.setA56(brdinvestment.getTotalnetprofits().intValue());//近三年净利润额2016年
  302. }
  303. if (brdinvestment.getYear() == year-3){
  304. companyPolicyDto.setA34(brdinvestment.getTotalsales().intValue());//近三年销售额2015年
  305. companyPolicyDto.setA37(brdinvestment.getRdspending().intValue());//近三年研发费用2015年
  306. companyPolicyDto.setA46(brdinvestment.getTotalassets().intValue());//近三年资产总额2015年
  307. companyPolicyDto.setA49(brdinvestment.getTotalliabilities().intValue());//近三年负债总额2015年
  308. companyPolicyDto.setA52(brdinvestment.getTotalprofits().intValue());//近三年利润总额2015年
  309. companyPolicyDto.setA55(brdinvestment.getTotalnetprofits().intValue());//近三年净利润额2015年
  310. }
  311. }
  312. companyPolicyDto.setA45(companyPolicy.getExternalexpertsquantity());//外聘专家人数
  313. companyPolicyDto.setA60(companyPolicy.getObmainproductrelevant()?1:0);//申请获批知识产权是否与主要产品(服务)相关
  314. companyPolicyDto.setA61(companyPolicy.getObselfdevelopment()?1:0);//核心知识产权的获取方式是不是自主研发
  315. companyPolicyDto.setA63(companyPolicy.getObinternationalcooperation()?1:0);//是否开展了国际科技合作交流
  316. companyPolicyDto.setA64(companyPolicy.getObmanagementsystem()?1:0);//是否制定了企业研究开发的组织管理制度
  317. companyPolicyDto.setA65(companyPolicy.getObincentivesystem()?2:0);//是否建立了科技成果转化的组织实施与激励奖励制度
  318. companyPolicyDto.setA66(companyPolicy.getObopenplattform()?1:0);//是否建立开放式的创新创业平台
  319. companyPolicyDto.setA67(companyPolicy.getObeducationplan()?1:0);//是否建立了职工教育培训计划
  320. companyPolicyDto.setSf("江苏");
  321. companyPolicyDto.setCity("苏州");
  322. companyPolicyDto.setArea(company.getLocation());
  323. //过滤首字母小写
  324. String policyStr = JSONObject.toJSONString(companyPolicyDto, new PascalNameFilter());
  325. JSONObject policyObj = JSONObject.parseObject(policyStr);
  326. String infoDtoStr = JSON.toJSONString(infoDto);
  327. JSONObject jsonObject = JSONObject.parseObject(infoDtoStr);
  328. //将企业信息添加到诊断信息
  329. for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
  330. policyObj.put(entry.getKey(), entry.getValue());
  331. }
  332. return policyObj.toString();
  333. }
  334. /**
  335. * 保存评论满意度结果
  336. * @param diagnosticReport
  337. */
  338. public void savePolicyFeedback(DiagnosticReport diagnosticReport) {
  339. DiagnosticReport report = diagnosticReportService.findById(diagnosticReport.getId());
  340. report.setSatisfaction_score(diagnosticReport.getSatisfaction_score());
  341. report.setFeedback(diagnosticReport.getFeedback());
  342. diagnosticReportService.updateSelective(report);
  343. }
  344. /**
  345. * 保存诊断返回分数
  346. * @param flList
  347. */
  348. public Integer savePolicyResultData(List<PolicyResultDto> flList, String diagnosticScore, Integer companyId) {
  349. DiagnosticReport report = new DiagnosticReport();
  350. report.setDiagnostic_score(Double.parseDouble(diagnosticScore));
  351. report.setDiagnostic_no("SND" + new Date().getTime());
  352. report.setCompany_id(companyId);
  353. if (flList != null) {
  354. for (PolicyResultDto resultDto : flList) {
  355. if (resultDto.getLb().equals("主体基础")) {
  356. report.setMain_fondation(Double.parseDouble(resultDto.getCj()));
  357. }
  358. if (resultDto.getLb().equals("人才结构")) {
  359. report.setTalent_structure(Double.parseDouble(resultDto.getCj()));
  360. }
  361. if (resultDto.getLb().equals("营收投入")) {
  362. report.setRevenue_investment(Double.parseDouble(resultDto.getCj()));
  363. }
  364. if (resultDto.getLb().equals("知识产权")) {
  365. report.setIntellectual_property(Double.parseDouble(resultDto.getCj()));
  366. }
  367. if (resultDto.getLb().equals("研发管理")) {
  368. report.setDevelopment_management(Double.parseDouble(resultDto.getCj()));
  369. }
  370. }
  371. }
  372. diagnosticReportService.insertAndGetId(report);
  373. return report.getId();
  374. }
  375. /**
  376. * 是否有权限诊断
  377. * @param companyId
  378. * @return
  379. */
  380. public boolean isPermission(Integer companyId) {
  381. DiagnosticUserGroup userGroup = diagnosticUserGroupService.findByCompanyId(companyId);
  382. if (userGroup != null){
  383. return true;
  384. }
  385. return false;
  386. }
  387. }