ProjectApplicationService.java 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123
  1. package platform.modules.company.service;
  2. import java.io.File;
  3. import java.text.SimpleDateFormat;
  4. import java.time.LocalDateTime;
  5. import java.time.format.DateTimeFormatter;
  6. import java.util.*;
  7. import java.util.concurrent.ExecutorService;
  8. import java.util.concurrent.Executors;
  9. import com.alibaba.fastjson.JSONObject;
  10. import com.aliyuncs.exceptions.ClientException;
  11. import com.xiaoleilu.hutool.util.StrUtil;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.apache.xmlbeans.impl.xb.xsdschema.Public;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.beans.factory.annotation.Value;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import org.springframework.ui.ModelMap;
  19. import com.github.pagehelper.PageHelper;
  20. import com.github.pagehelper.PageInfo;
  21. import platform.common.Constant;
  22. import platform.common.base.model.DictionaryItem;
  23. import platform.common.base.model.Template;
  24. import platform.common.base.service.BaseService;
  25. import platform.common.base.service.DictionaryItemService;
  26. import platform.common.base.service.TemplateService;
  27. import platform.common.exception.BaseException;
  28. import platform.common.util.*;
  29. import platform.modules.build.entity.Company;
  30. import platform.modules.build.service.CompanyService;
  31. import platform.modules.company.dao.ProjectApplicationDao;
  32. import platform.modules.company.dto.ProjectApplicationSearchCondition;
  33. import platform.modules.company.entity.*;
  34. import platform.modules.government.dao.ProjectDao;
  35. import platform.modules.government.dto.*;
  36. import platform.modules.government.entity.*;
  37. import platform.modules.government.service.*;
  38. import platform.modules.government.service.ProjectService;
  39. import platform.modules.sys.entity.Approval;
  40. import platform.modules.sys.entity.Group;
  41. import platform.modules.sys.entity.Message;
  42. import platform.modules.sys.entity.UserGroup;
  43. import platform.modules.sys.service.*;
  44. import tk.mybatis.mapper.entity.Example;
  45. import javax.annotation.Resource;
  46. /**
  47. * 项目申报Service
  48. *
  49. * @author yl
  50. */
  51. @Service
  52. @Transactional
  53. public class ProjectApplicationService extends BaseService<ProjectApplication> {
  54. @Value("${repositoryPath}")
  55. public String repositoryPath;
  56. final private String attachmentType = "annex_template";
  57. final private Integer annexTwoId = 18655;
  58. final private String annexTwoType = "annex_template_2";
  59. final private String annexTwoUrl = "/docs/annex_template/苏州高新区工业经济发展专项扶持资金申报材料目录.docx";
  60. final private String annexTwoName = "苏州高新区工业经济发展专项扶持资金申报材料目录";
  61. @Autowired
  62. private DictionaryItemService dictionaryItemService;
  63. @Autowired
  64. private CompanyOprationsInfoService companyOprationsInfoService;
  65. @Autowired
  66. private ProjectApplicationCompanyInfoService projectApplicationCompanyInfoService;
  67. @Autowired
  68. private ProjectApplicationOperationsInfoService projectApplicationOperationsInfoService;
  69. @Autowired
  70. private ProjectMaterialService projectMaterialService;
  71. @Autowired
  72. private ApprovalService approvalService;
  73. @Autowired
  74. private CompanyService companyService;
  75. @Autowired
  76. private ProjectService projectService;
  77. @Autowired
  78. private ProjectApplicationDao projectApplicationDao;
  79. @Autowired
  80. private ProjectApplicationService projectApplicationService;
  81. @Autowired
  82. private ProjectTypeService projectTypeService;
  83. @Autowired
  84. private ProjectDeclarationService projectDeclarationService;
  85. @Autowired
  86. private MessageService messageService;
  87. @Autowired
  88. private StreetService streetService;
  89. @Autowired
  90. private UserService userService;
  91. @Autowired
  92. private WaitToDoService waitToDoService;
  93. @Resource
  94. private ProjectDao projectDao;
  95. @Autowired
  96. private GroupService groupService;
  97. @Autowired
  98. private UserGroupService userGroupService;
  99. @Autowired
  100. private AttachmentService attachmentService;
  101. @Autowired
  102. private TemplateService templateService;
  103. public PageInfo<ProjectApplication> findPage(Integer pageNum, Integer pageSize, String keyword,
  104. ProjectApplicationSearchCondition searchCondition) {
  105. Example example = new Example(ProjectApplication.class);
  106. Example.Criteria criteria = example.createCriteria();
  107. criteria.andEqualTo("del_flag", 0);
  108. if (StringUtils.isNotBlank(searchCondition.getProject_name())) {
  109. criteria.andLike("project_name", "%" + searchCondition.getProject_name() + "%");
  110. }
  111. if (StringUtils.isNotBlank(searchCondition.getProject_type())) {
  112. criteria.andEqualTo("project_type", searchCondition.getProject_type());
  113. }
  114. if (ShiroUtils.getUserType().equals(Constant.UserType.COMPANY)) {
  115. Integer companyId = ShiroUtils.getCompanyId();
  116. if (null != companyId) {
  117. criteria.andEqualTo("company_id", companyId);
  118. }
  119. }
  120. if (ShiroUtils.getUserType().equals(Constant.UserType.STREET)) {
  121. Integer streetId = ShiroUtils.getStreetId();
  122. if (null != streetId) {
  123. criteria.andEqualTo("street_id", streetId);
  124. }
  125. }
  126. if (StringUtils.isNotBlank(searchCondition.getStartTime())) {
  127. criteria.andCondition("apply_date >= ", searchCondition.getStartTime().substring(0, 10));
  128. }
  129. if (StringUtils.isNotBlank(searchCondition.getEndTime())) {
  130. criteria.andCondition("apply_date <= ", searchCondition.getEndTime().substring(0, 10));
  131. }
  132. if (searchCondition.getProject_year() != null && !searchCondition.getProject_year().equals(""))
  133. criteria.andCondition("apply_date like", searchCondition.getProject_year() + "-%");
  134. //倒序
  135. example.setOrderByClause("create_time desc");
  136. PageHelper.startPage(pageNum, pageSize);
  137. List<ProjectApplication> applys = this.selectByExample(example);
  138. for (ProjectApplication projectApply : applys) {
  139. getFullInfo(projectApply);
  140. }
  141. return new PageInfo<ProjectApplication>(applys);
  142. }
  143. public ProjectApplication getFullInfo(ProjectApplication projectApply) {
  144. if (null != projectApply.getCompany_id()) {
  145. Company company = companyService.findById(projectApply.getCompany_id());
  146. projectApply.setCompany_name(company.getCompany_name());
  147. }
  148. if (null != projectApply.getProject_type()) {
  149. ProjectType type = projectTypeService.findById(projectApply.getProject_type());
  150. if (null != type) {
  151. String typeName = type.getType_name();
  152. projectApply.setProject_type_name(typeName);
  153. String super_type_name = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.PROJECT_APPLICATION_SUPER_TYPE, type.getSuper_type());
  154. projectApply.setProject_super_type_name(super_type_name);
  155. }
  156. }
  157. if (null != projectApply.getApply_status()) {
  158. String status_name = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.PROJECT_APPLY_STATUS, projectApply.getApply_status());
  159. projectApply.setApply_status_name(status_name);
  160. if (projectApply.getApply_status().equals(Constant.ProjectApplyStatus.PENDING_SUBMIT)
  161. || projectApply.getApply_status().equals(Constant.ProjectApplyStatus.REJECT)) {
  162. projectApply.setCanEdit(true);
  163. projectApply.setCanDelete(true);
  164. }
  165. }
  166. if (null != projectApply.getDeclaration_id()) {
  167. ProjectDeclaration dec = projectDeclarationService.findById(projectApply.getDeclaration_id());
  168. if (null != dec) {
  169. //项目大类
  170. String superType = dec.getProject_super_type();
  171. if (StringUtils.isNotBlank(superType)) {
  172. DictionaryItem superTypeItem = dictionaryItemService.findByTypeAndValue(Constant.DictionaryType.PROJECT_APPLICATION_SUPER_TYPE, superType);
  173. if (null != superTypeItem) {
  174. projectApply.setProject_super_type_name(superTypeItem.getName());
  175. }
  176. }
  177. //项目来源
  178. String source = dec.getProject_source();
  179. if (StringUtils.isNotBlank(source)) {
  180. DictionaryItem sourceItem = dictionaryItemService.findByTypeAndValue(Constant.DictionaryType.PROJECT_SOURCE, source);
  181. if (null != sourceItem) {
  182. projectApply.setProject_source_name(sourceItem.getName());
  183. }
  184. }
  185. }
  186. }
  187. return projectApply;
  188. }
  189. public ModelMap getDictInfo(ModelMap modelMap) {
  190. //查询币种单位数据
  191. List<DictionaryItem> currencyList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.CURRENCY_UNIT);
  192. modelMap.put("currencyList", currencyList);
  193. /*//项目类型
  194. List<DictionaryItem> projectTypeList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.PROJECT_APPLICATION_TYPE);
  195. modelMap.put("projectTypeList", projectTypeList);*/
  196. //项目申报时,项目类别
  197. if (null == modelMap.get("projectTypeList")) {
  198. if (null != modelMap.get("declaration_id")) {
  199. //项目类型
  200. Integer declarationId = Integer.valueOf(String.valueOf(modelMap.get("declaration_id")));
  201. if (declarationId > 0) {
  202. ProjectDeclaration dec = projectDeclarationService.findById(declarationId);
  203. if (null != dec) {
  204. String superType = dec.getProject_super_type();
  205. if (StringUtils.isNotBlank(superType)) {
  206. // List<ProjectType> projectTypeList = projectTypeService.findBySuperType(superType);
  207. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  208. int year = LocalDateTime.parse(dec.getApply_startdate(), formatter).getYear();
  209. List<ProjectType> projectTypeList = projectTypeService.findByYear(year);
  210. modelMap.put("projectTypeList", projectTypeList);
  211. }
  212. }
  213. }
  214. } else {
  215. if (modelMap.get("project_year") != null && !modelMap.get("project_year").equals("")) {
  216. List<ProjectType> projectTypeList = projectTypeService.findByYear(Integer.parseInt(modelMap.get("project_year").toString()));
  217. modelMap.put("projectTypeList", projectTypeList);
  218. } else {
  219. List<ProjectType> projectTypeList = projectTypeService.selectAllProjectType();
  220. modelMap.put("projectTypeList", projectTypeList);
  221. }
  222. }
  223. }
  224. //项目名称
  225. return modelMap;
  226. }
  227. /**
  228. * 已经申请的取项目申报的新数据,新增申请时根据Companyid查询
  229. *
  230. * @param companyId
  231. * @param apply
  232. * @return
  233. */
  234. public List<ProjectApplicationOperationsInfo> getOperationsInfo(Integer companyId, ProjectApplication apply) {
  235. if (null != apply) {
  236. //已经申请的取新数据
  237. List<ProjectApplicationOperationsInfo> infos = projectApplicationOperationsInfoService.findOperationsInfoByApply(apply, Constant.DictionaryType.PROJECT_APPLICATION);
  238. return infos;
  239. } else {
  240. List<ProjectApplicationOperationsInfo> operationsInfo = new ArrayList<ProjectApplicationOperationsInfo>();
  241. int year = com.feilong.core.date.DateUtil.getYear(new Date());
  242. for (int i = 1; i <= 3; i++) {
  243. int dataYear = year - i;
  244. ProjectApplicationOperationsInfo info = new ProjectApplicationOperationsInfo();
  245. info.setCid(companyId);
  246. info.setYear(String.valueOf(dataYear));
  247. //企业在数据填报处已经填报的经营信息,带出来
  248. CompanyOprationsInfo beforeInfo = companyOprationsInfoService.findCompanyOprationsByCidAndYear(companyId, String.valueOf(dataYear), Constant.DictionaryType.PROJECT_APPLICATION);
  249. if (null != beforeInfo) {
  250. info.setCurrOperationInfoId(beforeInfo.getId());
  251. if (beforeInfo.getOperation_income() != null) {
  252. info.setOperation_income(beforeInfo.getOperation_income().toString());
  253. }
  254. }
  255. operationsInfo.add(info);
  256. }
  257. return operationsInfo;
  258. }
  259. }
  260. private void saveMessage(ProjectApplication apply) {
  261. try {
  262. Message messages = new Message();
  263. messages.setApply_id(apply.getId());
  264. messages.setTitle("企业提交项目申报");
  265. ProjectDeclaration projectDeclaration = projectDeclarationService.findById(apply.getDeclaration_id());
  266. String projectName = projectDeclaration.getProject_name();
  267. SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
  268. String now = sdf2.format(new Date());
  269. String message = ShiroUtils.getUserName() + ",您好。您于“" + now + "”提交的“" + projectName + "项目”的申请已提交,进入审核流程。";
  270. messages.setContent(message);
  271. messages.setBusiness_type(Constant.Message_Business_type.PROJECT_APPLY);
  272. String[] streetArr = ShiroUtils.getCompanyId().toString().split(",");
  273. Set<String> set = new HashSet<>(Arrays.asList(streetArr));
  274. String[] streetArrs = set.toArray(new String[set.size()]);
  275. int[] streetArrInt = new int[streetArrs.length];
  276. for (int i = 0; i < streetArrs.length; i++) {
  277. streetArrInt[i] = Integer.parseInt(streetArrs[i]);
  278. }
  279. messageService.saveMessageAndPush(messages, streetArrInt, Constant.UserType.COMPANY);
  280. //发送短信
  281. Map<String, String> params = new HashMap<>();
  282. params.put("project_no", apply.getApply_no());
  283. params.put("apply_name", Constant.ProjectType.PROJECT_APPLICATION);
  284. String templatePatram = JSONObject.toJSONString(params);
  285. String templateCode = Constant.SMS_TemplateCode.RPOJECT_APPLY_SUBMIT;
  286. User companyAdmin = userService.findById(ShiroUtils.getUserId());
  287. AlibabaSMSUtil.sendSMS(
  288. companyAdmin.getPhone(), templateCode, Constant.SINGNAMW, templatePatram);
  289. Message messages1 = new Message();
  290. messages1.setApply_id(apply.getId());
  291. messages1.setTitle("提醒街道审核");
  292. Company company = companyService.findById(ShiroUtils.getCompanyId());
  293. Street street = streetService.findById(ShiroUtils.getStreetId());
  294. String message1 = street.getName() + ",您好。“" + company.getCompany_name() + "企业”的“" + projectName + "项目”申请需要您审核。谢谢。";
  295. messages1.setContent(message1);
  296. messages1.setBusiness_type(Constant.Message_Business_type.PROJECT_APPLY);
  297. int[] streetArrInt1 = new int[1];
  298. streetArrInt1[0] = ShiroUtils.getStreetId();
  299. messageService.saveMessageAndPush(messages1, streetArrInt1, Constant.UserType.STREET);
  300. List<User> users = userService.findUsersByStreetId(ShiroUtils.getStreetId());
  301. waitToDoService.completeAllTODO(apply.getId(), Constant.DictionaryType.PROJECT_APPLICATION);
  302. List<User> pusers = userService.findUsersByPermission("S_PROJECT_APPROVE");
  303. for (User user : users) {
  304. for (User puser : pusers) {
  305. if (Objects.equals(user.getId(), puser.getId())) {
  306. waitToDoService.newTODO("项目申报审核", "/projectApprove/approve/" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  307. Constant.DictionaryType.PROJECT_APPLICATION, apply.getApply_no(), user.getId().toString(), Constant.WaitToDo_IsSerial.IS_SERIAL, false);
  308. //给街道发送短信
  309. // String tempCode = Constant.SMS_TemplateCode.RPOJECT_APPROVAL_REMIND;
  310. // AlibabaSMSUtil.sendSMS(
  311. // puser.getPhone(), tempCode, Constant.SINGNAMW, templatePatram);
  312. }
  313. }
  314. }
  315. } catch (Exception e) {
  316. e.printStackTrace();
  317. }
  318. }
  319. public Boolean saveProjectApply(ProjectApplication apply) {
  320. User user = userService.findById(ShiroUtils.getUserId());
  321. apply.setCompany_id(user.getCompany_id());
  322. apply.setBuild_id(user.getBuild_id());
  323. apply.setStreet_id(user.getStreet_id());
  324. String no = GenerateNoUtil.generateProjectApplyNo(Constant.ProjectNoHeader.PROJECT_APPLICATION);
  325. apply.setApply_no(no);
  326. if (apply.getIsDraft().equals(Constant.IsDraft.DRAFT)) {
  327. //保存草稿
  328. apply.setApply_status(Constant.ProjectApplyStatus.PENDING_SUBMIT);
  329. } else if (apply.getIsDraft().equals(Constant.IsDraft.NOT_DRAFT)) {
  330. //提交申请
  331. apply.setApply_status(Constant.ProjectApplyStatus.IN_AUDIT);
  332. apply.setApprove_status(Constant.ProjectApplicationStatus.LOCAL_AUDIT);
  333. //申请日期
  334. apply.setApply_date(DateUtil.getTimeStringShort(new Date()));
  335. //提交申请,同步数据至企业信息表和企业经营数据表
  336. copyCompanyData(apply);
  337. }
  338. if (this.insertAndGetId(apply) > 0) {
  339. //保存企业基本信息
  340. if (null != apply.getCompanyInfo()) {
  341. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  342. companyInfo.setApply_id(apply.getId());
  343. companyInfo.setApply_type(Constant.DictionaryType.PROJECT_APPLICATION);
  344. projectApplicationCompanyInfoService.saveSelective(companyInfo);
  345. }
  346. //保存经营信息
  347. if (null != apply.getOperationsInfo() && apply.getOperationsInfo().size() > 0) {
  348. List<ProjectApplicationOperationsInfo> operationsInfoList = apply.getOperationsInfo();
  349. for (ProjectApplicationOperationsInfo info : operationsInfoList) {
  350. info.setApply_id(apply.getId());
  351. info.setApply_type(Constant.DictionaryType.PROJECT_APPLICATION);
  352. projectApplicationOperationsInfoService.saveSelective(info);
  353. }
  354. }
  355. //保存材料
  356. if (null != apply.getApplyMaterials() && apply.getApplyMaterials().size() > 0) {
  357. for (ProjectMaterial material : apply.getApplyMaterials()) {
  358. material.setApply_id(apply.getId());
  359. projectMaterialService.saveMaterial(material);
  360. }
  361. }
  362. if (apply.getIsDraft().equals(Constant.IsDraft.NOT_DRAFT)) {
  363. //直接提交申请,添加流程信息
  364. Approval approval = new Approval();
  365. approval.setApply_id(apply.getId());
  366. approval.setApproval_round(1);
  367. approval.setAfter_approvalstatus(Constant.ProjectApplicationStatus.LOCAL_AUDIT);
  368. String streetChecker = getLocalChecker(apply.getStreet_id());
  369. if (StringUtils.isNotBlank(streetChecker)) {
  370. approval.setNextchecker(streetChecker);
  371. } else {
  372. throw new BaseException("街道没有项目申报审核人员,请联系街道管理员配置。");
  373. }
  374. approval.setChecker(ShiroUtils.getUserId());
  375. approval.setType(Constant.DictionaryType.PROJECT_APPLICATION);
  376. approval.setOper_type(Constant.OperType.SUBMIT);
  377. approval.setDepartment(ShiroUtils.getUserEntity().getCompany_name());
  378. approvalService.insertAndGetId(approval);
  379. //发送消息
  380. new Thread(() -> saveMessage(apply), "sndMessage").start();
  381. }
  382. }
  383. return true;
  384. }
  385. //街道项目申报审核人
  386. public String getLocalChecker(Integer street_id) {
  387. String nextChecker = "";
  388. if (null != street_id) {
  389. List<User> users = userService.findUsersByStreetId(street_id);
  390. //List<User> pusers = userService.findUsersByPermission("S_PROJECT_APPROVE");
  391. //Group group = groupService.findByName(Constant.XMSBJDSLZ, null);
  392. Group group = groupService.findByNameAndUserType(Constant.XMSBJDSLZ, null, Constant.UserType.STREET, ShiroUtils.getStreetId());
  393. if (null == group) {
  394. throw new BaseException("操作失败,项目申报街道受理组没有该项目责任单位的审核人员,请联系管理员配置");
  395. }
  396. List<UserGroup> userGroups = userGroupService.findByGroupId(group.getId());
  397. for (User user : users) {
  398. //for (User puser : pusers) {
  399. //if (Objects.equals(user.getId(), puser.getId())) {
  400. for (UserGroup userGroup : userGroups) {
  401. if (Objects.equals(userGroup.getUser_id(), user.getId())) {
  402. nextChecker += user.getId() + ",";
  403. }
  404. }
  405. //}
  406. //}
  407. }
  408. }
  409. return nextChecker;
  410. }
  411. public Boolean updateProjectApply(ProjectApplication apply) {
  412. ProjectApplication oldApply = findById(apply.getId());
  413. apply.setApply_no(oldApply.getApply_no());
  414. if (apply.getIsDraft().equals(Constant.IsDraft.NOT_DRAFT)) {
  415. User user = userService.findById(ShiroUtils.getUserId());
  416. apply.setCompany_id(user.getCompany_id());
  417. apply.setBuild_id(user.getBuild_id());
  418. apply.setStreet_id(user.getStreet_id());
  419. //提交申请
  420. apply.setApply_status(Constant.ProjectApplyStatus.IN_AUDIT);
  421. apply.setApprove_status(Constant.ProjectApplicationStatus.LOCAL_AUDIT);
  422. //申请日期
  423. if (StringUtils.isBlank(apply.getApply_date())) {
  424. apply.setApply_date(DateUtil.getTimeStringShort(new Date()));
  425. }
  426. //提交申请,同步数据至企业信息表和企业经营数据表
  427. copyCompanyData(apply);
  428. saveMessage(apply);
  429. }
  430. if (this.updateSelective(apply) > 0) {
  431. //保存企业基本信息
  432. if (null != apply.getCompanyInfo()) {
  433. projectApplicationCompanyInfoService.updateSelective(apply.getCompanyInfo());
  434. }
  435. //保存经营信息
  436. if (null != apply.getOperationsInfo() && apply.getOperationsInfo().size() > 0) {
  437. List<ProjectApplicationOperationsInfo> operationsInfoList = apply.getOperationsInfo();
  438. for (ProjectApplicationOperationsInfo info : operationsInfoList) {
  439. projectApplicationOperationsInfoService.updateSelective(info);
  440. }
  441. }
  442. //删除原有材料
  443. projectMaterialService.deleteByApplyId(apply.getId());
  444. //保存材料
  445. if (null != apply.getApplyMaterials() && apply.getApplyMaterials().size() > 0) {
  446. for (ProjectMaterial material : apply.getApplyMaterials()) {
  447. material.setApply_id(apply.getId());
  448. Template template = templateService.findById(material.getTemplate_id());
  449. if (template == null) {
  450. material.setContent("annex_template");
  451. }
  452. projectMaterialService.saveMaterial(material);
  453. }
  454. }
  455. if (apply.getIsDraft().equals(Constant.IsDraft.NOT_DRAFT)) {
  456. //直接提交申请,添加流程信息
  457. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.PROJECT_APPLICATION);
  458. Approval approval = new Approval();
  459. approval.setApply_id(apply.getId());
  460. if (null != latestApproval) {
  461. //是编辑
  462. approval.setOper_type(Constant.OperType.EDIT);
  463. approval.setBefore_approvalstatus(latestApproval.getAfter_approvalstatus());
  464. approval.setApproval_round(latestApproval.getApproval_round() == null ? 1 : latestApproval.getApproval_round() + 1);
  465. } else {
  466. approval.setOper_type(Constant.OperType.SUBMIT);
  467. approval.setApproval_round(1);
  468. }
  469. approval.setAfter_approvalstatus(Constant.ProjectApplicationStatus.LOCAL_AUDIT);
  470. approval.setChecker(ShiroUtils.getUserId());
  471. User user = userService.findById(ShiroUtils.getUserId());
  472. Integer street_id = apply.getStreet_id() == null ? user.getStreet_id() : apply.getStreet_id();
  473. //approval.setNextchecker(getLocalChecker(street_id));
  474. String streetChecker = getLocalChecker(street_id);
  475. if (StringUtils.isNotBlank(streetChecker)) {
  476. approval.setNextchecker(streetChecker);
  477. } else {
  478. throw new BaseException("街道没有项目申报审核人员,请联系街道管理员配置。");
  479. }
  480. approval.setType(Constant.DictionaryType.PROJECT_APPLICATION);
  481. approval.setDepartment(ShiroUtils.getUserEntity().getCompany_name());
  482. approvalService.insertAndGetId(approval);
  483. //发送短信
  484. ExecutorService threadpool = Executors.newFixedThreadPool(1);
  485. threadpool.execute(() -> saveMessage(apply));
  486. }
  487. }
  488. return true;
  489. }
  490. private void copyCompanyData(ProjectApplication apply) {
  491. //同步企业基本信息
  492. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  493. Company preCompanyInfo = companyService.findById(companyInfo.getCompany_id());
  494. if (StringUtils.isNotBlank(companyInfo.getCompany_name())) {
  495. preCompanyInfo.setCompany_name(companyInfo.getCompany_name());
  496. }
  497. if (StringUtils.isNotBlank(companyInfo.getRegistration_address())) {
  498. preCompanyInfo.setRegistration_address(companyInfo.getRegistration_address());
  499. }
  500. if (null != companyInfo.getCurrency_unit()) {
  501. preCompanyInfo.setCurrency_unit(companyInfo.getCurrency_unit());
  502. }
  503. if (null != companyInfo.getRegistration_capital()) {
  504. preCompanyInfo.setRegistration_capital(companyInfo.getRegistration_capital());
  505. }
  506. if (StringUtils.isNotBlank(companyInfo.getLegal_representative())) {
  507. preCompanyInfo.setLegal_representative(companyInfo.getLegal_representative());
  508. }
  509. if (StringUtils.isNotBlank(companyInfo.getLr_position())) {
  510. preCompanyInfo.setLr_position(companyInfo.getLr_position());
  511. }
  512. companyService.updateSelective(preCompanyInfo);
  513. //同步企业营业收入
  514. List<ProjectApplicationOperationsInfo> operationsInfo = apply.getOperationsInfo();
  515. for (ProjectApplicationOperationsInfo info : operationsInfo) {
  516. if (null != info.getOperation_income()) {
  517. CompanyOprationsInfo preInfo = companyOprationsInfoService.findCompanyOprationsByCidAndYear(companyInfo.getCompany_id(), String.valueOf(com.feilong.core.date.DateUtil.getYear(new Date())), Constant.DictionaryType.PROJECT_APPLICATION);
  518. if (null != preInfo) {
  519. preInfo.setOperation_income(Double.parseDouble(info.getOperation_income()));
  520. companyOprationsInfoService.updateSelective(preInfo);
  521. }
  522. }
  523. }
  524. }
  525. public ModelMap getApplyInfo(Integer apply_id, ModelMap modelMap) {
  526. //申报详情
  527. ProjectApplication projectApply = this.findById(apply_id);
  528. Project project = new Project();
  529. project.setId(projectApply.getProject_id());
  530. project = projectDao.selectOne(project);
  531. modelMap.put("isTechnical", project.getIs_technical());
  532. modelMap.put("projectApply", projectApply);
  533. if (projectApply.getProject_type() != null) {
  534. List<Project> projects = projectService.findByType(projectApply.getProject_type().toString());
  535. modelMap.put("projectNameList", projects);
  536. }
  537. //项目类别
  538. if (projectApply.getDeclaration_id() != null) {
  539. //项目类型
  540. Integer declarationId = projectApply.getDeclaration_id();
  541. if (declarationId > 0) {
  542. ProjectDeclaration dec = projectDeclarationService.findById(declarationId);
  543. if (null != dec) modelMap.put("projectTypeList", projectTypeList(dec.getApply_startdate()));
  544. }
  545. }
  546. //企业信息
  547. ProjectApplicationCompanyInfo companyInfo = projectApplicationCompanyInfoService.findByApplyIdAndType(apply_id, Constant.DictionaryType.PROJECT_APPLICATION);
  548. //modelMap.put("companyInfo", companyInfo == null ? new ProjectApplicationCompanyInfo():companyInfo);
  549. if (companyInfo == null) {
  550. ProjectApplicationCompanyInfo company = new ProjectApplicationCompanyInfo();
  551. company.setIndustry_code(company.getIndustry_code());
  552. company.setIndustry_code(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.INDUSTRY_TYPE, company.getIndustry_code()));
  553. modelMap.put("companyInfo", company);
  554. } else {
  555. if (!Objects.equals(companyInfo.getIndustry_code(), "Empty")) {
  556. companyInfo.setIndustry_code(companyInfo.getIndustry_code());
  557. companyInfo.setIndustry_name(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.INDUSTRY_TYPE, companyInfo.getIndustry_code()));
  558. } else {
  559. companyInfo.setIndustry_name("其他");
  560. }
  561. modelMap.put("companyInfo", companyInfo);
  562. }
  563. //申报材料(模版)
  564. List<ProjectMaterial> materials = projectMaterialService.getAnnexMaterial(projectApply.getId());
  565. //附件
  566. materials.addAll(projectMaterialService.getApplyMaterials(projectApply));
  567. modelMap.put("applyMaterials", materials);
  568. //经营数据
  569. modelMap.put("operationsInfo", getOperationsInfo(null, projectApply));
  570. //申报流程
  571. List<Approval> approvalList = approvalService.getProjectApprovalList(apply_id);
  572. modelMap.put("approvalList", approvalList); //流程信息
  573. return modelMap;
  574. }
  575. /**
  576. * 获取年份申报大类
  577. *
  578. * @param apply_startdate
  579. * @return
  580. */
  581. private List<ProjectType> projectTypeList(String apply_startdate) {
  582. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  583. int year = LocalDateTime.parse(apply_startdate, formatter).getYear();
  584. return projectTypeService.findByYear(year);
  585. }
  586. //绑定数据codeName
  587. public ProjectApplication getFullApplicationInfo(ProjectApplication projectApply) {
  588. if (null != projectApply.getProject_type()) {
  589. /*String type_name = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.PROJECT_APPLICATION_TYPE, String.valueOf(projectApply.getProject_type()));
  590. projectApply.setProject_type_name(type_name);*/
  591. ProjectType type = projectTypeService.findById(projectApply.getProject_type());
  592. if (null != type) {
  593. String typeName = type.getType_name();
  594. projectApply.setProject_type_name(typeName);
  595. String super_type_name = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.PROJECT_APPLICATION_SUPER_TYPE, type.getSuper_type());
  596. projectApply.setProject_super_type_name(super_type_name);
  597. }
  598. }
  599. if (null != projectApply.getApply_status()) {
  600. String status_name = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.PROJECT_APPLY_STATUS, projectApply.getApply_status());
  601. projectApply.setApply_status_name(status_name);
  602. }
  603. if (null != projectApply.getApprove_status()) {
  604. String status_name = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.PROJECT_APPROVE_STATUS, projectApply.getApprove_status());
  605. projectApply.setApprove_status_name(status_name);
  606. }
  607. if (null != projectApply.getCompany_id() && StringUtils.isBlank(projectApply.getCompany_name())) {
  608. Company company = companyService.findById(projectApply.getCompany_id());
  609. if (null != company) {
  610. projectApply.setCompany_name(company.getCompany_name());
  611. }
  612. }
  613. return projectApply;
  614. }
  615. //是否可以申请项目,今年是否已经申请过互斥的项目,或这个项目已经申请过
  616. public Boolean canApplyProject(ProjectApplication apply) {
  617. Boolean flag = true;
  618. Integer company_id = ShiroUtils.getCompanyId();
  619. Integer project_id = apply.getProject_id();
  620. if (null != project_id) {
  621. Project project = projectService.findById(project_id);
  622. if (StringUtils.isNotBlank(project.getMutex())) {
  623. //今年已经申请过互斥的项目,不能再申请
  624. List<ProjectApplication> mutexApplys = projectApplicationDao.selectMutexApplications(company_id, project);
  625. if (null != mutexApplys && mutexApplys.size() > 0) {
  626. flag = false;
  627. }
  628. } else {
  629. //查找是否申请过本项目
  630. //20180816 临时去掉同一年同类型只能申请一次的限制
  631. /*List<ProjectApplication> applys = projectApplicationDao.selectApplicationsByCidAndPid(company_id, project_id);
  632. if (null != applys && applys.size() > 0) {
  633. flag = false;
  634. }*/
  635. flag = true;
  636. }
  637. }
  638. return flag;
  639. }
  640. public List<ApplicationDto> getStreetDeclaerNum(SearchCondition condition) {
  641. if (ShiroUtils.getUserType().equals(Constant.UserType.STREET)) {
  642. condition.setUser_type(Constant.UserType.STREET);
  643. condition.setStreet_id(ShiroUtils.getStreetId());
  644. }
  645. List<ApplicationDto> list = projectApplicationDao.getStreetDeclaerNum(condition);
  646. return list;
  647. }
  648. public List<ApplicationDto> getProjectCategoryRate(SearchCondition condition) {
  649. if (ShiroUtils.getUserType().equals(Constant.UserType.STREET)) {
  650. condition.setUser_type(Constant.UserType.STREET);
  651. condition.setStreet_id(ShiroUtils.getStreetId());
  652. }
  653. List<ApplicationDto> list = projectApplicationDao.getProjectCategoryRate(condition);
  654. return list;
  655. }
  656. //项目申报总数
  657. public int getProjectTotalNum() {
  658. int total = projectApplicationDao.getProjectTotalNum(new SearchCondition());
  659. return total;
  660. }
  661. //通过的项目申报
  662. public int getPassedProjectTotalNum() {
  663. SearchCondition condition = new SearchCondition();
  664. condition.setApprove_status(Integer.valueOf(Constant.ProjectApplicationStatus.APPROVED));
  665. int total = projectApplicationDao.getProjectTotalNum(condition);
  666. return total;
  667. }
  668. //发布的项目申报
  669. //2020.04.14修改 改为统计申请通过的数量 由excel导入
  670. public int getReleaseProjectTotalNum() {
  671. // Example example = new Example(ProjectDeclaration.class);
  672. // Example.Criteria criteria = example.createCriteria();
  673. // criteria.andEqualTo("del_flag", false);
  674. // criteria.andEqualTo("status", "1");
  675. // List<ProjectDeclaration> list = projectDeclarationService.selectByExample(example);
  676. Example example = new Example(ProjectApplication.class);
  677. Example.Criteria criteria = example.createCriteria();
  678. criteria.andEqualTo("del_flag", false);
  679. criteria.andNotEqualTo("apply_status", "0");
  680. criteria.andIsNotNull("pass");
  681. List<ProjectApplication> list = projectApplicationService.selectByExample(example);
  682. if (list != null && list.size() > 0) {
  683. return list.size();
  684. }
  685. return 0;
  686. }
  687. public ApplicationDto selectYearArray() {
  688. return projectApplicationDao.selectYearArray();
  689. }
  690. public int selectStreetReportingByYear(Street street, int i) {
  691. return projectApplicationDao.selectReportingByYear(street, i);
  692. }
  693. public int selectProjectReportingByYear(ProjectType projectType, int i) {
  694. SearchCondition condition = new SearchCondition();
  695. if (ShiroUtils.getUserType().equals(Constant.UserType.STREET)) {
  696. condition.setUser_type(Constant.UserType.STREET);
  697. condition.setStreet_id(ShiroUtils.getStreetId());
  698. }
  699. return projectApplicationDao.selectProjectReportingByYear(projectType, i, condition);
  700. }
  701. public ApplicationDto selectFilingSituation(Integer id, SearchCondition condition) {
  702. if (ShiroUtils.getUserType().equals(Constant.UserType.STREET)) {
  703. condition.setUser_type(Constant.UserType.STREET);
  704. condition.setStreet_id(ShiroUtils.getStreetId());
  705. }
  706. return projectApplicationDao.selectFilingSituation(id, condition);
  707. }
  708. public ApplicationDto getProjectByType(SearchCondition condition, Integer id) {
  709. if (ShiroUtils.getUserType().equals(Constant.UserType.STREET)) {
  710. condition.setUser_type(Constant.UserType.STREET);
  711. condition.setStreet_id(ShiroUtils.getStreetId());
  712. }
  713. return projectApplicationDao.getProjectByType(condition, id);
  714. }
  715. public List<ProjectApplication> canApplyProjectIntelligent(int companyId) {
  716. List<ProjectApplication> applications = projectApplicationDao.canApplyProjectIntelligent(companyId);
  717. return applications;
  718. }
  719. @Transactional(readOnly = true)
  720. public Integer getProjectNum() {
  721. Example example = new Example(ProjectApplication.class);
  722. Example.Criteria criteria = example.createCriteria();
  723. criteria.andEqualTo("del_flag", 0);
  724. criteria.andNotEqualTo("apply_status", 0);
  725. return this.selectByExample(example).size();
  726. }
  727. @Transactional(readOnly = true)
  728. public List<ProjectApplication> getProjectAcceptVolume(BusinessSearchDto businessSearchDto) {
  729. Example example = new Example(ProjectApplication.class);
  730. Example.Criteria criteria = example.createCriteria();
  731. criteria.andEqualTo("del_flag", 0);
  732. criteria.andNotEqualTo("apply_status", 0);
  733. if (businessSearchDto.getWeek()) {
  734. criteria.andBetween("create_time", DateUtil.getTimesWeekmorning(), DateUtil.getTimesWeeknight());
  735. }
  736. if (businessSearchDto.getMonth()) {
  737. criteria.andBetween("create_time", DateUtil.getTimesMonthmorning(), DateUtil.getTimesMonthnight());
  738. }
  739. return this.selectByExample(example);
  740. }
  741. public Integer getprojectDecNum(Integer departmentId) {
  742. Example example = new Example(ProjectDeclaration.class);
  743. Example.Criteria criteria = example.createCriteria();
  744. // criteria.andEqualTo("del_flag", 0);
  745. criteria.andEqualTo("status", 1);
  746. criteria.andEqualTo("department_id", departmentId);
  747. return projectDeclarationService.selectByExample(example).size();
  748. }
  749. public List<GovStatisticsDto> getProjectTypeRate(SearchCondition searchCondition) {
  750. return projectApplicationDao.getProjectTypeRate(searchCondition);
  751. }
  752. public List<GovStatisticsDto> getProjectResult(SearchCondition searchCondition) {
  753. return projectApplicationDao.getProjectResult(searchCondition);
  754. }
  755. public List<GovStatisticsDto> getProjectHandleCompare(SearchCondition searchCondition) {
  756. return projectApplicationDao.getProjectHandleCompare(searchCondition);
  757. }
  758. public List<ProjectApplication> findListByCondition(SearchCondition searchCondition) {
  759. return projectApplicationDao.findListByCondition(searchCondition);
  760. }
  761. public List<ProjectApplicationImportDto> importList() {
  762. return projectApplicationDao.importList();
  763. }
  764. /**
  765. * 保存项目申报草稿
  766. *
  767. * @param apply
  768. * @return
  769. */
  770. public Integer saveProjectApplyDraft(ProjectApplication apply) {
  771. User user = userService.findById(ShiroUtils.getUserId());
  772. apply.setCompany_id(user.getCompany_id());
  773. apply.setBuild_id(user.getBuild_id());
  774. apply.setStreet_id(user.getStreet_id());
  775. String no = GenerateNoUtil.generateProjectApplyNo(Constant.ProjectNoHeader.PROJECT_APPLICATION);
  776. apply.setApply_no(no);
  777. apply.setApply_status(Constant.ProjectApplyStatus.PENDING_SUBMIT);
  778. apply.setApply_date(DateUtil.getTimeStringShort(new Date()));
  779. //提交申请,同步数据至企业信息表和企业经营数据表
  780. copyCompanyData(apply);
  781. Integer applyId = this.insertAndGetId(apply);
  782. if (applyId > 0) {
  783. //保存企业基本信息
  784. if (null != apply.getCompanyInfo()) {
  785. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  786. companyInfo.setApply_id(apply.getId());
  787. companyInfo.setApply_type(Constant.DictionaryType.PROJECT_APPLICATION);
  788. projectApplicationCompanyInfoService.saveSelective(companyInfo);
  789. }
  790. //保存经营信息
  791. if (null != apply.getOperationsInfo() && apply.getOperationsInfo().size() > 0) {
  792. List<ProjectApplicationOperationsInfo> operationsInfoList = apply.getOperationsInfo();
  793. for (ProjectApplicationOperationsInfo info : operationsInfoList) {
  794. info.setApply_id(apply.getId());
  795. info.setApply_type(Constant.DictionaryType.PROJECT_APPLICATION);
  796. projectApplicationOperationsInfoService.saveSelective(info);
  797. }
  798. }
  799. }
  800. return applyId;
  801. }
  802. /**
  803. * 项目申报生成附件
  804. *
  805. * @param apply
  806. */
  807. public List<FileDown> createFile(ProjectApplication apply) {
  808. List<FileDown> fileDowns = new ArrayList<>();
  809. //生成附件一
  810. fileDowns.add(annexOne(apply));
  811. //附件2
  812. // fileDowns.add(attachmentService.findAnnex2("annex_template_2"));
  813. // fileDowns.add(new FileDown(annexTwoId, annexTwoName, annexTwoUrl, null));
  814. fileDowns.add(attachmentService.findAnnex2(annexTwoType));
  815. //附件3
  816. fileDowns.add(annexThree(apply));
  817. //附件4
  818. fileDowns.add(annexFour(apply));
  819. //模版文件
  820. List<ProjectMaterial> materials = projectMaterialService.findProjectMaterialByType(apply.getProject_id());
  821. for (ProjectMaterial material : materials) {
  822. Template template = new Template();
  823. template.setId(material.getTemplate_id());
  824. FileDown file = templateService.setFile(template);
  825. String fileUrl = CommonUtils.isNull(file) ? null : file.getFile_url();
  826. fileDowns.add(new FileDown(material.getTemplate_id(),
  827. material.getContent(), fileUrl, material.getTemplate_id() + ""));
  828. }
  829. return fileDowns;
  830. }
  831. /**
  832. * 附件4
  833. *
  834. * @param apply
  835. */
  836. private FileDown annexFour(ProjectApplication apply) {
  837. final String annexName = "申报专项资金项目承诺书";
  838. // String annexTempUrl = "/Users/xikaiwen/Downloads/annex4.docx";
  839. String annexTempUrl = repositoryPath + "/docs/annex_template/annex4.docx";
  840. //文件数据库存储路径
  841. String annexOutputUrl = getFilePath(annexName, "docs") + ".docx";
  842. // annexOutputUrl = "/Users/xikaiwen/Downloads/新附件4.docx";
  843. Map<String, String> dataMap = new HashMap<>();
  844. dataMap.put("companyName", apply.getCompanyInfo().getCompany_name());
  845. dataMap.put("customizeName", apply.getCustomize_name());
  846. String type = Constant.DictionaryType.PROJECT_APPLICATION_TYPE;
  847. dataMap.put("projectType", projectType(apply.getProject_type()) + "-" + apply.getProject_name());
  848. createAnnex(annexTempUrl, annexOutputUrl, dataMap);
  849. return getFileDown(annexName, annexOutputUrl);
  850. }
  851. /**
  852. * 附件3
  853. *
  854. * @param apply
  855. */
  856. private FileDown annexThree(ProjectApplication apply) {
  857. final String annexName = "苏州高新区工业经济发展专项扶持资金申请表";
  858. // String annexTempUrl = "/Users/xikaiwen/Downloads/annex3.docx";
  859. String annexTempUrl = repositoryPath + "/docs/annex_template/annex3.docx";
  860. //文件数据库存储路径
  861. String annexOutputUrl = getFilePath(annexName, "docs") + ".docx";
  862. // annexOutputUrl = "/Users/xikaiwen/Downloads/新附件3.docx";
  863. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  864. List<ProjectApplicationOperationsInfo> operationsInfo = apply.getOperationsInfo();
  865. Map<String, String> dataMap = new HashMap<>();
  866. dataMap.put("name", companyInfo.getCompany_name());
  867. dataMap.put("business", dictionaryItemValue(Constant.DictionaryType.INDUSTRY_TYPE, companyInfo.getIndustry_code()));
  868. dataMap.put("regAddress", companyInfo.getRegistration_address());
  869. dataMap.put("regCap", companyInfo.getRegistration_capital());
  870. dataMap.put("lr", companyInfo.getLegal_representative());
  871. dataMap.put("lrPosition", companyInfo.getLr_position());
  872. dataMap.put("lrPhone", companyInfo.getLr_phone());
  873. dataMap.put("contact", companyInfo.getContact());
  874. dataMap.put("position", companyInfo.getContact_position());
  875. dataMap.put("phone", companyInfo.getContact_phone());
  876. dataMap.put("ta", companyInfo.getTotal_assets());
  877. dataMap.put("fa", companyInfo.getFixed_assets());
  878. //币种
  879. dataMap.put("cn", currencyUnit(companyInfo.getCurrency_unit()));
  880. dataMap.put("faunit", currencyUnit(companyInfo.getFixed_assets_currency_unit()));
  881. dataMap.put("taunit", currencyUnit(companyInfo.getTotal_assets_currency_unit()));
  882. currencyUnit(companyInfo.getFixed_assets_currency_unit());
  883. //近三年营收情况
  884. for (int i = 0; i < 3; i++) {
  885. dataMap.put("oi" + i, operationsInfo.get(i).getOperation_income());
  886. dataMap.put("si" + i, operationsInfo.get(i).getSales_income());
  887. dataMap.put("pi" + i, operationsInfo.get(i).getProcessing_income());
  888. dataMap.put("st" + i, operationsInfo.get(i).getStorage_tax());
  889. dataMap.put("at" + i, operationsInfo.get(i).getAdded_value_tax());
  890. dataMap.put("bt" + i, operationsInfo.get(i).getBusiness_tax());
  891. dataMap.put("ct" + i, operationsInfo.get(i).getCorporate_income_tax());
  892. }
  893. dataMap.put("projectType", projectType(apply.getProject_type()) + "-" + apply.getProject_name());
  894. createAnnex(annexTempUrl, annexOutputUrl, dataMap);
  895. return getFileDown(annexName, annexOutputUrl);
  896. }
  897. private String currencyUnit(Integer currency_unit_id) {
  898. DictionaryItem item = dictionaryItemService.findById(currency_unit_id);
  899. if (item == null) {
  900. return "元";
  901. }
  902. if (item.getName().equals("人命币")) {
  903. return "元";
  904. }
  905. return item.getName();
  906. }
  907. /**
  908. * 附件1
  909. *
  910. * @param apply
  911. */
  912. private FileDown annexOne(ProjectApplication apply) {
  913. // final String annexName = "2019年苏州高新区工业经济发展专项扶持资金申请资料";
  914. final String annexName = "2020年苏州高新区工业经济发展专项扶持资金申报材料(封面)";
  915. // String annexTempUrl = "/Users/xikaiwen/Downloads/annex1.docx";
  916. String annexTempUrl = repositoryPath + "/docs/annex_template/annex1.docx";
  917. //文件数据库存储路径
  918. String annexOneOutputUrl = getFilePath(annexName, "docs") + ".docx";
  919. // annexOneOutputUrl = "/Users/xikaiwen/Downloads/新附件1.docx";
  920. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  921. Map<String, String> dataMap = new HashMap<>();
  922. dataMap.put("companyName", companyInfo.getCompany_name());
  923. dataMap.put("address", companyInfo.getRegistration_address());
  924. dataMap.put("customizeName", apply.getCustomize_name());
  925. dataMap.put("projectType", projectType(apply.getProject_type()) + "-" + apply.getProject_name());
  926. dataMap.put("phone", companyInfo.getContact_phone());
  927. dataMap.put("contact", companyInfo.getContact());
  928. dataMap.put("applyDate", DateUtil.getTimeStringShort(new Date()));
  929. createAnnex(annexTempUrl, annexOneOutputUrl, dataMap);
  930. return getFileDown(annexName, annexOneOutputUrl);
  931. }
  932. /**
  933. * 获取数据字典名字
  934. *
  935. * @param type
  936. * @param value
  937. */
  938. private String dictionaryItemValue(String type, String value) {
  939. DictionaryItem item = dictionaryItemService.findByTypeAndValue(type, value + "");
  940. return item.getName();
  941. }
  942. /**
  943. * 获取项目大类
  944. *
  945. * @param id
  946. */
  947. public String projectType(Integer id) {
  948. ProjectType type = projectTypeService.findById(id);
  949. return type.getType_name();
  950. }
  951. private FileDown getFileDown(String annexName, String annexOneOutputUrl) {
  952. //文件数据库存储路径
  953. String docUrl = StringUtils.replace(StrUtil.subSuf(annexOneOutputUrl, repositoryPath.length()), "\\", "/");
  954. //保存文件
  955. Attachment attachment = new Attachment();
  956. attachment.setFile_url(docUrl);
  957. attachment.setBusiness_type(attachmentType);
  958. // attachment.setBusiness_id(applyDraftId);
  959. attachment.setFile_name(annexName);
  960. attachmentService.insertAndGetId(attachment);
  961. return new FileDown(attachment.getId(), attachment.getFile_name(), attachment.getFile_url(), null);
  962. }
  963. /**
  964. * 生产附件
  965. *
  966. * @param annexOneTempUrl
  967. * @param annexOneOutputUrl
  968. * @param dataMap
  969. */
  970. private void createAnnex(String annexOneTempUrl, String annexOneOutputUrl, Map<String, String> dataMap) {
  971. BokeWordUtils.changWord(annexOneTempUrl, annexOneOutputUrl, dataMap, null);
  972. }
  973. public String getFilePath(String sourceFileName, String typeFolder) {
  974. String baseFolder = repositoryPath + File.separator + typeFolder;
  975. Date nowDate = new Date();
  976. // yyyy/MM/dd
  977. String fileFolder = baseFolder + File.separator + com.xiaoleilu.hutool.date.DateUtil.format(nowDate, "yyyy")
  978. + File.separator + com.xiaoleilu.hutool.date.DateUtil.format(nowDate, "MM") + File.separator
  979. + com.xiaoleilu.hutool.date.DateUtil.format(nowDate, "dd");
  980. File file = new File(fileFolder);
  981. if (!file.isDirectory()) {
  982. // 如果目录不存在,则创建目录
  983. file.mkdirs();
  984. }
  985. // 生成新的文件名
  986. String fileName = com.xiaoleilu.hutool.date.DateUtil.format(nowDate, "yyyyMMddHHmmss") + sourceFileName;
  987. return fileFolder + File.separator + fileName;
  988. }
  989. /**
  990. * 项目申报汇总
  991. *
  992. * @param paramApplication
  993. * @return
  994. */
  995. public List<ApplicationDto> findProjectApplicationSynthesis(ParamApplication paramApplication) {
  996. return projectApplicationDao.findProjectApplicationSynthesis(paramApplication);
  997. }
  998. }