ProjectApplicationService.java 51 KB

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