StockLandService.java 69 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630
  1. package platform.modules.company.service;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import org.springframework.ui.ModelMap;
  11. import org.springframework.web.multipart.MultipartFile;
  12. import platform.common.Constant;
  13. import platform.common.base.model.DictionaryItem;
  14. import platform.common.base.service.BaseService;
  15. import platform.common.base.service.DictionaryItemService;
  16. import platform.common.exception.BaseException;
  17. import platform.common.util.*;
  18. import platform.modules.build.entity.Company;
  19. import platform.modules.build.service.CompanyService;
  20. import platform.modules.company.dao.StockLandDao;
  21. import platform.modules.company.dto.ProcessNodeDto;
  22. import platform.modules.company.dto.StockLandApprovalDto;
  23. import platform.modules.company.entity.ProjectApplicationCompanyInfo;
  24. import platform.modules.company.entity.StockLand;
  25. import platform.modules.company.entity.StockLandMaterial;
  26. import platform.modules.government.dao.AttachmentDao;
  27. import platform.modules.government.dto.GovStatisticsDto;
  28. import platform.modules.government.dto.SearchCondition;
  29. import platform.modules.government.entity.Attachment;
  30. import platform.modules.government.entity.FileDown;
  31. import platform.modules.government.entity.User;
  32. import platform.modules.government.service.AttachmentService;
  33. import platform.modules.government.service.StreetService;
  34. import platform.modules.government.service.UserService;
  35. import platform.modules.sys.entity.Approval;
  36. import platform.modules.sys.entity.Department;
  37. import platform.modules.sys.entity.Group;
  38. import platform.modules.sys.entity.Message;
  39. import platform.modules.sys.entity.UserGroup;
  40. import platform.modules.sys.service.*;
  41. import platform.modules.sys.web.ResponseMessage;
  42. import tk.mybatis.mapper.entity.Example;
  43. import java.io.BufferedInputStream;
  44. import java.io.BufferedOutputStream;
  45. import java.io.File;
  46. import java.io.FileOutputStream;
  47. import java.util.*;
  48. /**
  49. * 存量用地Service
  50. * @author hp
  51. *
  52. */
  53. @Service
  54. @Transactional
  55. public class StockLandService extends BaseService<StockLand> {
  56. private static final Logger logger = LoggerFactory.getLogger(StockLandService.class);
  57. @Autowired
  58. private StockLandDao stockLandDao;
  59. @Autowired
  60. private DepartmentService departmentService;
  61. @Autowired
  62. private DictionaryItemService dictionaryItemService;
  63. @Autowired
  64. private CompanyService companyService;
  65. @Autowired
  66. private StockLandMaterialService stockLandMaterialService;
  67. @Autowired
  68. private AttachmentService attachmentService;
  69. @Autowired
  70. private UserService userService;
  71. @Autowired
  72. private ApprovalService approvalService;
  73. @Autowired
  74. GroupService groupService;
  75. @Autowired
  76. UserGroupService userGroupService;
  77. @Autowired
  78. AttachmentDao attachmentDao;
  79. @Autowired
  80. MessageService messageService;
  81. @Autowired
  82. private StreetService streetService;
  83. @Autowired
  84. private ProjectApplicationCompanyInfoService projectApplicationCompanyInfoService;
  85. @Autowired
  86. private WaitToDoService waitToDoService;
  87. @Transactional(readOnly = true)
  88. public PageInfo<StockLand> findPage(Integer pageNum, Integer pageSize, String param,StockLand searchCondition) throws Exception {
  89. Example example = new Example(StockLand.class);
  90. Example.Criteria criteria = example.createCriteria();
  91. criteria.andEqualTo("del_flag", 0);
  92. if (StringUtils.isNotBlank(param)) {
  93. criteria.andLike("apply_no", "%" + WebUtil.covertData(param) + "%");
  94. }
  95. if(StringUtils.isNotBlank(searchCondition.getApply_type())) {
  96. criteria.andEqualTo("apply_type", searchCondition.getApply_type());
  97. }
  98. if(StringUtils.isNotBlank(searchCondition.getApply_status())) {
  99. criteria.andEqualTo("apply_status", searchCondition.getApply_status());
  100. }
  101. if(ShiroUtils.getUserType().equals(Constant.UserType.COMPANY)){
  102. Integer companyId = ShiroUtils.getCompanyId();
  103. if(null != companyId) {
  104. criteria.andEqualTo("company_id", companyId);
  105. }
  106. }
  107. if(ShiroUtils.getUserType().equals(Constant.UserType.STREET)){
  108. Integer streetId = ShiroUtils.getStreetId();
  109. if(null != streetId) {
  110. criteria.andEqualTo("street_id", streetId);
  111. }
  112. }
  113. if(isLandLord()) {
  114. criteria.andEqualTo("create_by", ShiroUtils.getUserId());
  115. }
  116. //倒序
  117. example.setOrderByClause("create_time desc");
  118. PageHelper.startPage(pageNum, pageSize);
  119. List<StockLand> landApplys = this.selectByExample(example);
  120. for(StockLand stockLand:landApplys) {
  121. getFullLandInfo(stockLand);
  122. }
  123. return new PageInfo<StockLand>(landApplys);
  124. }
  125. private boolean isLandLord() {
  126. if(userService.hasRole(Constant.RoleName.LANDLORD)) {
  127. return true;
  128. }
  129. return false;
  130. }
  131. //获取存量用地申请codename,公司名称,状态名称等数据
  132. public StockLand getFullLandInfo(StockLand stockLand) {
  133. if(StringUtils.isNotBlank(stockLand.getApply_status())) {
  134. stockLand.setApply_status_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPLY_STATUS, stockLand.getApply_status()));
  135. //可否编辑,可否删除
  136. if(stockLand.getApply_status().equals(Constant.LandApplyStatus.REJECT)) {
  137. if(null != stockLand.getCreate_by() && stockLand.getCreate_by().equals(ShiroUtils.getUserId())) {
  138. stockLand.setCanEdit(true);
  139. stockLand.setCanDelete(true);
  140. }
  141. }else if(stockLand.getApply_status().equals(Constant.LandApplyStatus.PENDING_SUBMIT)) {
  142. if(null != stockLand.getCreate_by() && stockLand.getCreate_by().equals(ShiroUtils.getUserId())) {
  143. stockLand.setCanEdit(true);
  144. stockLand.setCanDelete(true);
  145. }
  146. }
  147. }
  148. if(StringUtils.isNotBlank(stockLand.getApply_type())) {
  149. stockLand.setApply_type_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND, stockLand.getApply_type()));
  150. }
  151. if(StringUtils.isNotBlank(stockLand.getApprove_status())) {
  152. //街道可以看见临时状态
  153. if(ShiroUtils.getUserType().equals(Constant.UserType.STREET) &&
  154. StringUtils.isNotBlank(stockLand.getTemporary_state())) {
  155. stockLand.setApprove_status_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS, stockLand.getTemporary_state()));
  156. }else {
  157. stockLand.setApprove_status_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS, stockLand.getApprove_status()));
  158. }
  159. }
  160. if(null != stockLand.getCompany_id()) {
  161. Company company = companyService.findById(stockLand.getCompany_id());
  162. if(null != company) {
  163. stockLand.setCompany_name(company.getCompany_name());
  164. }
  165. }
  166. if(null != stockLand.getBuilding_street_id()) {
  167. try {
  168. String streetName = streetService.getStreetName(stockLand.getBuilding_street_id());
  169. if(StringUtils.isNotBlank(streetName)) {
  170. stockLand.setBuilding_street_name(streetName);
  171. }
  172. } catch (Exception e) {
  173. // TODO Auto-generated catch block
  174. e.printStackTrace();
  175. }
  176. }
  177. if(StringUtils.isNotBlank(stockLand.getSummary_procedure())) {
  178. String[] summary_procedure_types = stockLand.getSummary_procedure().split(",");
  179. String summary_procedure_str = "";
  180. for(String type : summary_procedure_types) {
  181. summary_procedure_str += dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_SUMMARY_PROCEDURE_TYPE, type) + ",";
  182. }
  183. summary_procedure_str = summary_procedure_str.substring(0, summary_procedure_str.length()-1);
  184. stockLand.setSummary_procedure_str(summary_procedure_str);
  185. }
  186. String apply_time = this.getApplyDate(stockLand.getId());
  187. if(null != apply_time) {
  188. //申请时间
  189. stockLand.setApply_time(apply_time);
  190. }
  191. return stockLand;
  192. }
  193. //获取申请日期
  194. private String getApplyDate(Integer id) {
  195. return stockLandDao.getApplyDate(id);
  196. }
  197. //获取下拉框的值列表
  198. public ModelMap getDictInfo(ModelMap modelMap) {
  199. List<DictionaryItem> applyTypes = dictionaryItemService.findListByTypeName(Constant.DictionaryType.STOCKLAND);
  200. List<DictionaryItem> applyStatus = dictionaryItemService.findListByTypeName(Constant.DictionaryType.STOCKLAND_APPLY_STATUS);
  201. List<DictionaryItem> approveStatus = dictionaryItemService.findListByTypeName(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS);
  202. List<DictionaryItem> processStatus = dictionaryItemService.findListByTypeName(Constant.DictionaryType.PROCESS_STATUS);
  203. List<DictionaryItem> summaryProcedureType = dictionaryItemService.findListByTypeName(Constant.DictionaryType.STOCKLAND_SUMMARY_PROCEDURE_TYPE);
  204. modelMap.put("applyTypeList", applyTypes);
  205. modelMap.put("applyStatusList", applyStatus);
  206. modelMap.put("approveStatusList", approveStatus);
  207. modelMap.put("processStatusList", processStatus);
  208. modelMap.put("summaryProcedureTypeList", summaryProcedureType);
  209. return modelMap;
  210. }
  211. //新增用地申请保存
  212. @Transactional
  213. public Boolean saveLandApply(StockLand apply) {
  214. //根据工作组名称查出工作组
  215. Integer streetId = ShiroUtils.getStreetId();
  216. if(null != apply.getBuilding_street_id()) {
  217. streetId = apply.getBuilding_street_id();
  218. }
  219. Group group = groupService.findByNameAndUserType(Constant.HGXSHXZ, null,Constant.UserType.STREET,streetId);
  220. String nextChecker = "";
  221. List<UserGroup> list = new ArrayList<UserGroup>();
  222. //如果不为空
  223. if(null != group){
  224. //根据工作组id查出UserGroup
  225. list = userGroupService.findByGroupId(group.getId());
  226. if(null == list || list.size()==0) {
  227. throw new BaseException("所属街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  228. }
  229. //构建一个StringBuffer 存放下一审核人id
  230. StringBuffer sb = new StringBuffer("");
  231. for (UserGroup userGroup: list) {
  232. Integer userId = userGroup.getUser_id();
  233. User user = userService.findById(userId);
  234. if(null == user.getApprove_level()){
  235. throw new BaseException("所属街道工业用地合规性审核组没有配置相应层级的人员,请联系街道管理员配置!");
  236. }
  237. sb.append(userId+",");
  238. }
  239. nextChecker = sb.toString();
  240. }else {
  241. throw new BaseException("所属街道还没有工业用地合规性审核组进行用地审核,请联系街道管理员配置!");
  242. }
  243. apply.setStreet_id(ShiroUtils.getStreetId());
  244. if(null == apply.getBuilding_street_id()) {
  245. apply.setBuilding_street_id(ShiroUtils.getStreetId());
  246. }
  247. String no = GenerateNoUtil.generateStocklandApplyNo();
  248. apply.setApply_no(no);
  249. //直接提交才有流程变化
  250. if(apply.getIsDraft().equals(Constant.IsDraft.DRAFT)){
  251. apply.setApply_status(Constant.LandApplyStatus.PENDING_SUBMIT);
  252. }else if(apply.getIsDraft()==Constant.IsDraft.NOT_DRAFT) {
  253. //审核流程变化
  254. apply.setApply_status(Constant.LandApplyStatus.IN_AUDIT);
  255. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  256. }
  257. if (this.insertAndGetId(apply) > 0) {
  258. //保存企业基本信息
  259. if(null != apply.getCompanyInfo()) {
  260. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  261. companyInfo.setApply_id(apply.getId());
  262. companyInfo.setCompany_id(apply.getCompany_id());
  263. companyInfo.setApply_type(Constant.DictionaryType.STOCKLAND);
  264. projectApplicationCompanyInfoService.saveSelective(companyInfo);
  265. }
  266. //保存材料
  267. if(null != apply.getApplyMaterials() && apply.getApplyMaterials().size()>0) {
  268. for(StockLandMaterial material : apply.getApplyMaterials()) {
  269. material.setApply_id(apply.getId());
  270. stockLandMaterialService.saveMaterial(material);
  271. }
  272. }
  273. if(null != apply.getOtherMaterials() && apply.getOtherMaterials().size()>0) {
  274. for(StockLandMaterial material : apply.getOtherMaterials()) {
  275. if(null != material.getFileDown() && null != material.getFileDown().getFile_id()) {
  276. //空行不保存
  277. material.setMaterial_type(Constant.LandApplyMaterialType.OTHER_MATERIAL);
  278. material.setApply_id(apply.getId());
  279. stockLandMaterialService.saveMaterial(material);
  280. }
  281. }
  282. }
  283. if(StringUtils.isNotBlank(apply.getSummary_procedure())) {
  284. //简易程序材料
  285. if(null != apply.getSummaryMaterials() && apply.getSummaryMaterials().size()>0) {
  286. for(StockLandMaterial material : apply.getSummaryMaterials()) {
  287. if(null != material.getFileDown() && null != material.getFileDown().getFile_id()) {
  288. material.setMaterial_type(Constant.LandApplyMaterialType.SUMMARY_MATERIAL);
  289. material.setApply_id(apply.getId());
  290. stockLandMaterialService.saveMaterial(material);
  291. }
  292. }
  293. }
  294. }
  295. //直接提交才有流程变化
  296. if(apply.getIsDraft().equals(Constant.IsDraft.NOT_DRAFT)) {
  297. //审核流
  298. Approval approval = new Approval();
  299. approval.setApply_id(apply.getId());
  300. approval.setBefore_approvalstatus(Constant.LandApplyStatus.PENDING_SUBMIT);
  301. approval.setApproval_round(1);
  302. approval.setAfter_approvalstatus(Constant.LandApproveStatus.LOCAL_AUDIT);
  303. approval.setChecker( ShiroUtils.getUserId());
  304. approval.setType(Constant.DictionaryType.STOCKLAND);
  305. approval.setOper_type(Constant.OperType.SUBMIT);
  306. approval.setDepartment(ShiroUtils.getUserEntity().getCompany_name());
  307. approval.setNextchecker(nextChecker);
  308. sendAuditMessage(apply,Constant.UserType.STREET,ShiroUtils.getStreetId(),getNextCheckersByLevel(list));
  309. approvalService.insertAndGetId(approval);
  310. //新增待办
  311. String handler = getNextCheckersIdsByLevelAndIdsStr(nextChecker);
  312. waitToDoService.newTODO("存量用地审核", "/stockLand/approvePage/" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  313. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  314. }
  315. return true;
  316. }
  317. return false;
  318. }
  319. public List<Integer> getNextCheckersByLevel(List<UserGroup> list) {
  320. List<Integer> checkerIds = new ArrayList<Integer>();
  321. int level = 0;
  322. for(UserGroup gUser : list) {
  323. if(null != gUser.getApprove_level() && gUser.getApprove_level() > level) {
  324. level = gUser.getApprove_level();
  325. }
  326. }
  327. for(UserGroup user : list) {
  328. if(null != user.getApprove_level() && user.getApprove_level().equals(level)) {
  329. checkerIds.add(user.getUser_id());
  330. }
  331. }
  332. return checkerIds;
  333. }
  334. //找到审核人里面下一级要审核的所有人员
  335. public List<Integer> getNextCheckersByLevelAndIdsStr(String userIds) {
  336. List<Integer> checkerIds = new ArrayList<Integer>();
  337. int level = 0;
  338. if(StringUtils.isNotBlank(userIds)) {
  339. for(String id : userIds.split(",")) {
  340. User gUser = userService.findById(Integer.valueOf(id));
  341. if(null != gUser.getApprove_level() && gUser.getApprove_level() > level) {
  342. level = gUser.getApprove_level();
  343. }
  344. }
  345. for(String id : userIds.split(",")) {
  346. User gUser = userService.findById(Integer.valueOf(id));
  347. if(null != gUser.getApprove_level() && gUser.getApprove_level().equals(level)) {
  348. checkerIds.add(Integer.valueOf(id));
  349. }
  350. }
  351. }
  352. return checkerIds;
  353. }
  354. //找到审核人里面下一级要审核的所有人员id,字符串
  355. public String getNextCheckersIdsByLevelAndIdsStr(String userIds) {
  356. List<Integer> checkerIds = new ArrayList<Integer>();
  357. int level = 0;
  358. if(StringUtils.isNotBlank(userIds)) {
  359. for(String id : userIds.split(",")) {
  360. User gUser = userService.findById(Integer.valueOf(id));
  361. if(null != gUser.getApprove_level() && gUser.getApprove_level() > level) {
  362. level = gUser.getApprove_level();
  363. }
  364. }
  365. for(String id : userIds.split(",")) {
  366. User gUser = userService.findById(Integer.valueOf(id));
  367. if(null != gUser.getApprove_level() && gUser.getApprove_level().equals(level)) {
  368. checkerIds.add(Integer.valueOf(id));
  369. }
  370. }
  371. }
  372. return StringUtils.join(checkerIds, ",");
  373. }
  374. /**
  375. * 发送消息审核消息
  376. * @param apply
  377. * @param userType
  378. * @param departmentId
  379. */
  380. public void sendAuditMessage(StockLand apply, Integer userType, Integer departmentId, List<Integer> pushUserIds) {
  381. if(null != pushUserIds && pushUserIds.size()>0) {
  382. apply = this.findLandApplyById(apply.getId());
  383. Message message = getDefaultAuditMessage(apply);
  384. message.setBusiness_type(Constant.Message_Business_type.STOCKLAND);
  385. message.setApply_id(apply.getId());
  386. messageService.saveMessageAndPushToUser(message, pushUserIds,userType);
  387. }
  388. }
  389. //编辑申请
  390. public Boolean updateLandApply(StockLand apply) {
  391. //直接提交才有流程变化
  392. if(apply.getIsDraft()==Constant.IsDraft.NOT_DRAFT) {
  393. if(null == apply.getBuilding_street_id()) {
  394. apply.setBuilding_street_id(ShiroUtils.getStreetId());
  395. }
  396. //审核流程变化
  397. apply.setApply_status(Constant.LandApplyStatus.IN_AUDIT);
  398. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  399. // 审核流
  400. Approval latestApproval = approvalService.getLatestApproval(apply.getId(),Constant.DictionaryType.STOCKLAND);
  401. Approval approval = new Approval();
  402. approval.setApply_id(apply.getId());
  403. if(null != latestApproval) {
  404. approval.setBefore_approvalstatus(latestApproval.getAfter_approvalstatus());
  405. approval.setApproval_round(latestApproval.getApproval_round()==null?1:latestApproval.getApproval_round()+1);
  406. approval.setOper_type(Constant.OperType.EDIT);
  407. }else {
  408. approval.setBefore_approvalstatus(Constant.LandApplyStatus.PENDING_SUBMIT);
  409. approval.setApproval_round(1);
  410. approval.setOper_type(Constant.OperType.SUBMIT);
  411. }
  412. approval.setAfter_approvalstatus(Constant.LandApproveStatus.LOCAL_AUDIT);
  413. approval.setChecker(ShiroUtils.getUserId());
  414. approval.setType(Constant.DictionaryType.STOCKLAND);
  415. approval.setDepartment(ShiroUtils.getUserEntity().getCompany_name());
  416. //根据工作组名称查出工作组
  417. Integer streetId = ShiroUtils.getStreetId();
  418. if(null != apply.getBuilding_street_id()) {
  419. streetId = apply.getBuilding_street_id();
  420. }
  421. Group group = groupService.findByNameAndUserType(Constant.HGXSHXZ, null,Constant.UserType.STREET,streetId);
  422. //如果不为空
  423. if(null != group){
  424. //根据工作组id查出UserGroup
  425. List<UserGroup> list = userGroupService.findByGroupId(group.getId());
  426. if(null == list || list.size()==0) {
  427. throw new BaseException("所属街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  428. }
  429. //构建一个StringBuffer 存放下一审核人id
  430. StringBuffer sb = new StringBuffer("");
  431. for (UserGroup userGroup: list) {
  432. Integer userId = userGroup.getUser_id();
  433. User user = userService.findById(userId);
  434. if(null == user.getApprove_level()){
  435. throw new BaseException("所属街道工业用地合规性审核组没有配置相应层级的人员,请联系街道管理员配置!");
  436. }
  437. sb.append(userId+",");
  438. }
  439. approval.setNextchecker(sb.toString());
  440. sendAuditMessage(apply,Constant.UserType.STREET,ShiroUtils.getStreetId(),getNextCheckersByLevel(list));
  441. //新增待办
  442. String handler = getNextCheckersIdsByLevelAndIdsStr(approval.getNextchecker());
  443. waitToDoService.newTODO("存量用地审核", "/stockLand/approvePage/" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  444. Constant.DictionaryType.STOCKLAND, apply.getApply_no(),handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  445. }else {
  446. throw new BaseException("所属街道还没有工业用地合规性审核组进行用地审核,请联系街道管理员配置!");
  447. }
  448. approvalService.saveSelective(approval);
  449. }
  450. if (this.updateSelective(apply) > 0) {
  451. //更新企业基本信息
  452. if(null != apply.getCompanyInfo()) {
  453. ProjectApplicationCompanyInfo companyInfo = apply.getCompanyInfo();
  454. projectApplicationCompanyInfoService.updateSelective(companyInfo);
  455. }
  456. if(null != apply.getApplyMaterials() && apply.getApplyMaterials().size()>0) {
  457. for(StockLandMaterial material : apply.getApplyMaterials()) {
  458. if(null == material.getId()) {
  459. material.setApply_id(apply.getId());
  460. stockLandMaterialService.saveMaterial(material);
  461. }else {
  462. stockLandMaterialService.updateMaterial(material);
  463. }
  464. }
  465. }
  466. // 根据deleteMaterialIds删除对应删除的材料
  467. stockLandMaterialService.deleteMaterials(apply.getDeleteMaterialIds());
  468. if(null != apply.getOtherMaterials() && apply.getOtherMaterials().size()>0) {
  469. for(StockLandMaterial material : apply.getOtherMaterials()) {
  470. if(null == material.getId()) {
  471. if(null != material.getFileDown() && null != material.getFileDown().getFile_id()) {
  472. material.setApply_id(apply.getId());
  473. material.setMaterial_type(Constant.LandApplyMaterialType.OTHER_MATERIAL);
  474. stockLandMaterialService.saveMaterial(material);
  475. }
  476. }else {
  477. stockLandMaterialService.updateMaterial(material);
  478. }
  479. }
  480. }
  481. if(null != apply.getSummaryMaterials() && apply.getSummaryMaterials().size()>0) {
  482. for(StockLandMaterial material : apply.getSummaryMaterials()) {
  483. if(null == material.getId()) {
  484. if(null != material.getFileDown() && null != material.getFileDown().getFile_id()) {
  485. material.setApply_id(apply.getId());
  486. material.setMaterial_type(Constant.LandApplyMaterialType.SUMMARY_MATERIAL);
  487. stockLandMaterialService.saveMaterial(material);
  488. }
  489. }else {
  490. stockLandMaterialService.updateMaterial(material);
  491. }
  492. }
  493. }
  494. return true;
  495. }
  496. return false;
  497. }
  498. //根据id查找用地申请
  499. public StockLand findLandApplyById(Integer id) {
  500. StockLand landApply = this.findById(id);
  501. if(null != landApply) {
  502. getFullLandInfo(landApply);
  503. }
  504. return landApply;
  505. }
  506. /**
  507. * @Title: findPageInfo
  508. * @Description: TODO(存量用地 待审核)
  509. * @param @return
  510. * @return PageInfo<StockLand> 返回类型
  511. * @author jiangjz
  512. * @param condition
  513. * @param pageSize
  514. * @param pageNum
  515. */
  516. public PageInfo<StockLand> findPageInfo(Integer pageNum, Integer pageSize, SearchCondition condition) {
  517. //设置查询condition条件
  518. List<Integer> applyStatus = new ArrayList<>();
  519. Integer userId = ShiroUtils.getUserId();
  520. //根据当前用户userId查询和当前用户同一部门,审核层级小于当前用户的UserId
  521. List<Integer> userIdList = userService.findUserIdsByUserId(userId);
  522. //排除当前用户
  523. if (userIdList.size() > 0){
  524. userIdList.remove(userId);
  525. }
  526. List<String> groupNameList = this.getUserGroupName();
  527. if (groupNameList.contains(Constant.XTGZXZ)) {
  528. applyStatus.add(2);
  529. applyStatus.add(4);
  530. applyStatus.add(5);
  531. applyStatus.add(6);
  532. applyStatus.add(11);
  533. applyStatus.add(15);
  534. }
  535. //合规性审查不用合规性审查小组了
  536. //if (groupNameList.contains(Constant.HGXSHXZ)) {
  537. applyStatus.add(3);
  538. //}
  539. if (groupNameList.contains(Constant.JYLCSHXZ)) {
  540. //简易流程会签
  541. applyStatus.add(14);
  542. }
  543. if(null != applyStatus && applyStatus.size() > 0) {
  544. condition.setApply_status(applyStatus);
  545. condition.setUserId(ShiroUtils.getUserId());
  546. PageHelper.startPage(pageNum, pageSize);
  547. List<StockLand> stockLands = stockLandDao.findPageInfo(condition);
  548. /*for (Integer usrId : userIdList) {
  549. stockLands = stockLands.stream().filter(stockLand -> !(Arrays.asList(stockLand.getNextChecker().split(",")).contains(String.valueOf(usrId)))).collect(Collectors.toList());
  550. }*/
  551. for (StockLand stockLand : stockLands) {
  552. stockLand.setApply_time(this.getApplyDate(stockLand.getId()));
  553. //判断单据是否被当前用户的下一级所审核
  554. for (Integer usrId : userIdList) {
  555. if(Arrays.asList(stockLand.getNextChecker().split(",")).contains(String.valueOf(usrId))){
  556. stockLand.setIsApproval(0);
  557. break;
  558. }
  559. }
  560. //超过五天
  561. if ((stockLand.getOverTime() / 24) > 5) {
  562. stockLand.setOverTimeStr("超出" + String.valueOf((int) Math.round(stockLand.getOverTime() / 24)) + "天");
  563. } else {//少于五天
  564. stockLand.setOverTimeStr("剩余" + String.valueOf((int) Math.round(stockLand.getOverTime() / 24)) + "天");
  565. }
  566. }
  567. return new PageInfo<StockLand>(stockLands);
  568. }else{
  569. return new PageInfo<StockLand>(new ArrayList<>());
  570. }
  571. }
  572. /**
  573. * 获取用户所属用户组
  574. * @return
  575. */
  576. public List<String> getUserGroupName() {
  577. List<String> list = new ArrayList<>();
  578. //User user = ShiroUtils.getCurrentUser();
  579. int userId = ShiroUtils.getUserId();
  580. List<UserGroup> userGroupList = userGroupService.findByUserId(userId);
  581. for (UserGroup ug : userGroupList) {
  582. int groupId = ug.getGroup_id();
  583. Group group = groupService.findById(groupId);
  584. if(null != group){
  585. list.add(group.getName());
  586. }
  587. }
  588. return list;
  589. }
  590. /**
  591. * @Title: fileUpload
  592. * @Description: TODO(存量用地审核 附件上传)
  593. * @param @param id
  594. * @param @param files
  595. * @param @param baseFolderPath
  596. * @return void 返回类型
  597. * @author jiangjz
  598. */
  599. @Transactional(rollbackFor = Exception.class)
  600. public void fileUpload(int id,MultipartFile files,String baseFolderPath) {
  601. File folder = new File(baseFolderPath, "areaApply");
  602. if (!folder.exists() || !folder.isDirectory()) {
  603. folder.mkdirs();
  604. }
  605. BufferedInputStream bis = null;
  606. BufferedOutputStream bos = null;
  607. // 获得原始文件名
  608. String fileName = files.getOriginalFilename();
  609. // 新文件名
  610. String newFileName = UUID.randomUUID() + fileName;
  611. try {
  612. String path = baseFolderPath + "/areaApply/" + newFileName;
  613. bos = new BufferedOutputStream(new FileOutputStream(path));
  614. bis = new BufferedInputStream(files.getInputStream());
  615. int len = 0;
  616. byte[] bt = new byte[1024];
  617. while ((len = bis.read(bt)) != -1) {
  618. bos.write(bt, 0, len);
  619. }
  620. //将附件信息存放到表中
  621. Attachment attachment = new Attachment();
  622. attachment.setBusiness_id(id);
  623. attachment.setBusiness_type(Constant.Attach_BunessType.PENDING_DISTRIBUTE);
  624. attachment.setFile_name(newFileName);
  625. attachment.setFile_url(path);
  626. attachmentService.saveSelective(attachment);
  627. } catch (Exception e) {
  628. e.printStackTrace();
  629. } finally {
  630. if (bis != null) {
  631. try {
  632. bis.close();
  633. } catch (Exception e) {
  634. e.printStackTrace();
  635. }
  636. }
  637. if (bos != null) {
  638. try {
  639. bos.close();
  640. } catch (Exception e) {
  641. e.printStackTrace();
  642. }
  643. }
  644. }
  645. }
  646. /**
  647. * @Title: submit
  648. * @Description: TODO(存量用地审核)
  649. * @param @param id
  650. * @param @param comment
  651. * @param @param type
  652. * @param slad
  653. * @return void 返回类型
  654. * @author jiangjz
  655. */
  656. public ResponseMessage submit(StockLandApprovalDto slad, Integer apply_type, StockLand apply, String departmentIds) {
  657. //单据id
  658. int id = slad.getApply_id();
  659. //前端操作类型
  660. Integer type = Integer.valueOf(slad.getStatus());
  661. //审核意见
  662. String comment = slad.getApproval_comment();
  663. //根据id查询出申请单据
  664. StockLand stockLand = this.findById(id);
  665. // String str = Constant.HGXSHXZ;
  666. //1.查出该单据最新一条的审核记录
  667. Example example = new Example(Approval.class);
  668. example.setTableName("z_approval");
  669. Example.Criteria criteria = example.createCriteria();
  670. criteria.andEqualTo("apply_id",id);
  671. criteria.andEqualTo("del_flag",false);
  672. criteria.andEqualTo("type",Constant.DictionaryType.STOCKLAND);
  673. example.setOrderByClause("create_Time desc");
  674. List<Approval> approvals = approvalService.selectByExample(example);
  675. Approval approval = null;
  676. if(null != approvals && approvals.size() > 0){
  677. approval = approvals.get(0);
  678. }
  679. if (CommonUtils.isNull(approval)) {
  680. logger.error("当前单据缺少审批流程");
  681. throw new RuntimeException("当前单据缺少审批流程");
  682. }
  683. //审核轮次
  684. Integer approval_round = null;
  685. if(null != approval) {
  686. approval_round = approval.getApproval_round();
  687. }
  688. //合规性审查“通过”或“退回”
  689. if(type == 5 || type == 6){
  690. if(null != approval){
  691. String nextChecker = approval.getNextchecker();
  692. //2.找出下一审核人
  693. //-2018-05-28 - 去除当前审核人同一审核层级,同一部门的人,同一层级只需要一个审核
  694. nextChecker = getNextLevelCheckerByDepartment(ShiroUtils.getUserId(),nextChecker);
  695. if(StringUtils.isNotBlank(nextChecker)) {
  696. //还有其他审核人
  697. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  698. //保存审核记录,并更新附件
  699. saveApprovalAndUpdateAttach(slad, id, comment, nextChecker,Constant.LandApproveStatus.COMPLIANCE_AUDIT,type == 5?Constant.OperType.SUBMIT_COMMENT:Constant.OperType.REJECT,approval_round);
  700. //如果是经办人,新增领导待办,如果是领导,不新增待办,直接完成
  701. String handler = getNextLevelByDepartment(ShiroUtils.getUserId(),nextChecker);
  702. if(StringUtils.isNotBlank(handler)) {
  703. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  704. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_PARALLEL);
  705. }else {
  706. waitToDoService.completeTODO(stockLand.getId(), Constant.DictionaryType.STOCKLAND);
  707. }
  708. }else {
  709. //合规性审查全部审核完成
  710. boolean flag = true;
  711. //List<Integer> userIdList = userGroupService.findUserIdByGroupName(str);
  712. //查询最后一次分发各部门中的userId
  713. Approval app = approvalService.findLastByCheckerAndBeforeStatu(id,Constant.DictionaryType.STOCKLAND,null,Constant.LandApproveStatus.PENDING_DISTRIBUTE);
  714. String [] userIds = null;
  715. if(null != app){
  716. userIds = app.getNextchecker().split(",");
  717. }
  718. for(String userId : userIds){
  719. Approval approval1 = approvalService.findLastByCheckerAndBeforeStatu(id,Constant.DictionaryType.STOCKLAND,Integer.valueOf(userId),Constant.LandApproveStatus.COMPLIANCE_AUDIT);
  720. if(null != approval1 && approval1.getOper_type().equals(Constant.OperType.REJECT)){
  721. flag = false;
  722. break;
  723. }
  724. }
  725. //无论是否全部审查通过 状态改为都“合规性审查汇总”
  726. stockLand.setApprove_status(Constant.LandApproveStatus.HGXSCTG);
  727. if(flag && type == 5){
  728. //全部通过 页面button设为 “进入区政府批准”
  729. stockLand.setButton_status(0);
  730. //没有全部审查通过,页面button设为 “联合评议”
  731. }else{
  732. stockLand.setButton_status(1);
  733. }
  734. //下一审核人到“协调工作组”,
  735. String userIdInThisGroup = findUserIdByGroupName(Constant.XTGZXZ);
  736. //保存审核记录,并更新附件
  737. saveApprovalAndUpdateAttach(slad, id, comment, userIdInThisGroup,Constant.LandApproveStatus.HGXSCTG,type == 5?Constant.OperType.SUBMIT_COMMENT:Constant.OperType.REJECT,approval_round);
  738. //新增待办
  739. String handler = userIdInThisGroup;
  740. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  741. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_PARALLEL);
  742. }
  743. /* -2018-05-28 改变- 同一级审核需要都审核完成
  744. * String [] nextCheckerArr = nextChecker.split(",");
  745. * if(null != nextCheckerArr && nextCheckerArr.length > 0){
  746. //“合规性审核小组”最后一个人审核
  747. if(nextCheckerArr.length == 1){
  748. //当最后一个人审核通过后,判断是否全部通过,全部通过,将该单据的状态设为“合规性审查通过”,否则走联合评议
  749. //查出“合规性审核小组”所有成员最近的一条审核记录,是否全部审核通过(过期)
  750. boolean flag = true;
  751. //List<Integer> userIdList = userGroupService.findUserIdByGroupName(str);
  752. //查询最后一次分发各部门中的userId
  753. Approval app = approvalService.findLastByCheckerAndBeforeStatu(id,null,Constant.LandApproveStatus.PENDING_DISTRIBUTE);
  754. String [] userIds = null;
  755. if(null != app){
  756. userIds = app.getNextchecker().split(",");
  757. }
  758. for(String userId : userIds){
  759. Approval approval1 = approvalService.findLastByCheckerAndBeforeStatu(id,Integer.valueOf(userId),Constant.LandApproveStatus.COMPLIANCE_AUDIT);
  760. if(null != approval1 && approval1.getOper_type().equals(Constant.OperType.REJECT)){
  761. flag = false;
  762. break;
  763. }
  764. }
  765. //无论是否全部审查通过 状态改为都“合规性审查汇总”
  766. stockLand.setApprove_status(Constant.LandApproveStatus.HGXSCTG);
  767. if(flag && type == 5){
  768. //全部通过 页面button设为 “进入区政府批准”
  769. stockLand.setButton_status(0);
  770. //没有全部审查通过,页面button设为 “联合评议”
  771. }else{
  772. stockLand.setButton_status(1);
  773. }
  774. //下一审核人到“协调工作组”,
  775. String userIdInThisGroup = findUserIdByGroupName(Constant.XTGZXZ);
  776. //保存审核记录,并更新附件
  777. saveApprovalAndUpdateAttach(slad, id, comment, userIdInThisGroup,Constant.LandApproveStatus.HGXSCTG,type == 5?Constant.OperType.SUBMIT_COMMENT:Constant.OperType.REJECT,approval_round);
  778. //不是最后一个人审核
  779. }else{
  780. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  781. //保存审核记录,并更新附件
  782. saveApprovalAndUpdateAttach(slad, id, comment, nextChecker,Constant.LandApproveStatus.COMPLIANCE_AUDIT,type == 5?Constant.OperType.SUBMIT_COMMENT:Constant.OperType.REJECT,approval_round);
  783. }
  784. }*/
  785. }
  786. //走简易流程
  787. } else if(type == 1) {
  788. stockLand.setApprove_status(Constant.LandApproveStatus.APPROVED);
  789. //将下一审核人设为 街道
  790. String checkers = this.getNextChecker(stockLand);
  791. //保存审核记录,并更新附件
  792. saveApprovalAndUpdateAttach(slad, id, comment, checkers,Constant.LandApproveStatus.APPROVED,Constant.OperType.APPROVED,approval_round);
  793. //新增待办
  794. String handler = checkers;
  795. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + stockLand.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, stockLand.getId(),
  796. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  797. //分送各部门,将申请状态改变,并将下一审核人设为各部门的领导和科员
  798. }else if(type == 2 ){
  799. //协调工作小组审核
  800. //将状态设为“合规性审查”
  801. stockLand.setApprove_status(Constant.LandApproveStatus.COMPLIANCE_AUDIT);
  802. //查出要分送的各部门(暂定“工业用地合规性审核组”)
  803. //根据工作组名称查出工作组
  804. //Group group = groupService.findByName(str, null);
  805. //如果不为空
  806. //if(null != group){
  807. //根据工作组id查出UserGroup
  808. //List<UserGroup> list = userGroupService.findByGroupId(group.getId());
  809. //构建一个StringBuffer 存放下一审核人id
  810. //StringBuffer sb = new StringBuffer("");
  811. //for (UserGroup userGroup: list) {
  812. // Integer userId = userGroup.getUser_id();
  813. // sb.append(userId+",");
  814. //}
  815. //保存审核记录,并更新附件
  816. //saveApprovalAndUpdateAttach(slad, id, comment, sb.toString(),Constant.LandApproveStatus.COMPLIANCE_AUDIT,Constant.OperType.APPROVED);
  817. //}
  818. StringBuffer sb = new StringBuffer("");
  819. if(StringUtils.isNotBlank(departmentIds)){
  820. String departmentIdArr [] = departmentIds.split(",");
  821. String handler = "";//待办操作人,待办先发送经办人
  822. for(String departId:departmentIdArr){
  823. List<User> userList = userService.findUserBydepartmentId(departId);
  824. if(null == userList || userList.size() == 0){
  825. String departmentName = departmentService.findById(Integer.valueOf(departId)).getName();
  826. return ResponseMessage.error(departmentName+"没有审核人!");
  827. }else {
  828. //是否有一级二级审批人
  829. if(!checkAuditPerson(userList,Constant.LandApproveStatus.COMPLIANCE_AUDIT)) {
  830. String departmentName = departmentService.findById(Integer.valueOf(departId)).getName();
  831. return ResponseMessage.error(departmentName+"审核人不全,需要有一级二级审核人!");
  832. }
  833. }
  834. for(User user:userList){
  835. sb.append(user.getId()+",");
  836. }
  837. handler += getFirstLevelChecker(userList);
  838. }
  839. saveApprovalAndUpdateAttach(slad, id, comment, sb.toString(),Constant.LandApproveStatus.COMPLIANCE_AUDIT,Constant.OperType.APPROVED,approval_round);
  840. //新增待办
  841. //String handler = getFirstLevelChecker(userList);
  842. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  843. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  844. }else{
  845. return ResponseMessage.error("请选择部门!");
  846. }
  847. //简易流程退回
  848. }else if (type == 3){
  849. //将状态设为“退回”
  850. stockLand.setApprove_status(Constant.LandApproveStatus.REJECT);
  851. //下一审核人街道
  852. String checkers = this.getNextChecker(stockLand);
  853. //保存审核记录,并更新附件
  854. saveApprovalAndUpdateAttach(slad, id, comment,checkers,Constant.LandApproveStatus.REJECT,Constant.OperType.REJECT,approval_round);
  855. //新增待办
  856. String handler = checkers;
  857. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + stockLand.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, stockLand.getId(),
  858. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  859. //退回,
  860. }else if (type == 4){
  861. doReject(slad, id, comment, stockLand, approval_round, Constant.LandApproveStatus.REJECT, Constant.OperType.REJECT);
  862. //进入联合评议
  863. }else if (type == 7){
  864. stockLand.setApprove_status(Constant.LandApproveStatus.UNITED_AUDIT);
  865. //下一审核人,协调工作组
  866. String userIdInThisGroup = findUserIdByGroupName(Constant.XTGZXZ);
  867. //保存审核记录,并更新附件
  868. saveApprovalAndUpdateAttach(slad, id, comment,userIdInThisGroup,Constant.LandApproveStatus.UNITED_AUDIT,Constant.OperType.APPROVED,approval_round);
  869. //新增待办
  870. String handler = userIdInThisGroup;
  871. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  872. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  873. //进入区政府审核
  874. }else if(type == 8){
  875. //合规性审查全部通过后,状态改为政府审核。由协调小组操作
  876. stockLand.setApprove_status(Constant.LandApproveStatus.GOVERNMENT_AUDIT);
  877. //下一审核人,协调工作组
  878. String userIdInThisGroup = findUserIdByGroupName(Constant.XTGZXZ);
  879. //保存审核记录,并更新附件
  880. saveApprovalAndUpdateAttach(slad, id, comment,userIdInThisGroup,Constant.LandApproveStatus.GOVERNMENT_AUDIT,Constant.OperType.APPROVED,approval_round);
  881. //新增待办
  882. String handler = userIdInThisGroup;
  883. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  884. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  885. //政府审核通过
  886. }else if(type == 9){
  887. doApproval(slad,
  888. id,
  889. comment,
  890. stockLand,
  891. approval_round,
  892. Constant.LandApproveStatus.APPROVED,
  893. Constant.OperType.APPROVED);
  894. //提交联合评议
  895. }else if(type == 10){
  896. if(null != apply.getMipMaterials() && apply.getMipMaterials().size()>0) {
  897. for(StockLandMaterial material : apply.getMipMaterials()) {
  898. if(null != material.getFileDown() && null != material.getFileDown().getFile_id()) {
  899. material.setMaterial_type(Constant.LandApplyMaterialType.MAJOR_INVESTMENT_PROJECTS);
  900. material.setApply_id(id);
  901. stockLandMaterialService.saveMaterial(material);
  902. }
  903. }
  904. }
  905. stockLand.setIs_zdxm(apply.getIs_zdxm());
  906. stockLand.setZdxm_comment(apply.getZdxm_comment());
  907. stockLand.setApprove_status(Constant.LandApproveStatus.GOVERNMENT_AUDIT);
  908. //下一审核人,协调工作组
  909. String userIdInThisGroup = findUserIdByGroupName(Constant.XTGZXZ);
  910. //保存审核记录,并更新附件
  911. saveApprovalAndUpdateAttach(slad, id, comment,userIdInThisGroup,Constant.LandApproveStatus.GOVERNMENT_AUDIT,Constant.OperType.APPROVED,approval_round);
  912. //新增待办
  913. String handler = userIdInThisGroup;
  914. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  915. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  916. //二次联合评议审核通过
  917. }else if(type == 11){
  918. //二次联合评议审核通过后,状态改为政府审核。由协调小组操作
  919. stockLand.setApprove_status(Constant.LandApproveStatus.GOVERNMENT_AUDIT);
  920. //下一审核人,协调工作组
  921. String userIdInThisGroup = findUserIdByGroupName(Constant.XTGZXZ);
  922. //保存审核记录,并更新附件
  923. saveApprovalAndUpdateAttach(slad, id, comment,userIdInThisGroup,Constant.LandApproveStatus.GOVERNMENT_AUDIT,Constant.OperType.APPROVED,approval_round);
  924. //新增待办
  925. String handler = userIdInThisGroup;
  926. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  927. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  928. }else if(type == 13){
  929. //简易流程分发,状态改为简易流程会签。由简易流程会签用户组操作
  930. stockLand.setApprove_status(Constant.LandApproveStatus.JYLCHQ);
  931. //下一审核人,工业用地简易流程审核组
  932. String userIdInThisGroup = findUserIdByGroupName(Constant.JYLCSHXZ);
  933. //保存审核记录,并更新附件
  934. saveApprovalAndUpdateAttach(slad, id, comment,userIdInThisGroup,Constant.LandApproveStatus.JYLCHQ,Constant.OperType.APPROVED,approval_round);
  935. //新增待办
  936. String handler = userIdInThisGroup;
  937. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  938. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_SERIAL);
  939. }else if(type == 15||type == 14){
  940. //简易流程会签
  941. if(null != approval){
  942. String nextChecker = approval.getNextchecker();
  943. //2.找出下一审核人
  944. String [] nextCheckerArr = nextChecker.split(",");
  945. if(null != nextCheckerArr && nextCheckerArr.length > 0){
  946. //“工业用地简易流程审核组”最后一个人审核
  947. if(nextCheckerArr.length == 1){
  948. //当最后一个人审核后,将该单据的状态设为“简易流程汇总”
  949. stockLand.setApprove_status(Constant.LandApproveStatus.JYLCHZ);
  950. //下一审核人到“协调工作组”,
  951. nextChecker = findUserIdByGroupName(Constant.XTGZXZ);
  952. //保存审核记录,并更新附件
  953. saveApprovalAndUpdateAttach(slad, id, comment, nextChecker,Constant.LandApproveStatus.JYLCHZ, Constant.OperType.SUBMIT_COMMENT,approval_round);
  954. //新增待办
  955. String handler = nextChecker;
  956. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + stockLand.getId(), Constant.WaitToDo_OperType.AUDIT, stockLand.getId(),
  957. Constant.DictionaryType.STOCKLAND,stockLand.getApply_no(), handler , Constant.WaitToDo_IsSerial.IS_PARALLEL);
  958. }else{
  959. //不是最后一个人审核
  960. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  961. //保存审核记录,并更新附件
  962. saveApprovalAndUpdateAttach(slad, id, comment, nextChecker,Constant.LandApproveStatus.JYLCHQ, Constant.OperType.SUBMIT_COMMENT,approval_round);
  963. //完成待办
  964. waitToDoService.completeTODO(stockLand.getId(), Constant.DictionaryType.STOCKLAND);
  965. }
  966. }
  967. }
  968. // wj 新简易流程通过
  969. } else if (Objects.equals(type.toString(), Constant.LandApproveStatus.EASY_PROCESS_APPROVED)) {
  970. doApproval(slad,
  971. id,
  972. comment,
  973. stockLand,
  974. approval_round,
  975. Constant.LandApproveStatus.EASY_PROCESS_APPROVED,
  976. Constant.OperType.APPROVED);
  977. } else if (Objects.equals(type.toString(), Constant.LandApproveStatus.EASY_PROCESS_DENY)) {
  978. doReject(slad,
  979. id,
  980. comment,
  981. stockLand,
  982. approval_round,
  983. Constant.LandApproveStatus.EASY_PROCESS_DENY,
  984. Constant.OperType.REJECT);
  985. } else {
  986. logger.error("错误状态提交, 错误状态值: {}", type);
  987. throw new RuntimeException("错误状态提交, 错误状态值");
  988. }
  989. //更新单据
  990. this.updateSelective(stockLand);
  991. return ResponseMessage.success("审核成功!");
  992. }
  993. private void doReject(StockLandApprovalDto slad, int id, String comment, StockLand stockLand, Integer approval_round, String reject, String operaType) {
  994. //将状态设为“退回”
  995. stockLand.setApprove_status(reject);
  996. //下一审核人街道
  997. String checkers = this.getNextChecker(stockLand);
  998. //保存审核记录,并更新附件
  999. saveApprovalAndUpdateAttach(slad, id, comment, checkers, reject, operaType, approval_round);
  1000. //给企业以外的部门发送消息
  1001. //1.先获取企业以外所有的部门id(参与审核的部门id)
  1002. List<String> departments = approvalService.findDepartmentNameByApplyId(id);
  1003. int[] pushIds = departmentService.findDepartmentIdByName(departments);
  1004. int[] streetId = new int[]{stockLand.getStreet_id()};
  1005. stockLand.setApply_type_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND, stockLand.getApply_type()));
  1006. stockLand.setApprove_status_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS, stockLand.getApprove_status()));
  1007. messageService.saveMessageAndPush(getDefaultMessage(stockLand), pushIds, 0);
  1008. messageService.saveMessageAndPush(getDefaultMessage(stockLand), streetId, 4);
  1009. //新增待办
  1010. String handler = checkers;
  1011. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + stockLand.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, stockLand.getId(),
  1012. Constant.DictionaryType.STOCKLAND, stockLand.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  1013. }
  1014. /**
  1015. *
  1016. * @param slad
  1017. * @param id
  1018. * @param comment
  1019. * @param stockLand
  1020. * @param approval_round
  1021. * @param approved
  1022. * @param approved2
  1023. */
  1024. private void doApproval(StockLandApprovalDto slad, int id, String comment, StockLand stockLand, Integer approval_round, String approved, String operaType) {
  1025. stockLand.setApprove_status(approved);
  1026. //下一审核人街道
  1027. String checkers = this.getNextChecker(stockLand);
  1028. //保存审核记录,并更新附件
  1029. saveApprovalAndUpdateAttach(slad, id, comment, checkers, approved, operaType, approval_round);
  1030. //给企业以外的部门发送消息
  1031. //1.先获取企业以外所有的部门id(参与审核的部门id)
  1032. List<String> departments = approvalService.findDepartmentNameByApplyId(id);
  1033. int[] pushIds = departmentService.findDepartmentIdByName(departments);
  1034. int[] streetId = new int[]{stockLand.getStreet_id()};
  1035. stockLand.setApply_type_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND, stockLand.getApply_type()));
  1036. stockLand.setApprove_status_str(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS, stockLand.getApprove_status()));
  1037. messageService.saveMessageAndPush(getDefaultMessage(stockLand), pushIds, 0);
  1038. messageService.saveMessageAndPush(getDefaultMessage(stockLand), streetId, 4);
  1039. //新增待办
  1040. String handler = checkers;
  1041. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + stockLand.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, stockLand.getId(),
  1042. Constant.DictionaryType.STOCKLAND, stockLand.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  1043. }
  1044. /**
  1045. * 判断单据在当前节点是否已经审核过
  1046. * @param apply_id
  1047. * @param beforeApproveStatus 单据当前状态
  1048. * @return
  1049. */
  1050. public boolean isApproved(Integer apply_id, String beforeApproveStatus) {
  1051. Approval latest = approvalService.getLatestApproval(apply_id,Constant.DictionaryType.STOCKLAND);
  1052. if(null != latest ) {
  1053. if(latest.getBefore_approvalstatus().equals(beforeApproveStatus)) {
  1054. return true;
  1055. }
  1056. }
  1057. return false;
  1058. }
  1059. //2018-05-28 - 去除当前审核人同一审核层级,同一部门的人,同一层级只需要一个审核
  1060. private String getNextLevelCheckerByDepartment(Integer currCheckerId, String nextChecker) {
  1061. String [] nextCheckerArr = nextChecker.split(",");
  1062. User currChecker = userService.findById(currCheckerId);
  1063. Integer level = currChecker.getApprove_level();
  1064. Integer deptId = currChecker.getDepartment_id();
  1065. //去除相同级别的checker
  1066. for(String userId : nextCheckerArr) {
  1067. User checker = userService.findById(Integer.valueOf(userId));
  1068. if(null != checker.getApprove_level() && checker.getApprove_level().equals(level)
  1069. && null != checker.getDepartment_id() && checker.getDepartment_id().equals(deptId)) {
  1070. nextChecker = nextChecker.replace(userId + ",", "");
  1071. }
  1072. }
  1073. return nextChecker;
  1074. }
  1075. //2018-06-21 - 查找同一部门的领导审核人
  1076. private String getNextLevelByDepartment(Integer currCheckerId, String nextChecker) {
  1077. String nextLevelChecker = "";
  1078. String [] nextCheckerArr = nextChecker.split(",");
  1079. User currChecker = userService.findById(currCheckerId);
  1080. Integer level = currChecker.getApprove_level();
  1081. if(null == level){
  1082. throw new BaseException("当前用户没有审核层级,请检查");
  1083. }
  1084. Integer deptId = currChecker.getDepartment_id();
  1085. //去除相同级别的checker
  1086. for(String userId : nextCheckerArr) {
  1087. User checker = userService.findById(Integer.valueOf(userId));
  1088. if(null == checker.getApprove_level()){
  1089. throw new BaseException("审核组有审核人员没有审核层级,请检查");
  1090. }
  1091. if(null != checker.getApprove_level() && checker.getApprove_level()< level
  1092. && null != checker.getDepartment_id() && checker.getDepartment_id().equals(deptId)) {
  1093. nextLevelChecker += userId +",";
  1094. }
  1095. }
  1096. return nextLevelChecker;
  1097. }
  1098. //找到第一审核人
  1099. public String getFirstLevelChecker(List<User> userList){
  1100. String firstLavelChecker = "";
  1101. //合规性审查,部门需要一级二级至少两个审批人
  1102. for(User user : userList) {
  1103. if(user.getApprove_level().equals(1)){
  1104. firstLavelChecker += user.getId() + ",";
  1105. }
  1106. }
  1107. return firstLavelChecker;
  1108. }
  1109. public Boolean checkAuditPerson(List<User> userList,String auditType){
  1110. Boolean flag = false;
  1111. if(auditType.equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT)) {
  1112. //合规性审查,部门需要一级二级至少两个审批人
  1113. Boolean haslevel0 = false;
  1114. Boolean haslevel1 = false;
  1115. for(User user : userList) {
  1116. if(user.getApprove_level().equals(0)) {
  1117. haslevel0 = true;
  1118. }else if(user.getApprove_level().equals(1)){
  1119. haslevel1 = true;
  1120. }
  1121. }
  1122. flag = haslevel1 && haslevel0 ;
  1123. }
  1124. return flag;
  1125. }
  1126. /**
  1127. * 存量用地--已审核
  1128. * @param pageNum
  1129. * @param pageSize
  1130. * @param condition
  1131. * @return
  1132. */
  1133. public PageInfo<StockLand> findApprovalPageInfo(Integer pageNum, Integer pageSize, SearchCondition condition) {
  1134. condition.setUserId(ShiroUtils.getUserId());
  1135. //同一部门同一审核层级的人可以看见对方审核过的数据
  1136. List<Integer> checker_ids = getSameCheckers();
  1137. if( null != checker_ids && checker_ids.size()>0 ) {
  1138. condition.setChecker_ids(checker_ids);
  1139. }
  1140. PageHelper.startPage(pageNum, pageSize);
  1141. List<StockLand> stockLandss = stockLandDao.findApprovalPageInfo(condition);
  1142. for (StockLand stockLand : stockLandss) {
  1143. stockLand.setApply_time(this.getApplyDate(stockLand.getId()));
  1144. //超过十天
  1145. if ((stockLand.getOverTime() / 24) > 10) {
  1146. stockLand.setOverTimeStr("超出" + String.valueOf((int) Math.floor(stockLand.getOverTime() / 24)) + "天" + (stockLand.getOverTime() % 24) + "小时");
  1147. } else {//少于十天
  1148. stockLand.setOverTimeStr("剩余" + String.valueOf((int) Math.floor(stockLand.getOverTime() / 24)) + "天" + (stockLand.getOverTime() % 24) + "小时");
  1149. }
  1150. //最近一次是否是当前用户审核的,如果是且没有撤回,则可撤回
  1151. /*Approval latestAllApproval = approvalService.getLatestApprovalAll(stockLand.getId());
  1152. if(null == latestAllApproval.getIs_withdraw() && null != latestAllApproval.getChecker() && latestAllApproval.getChecker().equals(ShiroUtils.getUserId())) {
  1153. stockLand.setCanWithdraw(Constant.True_False.TRUE);
  1154. }*/
  1155. stockLand.setCanWithdraw(this.canWithdraw(stockLand, ShiroUtils.getUserId()));
  1156. }
  1157. return new PageInfo<StockLand>(stockLandss);
  1158. }
  1159. //当前单据是否可以撤回
  1160. public Integer canWithdraw(StockLand stockLand, int userId) {
  1161. //最近一条审核是自己审核的,可以撤回
  1162. Approval latestAllApproval = approvalService.getLatestApprovalAll(stockLand.getId(),Constant.DictionaryType.STOCKLAND);
  1163. if (latestAllApproval == null){
  1164. return Constant.True_False.FASLE;
  1165. }
  1166. if(null == latestAllApproval.getIs_withdraw() && null != latestAllApproval.getChecker() && latestAllApproval.getChecker().equals(ShiroUtils.getUserId())) {
  1167. //stockLand.setCanWithdraw(Constant.True_False.TRUE);
  1168. return Constant.True_False.TRUE;
  1169. }
  1170. //最近一条有效的审核记录,用于获取当前的下一审核人
  1171. Approval latestApproval = approvalService.getLatestApproval(stockLand.getId(),Constant.DictionaryType.STOCKLAND);
  1172. if (latestApproval == null){
  1173. return Constant.True_False.FASLE;
  1174. }
  1175. //合规性审查并行审核,每个部门可以单独撤回
  1176. //1.当前是合规性审查
  1177. //2.当前用户最近一条审核记录是合规性审核,没有撤回过
  1178. //3.下一审核层级还没审核
  1179. if(stockLand.getApprove_status().equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT)) {
  1180. Approval latestAllApprovalByUser = approvalService.getLatestApprovalAllByUser(stockLand.getId(),Constant.DictionaryType.STOCKLAND,userId);
  1181. if(null != latestAllApprovalByUser) {
  1182. if(latestAllApprovalByUser.getApproval_round().equals(latestApproval.getApproval_round())&&
  1183. null == latestAllApprovalByUser.getIs_withdraw() && latestAllApprovalByUser.getBefore_approvalstatus().equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT)) {
  1184. //当前用户最近一条审核记录是是合规性审核
  1185. Integer approveLevel = ShiroUtils.getUserEntity().getApprove_level();
  1186. if(null != approveLevel && approveLevel.equals(1)) {
  1187. //是经办人,要判断下一级审核人是否已经审核
  1188. User currUser = ShiroUtils.getUserEntity();
  1189. String[] userIds = latestApproval.getNextchecker().split(",");
  1190. if(userIds.length>0) {
  1191. //判断登录用户的下一审核层级有没有审核
  1192. for(String uId : userIds) {
  1193. User user = userService.findById(Integer.valueOf(uId));
  1194. if(null != user.getDepartment_id() && user.getDepartment_id().equals(currUser.getDepartment_id())) {
  1195. if(null != user.getApprove_level() && null != currUser.getApprove_level() && user.getApprove_level()<currUser.getApprove_level()) {
  1196. //下一级审核人还没审核,可以撤回
  1197. return Constant.True_False.TRUE;
  1198. }else {
  1199. //下一级审核人已经审核过了,不可撤回
  1200. return Constant.True_False.FASLE;
  1201. }
  1202. }
  1203. }
  1204. }
  1205. }else if(null != approveLevel && approveLevel.equals(0)){
  1206. //领导,可以撤回
  1207. return Constant.True_False.TRUE;
  1208. }
  1209. }
  1210. }
  1211. }else if(stockLand.getApprove_status().equals(Constant.LandApproveStatus.HGXSCTG)) {
  1212. Approval latestAllApprovalByUser = approvalService.getLatestApprovalAllByUser(stockLand.getId(),Constant.DictionaryType.STOCKLAND,userId);
  1213. if(null != latestAllApprovalByUser) {
  1214. if(latestAllApprovalByUser.getApproval_round().equals(latestApproval.getApproval_round())&&
  1215. null == latestAllApprovalByUser.getIs_withdraw() && latestAllApprovalByUser.getBefore_approvalstatus().equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT)) {
  1216. //当前用户最近一条审核记录是是合规性审核
  1217. Integer approveLevel = ShiroUtils.getUserEntity().getApprove_level();
  1218. if(null != approveLevel && approveLevel.equals(1)) {
  1219. //是经办人,不可以撤回
  1220. return Constant.True_False.FASLE;
  1221. }else if(null != approveLevel && approveLevel.equals(0)){
  1222. //领导,可以撤回
  1223. return Constant.True_False.TRUE;
  1224. }
  1225. }
  1226. }
  1227. }
  1228. return Constant.True_False.FASLE;
  1229. }
  1230. //获取同一部门同一审核层级的
  1231. private List<Integer> getSameCheckers() {
  1232. List<Integer> sameCheckers = new ArrayList<Integer>();
  1233. Integer departId = ShiroUtils.getUserEntity().getDepartment_id();
  1234. Integer level = ShiroUtils.getUserEntity().getApprove_level();
  1235. if(null != departId && null != level) {
  1236. List<User> userList = userService.findUserBydepartmentId(String.valueOf(departId));
  1237. for(User user:userList) {
  1238. if(null != user.getApprove_level() && user.getApprove_level().equals(level)) {
  1239. sameCheckers.add(user.getId());
  1240. }
  1241. }
  1242. }
  1243. return sameCheckers;
  1244. }
  1245. public void saveApprovalAndUpdateAttach(StockLandApprovalDto slad, int id, String comment, String userIdInThisGroup,String afterStatu,String Oper_type,Integer approval_round) {
  1246. Approval approval1 = new Approval();
  1247. String department = "" ;
  1248. if(null != userService.findById(ShiroUtils.getUserId()).getDepartment_id()) {
  1249. Department dept = departmentService.findById(userService.findById(ShiroUtils.getUserId()).getDepartment_id());
  1250. if(null != dept) {
  1251. department = dept.getName();
  1252. }
  1253. }
  1254. approval1.setDepartment(department);
  1255. approval1.setApply_id(id);
  1256. approval1.setType(Constant.DictionaryType.STOCKLAND);
  1257. approval1.setApproval_comment(comment);
  1258. approval1.setBefore_approvalstatus(slad.getStatu());
  1259. approval1.setAfter_approvalstatus(afterStatu);
  1260. approval1.setDeal_time(DateUtil.getTimeString(new Date()));
  1261. approval1.setChecker(ShiroUtils.getUserId());
  1262. approval1.setNextchecker(userIdInThisGroup);
  1263. approval1.setOper_type(Oper_type);
  1264. approval1.setApproval_round(approval_round);
  1265. //保存审核记录
  1266. approvalService.insertAndGetId(approval1);
  1267. updateAttachment(slad, approval1.getId());
  1268. }
  1269. public String findUserIdByGroupName(String groupName) {
  1270. Group group = groupService.findByName(groupName,null);
  1271. List<UserGroup> userGroups = userGroupService.findByGroupId(group.getId());
  1272. StringBuffer sb = new StringBuffer("");
  1273. for (UserGroup userGroup : userGroups) {
  1274. sb.append(userGroup.getUser_id()+",");
  1275. }
  1276. return sb.toString();
  1277. }
  1278. private void updateAttachment(StockLandApprovalDto slad, Integer approval_id) {
  1279. if(null != slad.getFileDowns() && slad.getFileDowns().size()>0) {
  1280. for (FileDown file : slad.getFileDowns()) {
  1281. Integer file_id = file.getFile_id();
  1282. if(null != file_id){
  1283. attachmentDao.updateAttachment(Constant.Attachment.STOCKLAND_APPROVE, approval_id, file.getFile_id());
  1284. }
  1285. }
  1286. }
  1287. }
  1288. //默认消息
  1289. public Message getDefaultAuditMessage(StockLand landApply) {
  1290. Message msg = new Message();
  1291. String title = "您有一条存量用地申请待审核!单号(" + landApply.getApply_no() + ")";
  1292. String applyTypeName = landApply.getApply_type_str();
  1293. String approveStatus = landApply.getApprove_status_str();
  1294. String content = "您有一条待审核的存量用地申请 :" + applyTypeName ;
  1295. content += "(单号:" + landApply.getApply_no() + ")" +"目前审核状态为 " + approveStatus + "。请尽快前去审核!";
  1296. msg.setTitle(title);
  1297. msg.setContent(content);
  1298. return msg;
  1299. }
  1300. //默认消息
  1301. public Message getDefaultMessage(StockLand landApply) {
  1302. Message msg = new Message();
  1303. msg.setBusiness_type(Constant.Message_Business_type.STOCKLAND);
  1304. String title = "您申请过的单号为" + landApply.getApply_no() + "的申请,状态更新啦";
  1305. String applyTypeName = landApply.getApply_type_str();
  1306. String approveStatus = landApply.getApprove_status_str();
  1307. String temp_sate = "";
  1308. if(null != landApply.getTemporary_state()){
  1309. temp_sate = landApply.getTemporary_state().equals(Constant.LandApproveStatus.APPROVED)?Constant.Attach_BunessType.APPROVED:
  1310. (landApply.getTemporary_state().equals(Constant.LandApproveStatus.NOTAPPROVED)?Constant.Attach_BunessType.NOTAPPROVED:Constant.Attach_BunessType.REJECT);
  1311. }
  1312. String content = "您的存量用地申请 :" + applyTypeName ;
  1313. if(landApply.getApply_type().equals(Constant.LandApplyType.RENT)){
  1314. content += "(单号:" + landApply.getApply_no() + ")" +"目前审核状态为 " +temp_sate + "。请知悉!";
  1315. }else{
  1316. content += "(单号:" + landApply.getApply_no() + ")" +"目前审核状态为 " +approveStatus + "。请知悉!";
  1317. }
  1318. //添加退回或不通过的意见
  1319. Approval approval = approvalService.getLatestApproval(landApply.getId(),Constant.DictionaryType.STOCKLAND);
  1320. if(approval.getOper_type().equals(Constant.OperType.REJECT) || approval.getOper_type().equals(Constant.OperType.NOTAPPROVED)) {
  1321. content += " 审核意见:" + approval.getApproval_comment();
  1322. }
  1323. msg.setTitle(title);
  1324. msg.setContent(content);
  1325. return msg;
  1326. }
  1327. public List<ProcessNodeDto> getProcessNodes(StockLand landApply, Boolean isCompany) {
  1328. List<ProcessNodeDto> processNodes = new ArrayList<ProcessNodeDto>();
  1329. if(isCompany) {
  1330. DictionaryItem currentNode = dictionaryItemService.findByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPLY_STATUS, landApply.getApply_status());
  1331. List<DictionaryItem> applyStatusList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.STOCKLAND_APPLY_STATUS);
  1332. if(currentNode.getValue().equals(Constant.LandApplyStatus.NOTPASSED)||currentNode.getValue().equals(Constant.LandApplyStatus.PASSED)) {
  1333. for(DictionaryItem node : applyStatusList) {
  1334. if(currentNode.getSort()>node.getSort()) {
  1335. if(!(node.getValue().equals(Constant.LandApplyStatus.REJECT)||node.getValue().equals(Constant.LandApplyStatus.NOTAPPROVED))) {
  1336. ProcessNodeDto processNode = new ProcessNodeDto(node,false);
  1337. processNodes.add(processNode);
  1338. }
  1339. }
  1340. }
  1341. }else {
  1342. for(DictionaryItem node : applyStatusList) {
  1343. if(currentNode.getSort()>node.getSort()) {
  1344. ProcessNodeDto processNode = new ProcessNodeDto(node,false);
  1345. processNodes.add(processNode);
  1346. }
  1347. }
  1348. }
  1349. processNodes.add(new ProcessNodeDto(currentNode,currentNode.getValue().equals(Constant.LandApplyStatus.REJECT)));
  1350. }else {
  1351. DictionaryItem currentNode = dictionaryItemService.findByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS, landApply.getApprove_status());
  1352. List<DictionaryItem> approveStatusList = approvalService.findProcessNodes(landApply.getId(),Constant.DictionaryType.STOCKLAND_APPROVE_STATUS);
  1353. for(DictionaryItem node : approveStatusList) {
  1354. ProcessNodeDto processNode = new ProcessNodeDto(node,false);
  1355. processNodes.add(processNode);
  1356. }
  1357. processNodes.add(new ProcessNodeDto(currentNode,currentNode.getValue().equals(Constant.LandApproveStatus.REJECT)));
  1358. }
  1359. return processNodes;
  1360. }
  1361. @Transactional
  1362. public String getNextChecker(){
  1363. //根据工作组名称查出工作组
  1364. Group group = groupService.findByNameAndUserType(Constant.HGXSHXZ, null,Constant.UserType.STREET,null);
  1365. StringBuffer sb = new StringBuffer("");
  1366. //如果不为空
  1367. if(null != group) {
  1368. //根据工作组id查出UserGroup
  1369. List<UserGroup> list = userGroupService.findByGroupId(group.getId());
  1370. if (null == list || list.size() == 0) {
  1371. throw new BaseException("本公司所属街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  1372. }
  1373. //构建一个StringBuffer 存放下一审核人id
  1374. for (UserGroup userGroup : list) {
  1375. Integer userId = userGroup.getUser_id();
  1376. sb.append(userId + ",");
  1377. }
  1378. }
  1379. return sb.toString();
  1380. }
  1381. @Transactional
  1382. public String getNextChecker(StockLand apply){
  1383. //根据工作组名称查出工作组
  1384. Integer streetId =null;
  1385. if(null != apply.getBuilding_street_id()) {
  1386. streetId = apply.getBuilding_street_id();
  1387. }else {
  1388. streetId = apply.getStreet_id();
  1389. }
  1390. Group group = groupService.findByNameAndUserType(Constant.HGXSHXZ, null,Constant.UserType.STREET,streetId);
  1391. StringBuffer sb = new StringBuffer("");
  1392. //如果不为空
  1393. if(null != group) {
  1394. //根据工作组id查出UserGroup
  1395. List<UserGroup> list = userGroupService.findByGroupId(group.getId());
  1396. if (null == list || list.size() == 0) {
  1397. throw new BaseException("所属街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  1398. }
  1399. //构建一个StringBuffer 存放下一审核人id
  1400. for (UserGroup userGroup : list) {
  1401. Integer userId = userGroup.getUser_id();
  1402. sb.append(userId + ",");
  1403. }
  1404. }
  1405. return sb.toString();
  1406. }
  1407. public String getCompanyRegister(Integer streeId){
  1408. //根据工作组名称查出工作组
  1409. //Group group = groupService.findByNameAndUserType(Constant.QYZCSH, null,Constant.UserType.STREET);
  1410. Group group = new Group();
  1411. group.setName(Constant.QYZCSH);
  1412. group.setUser_type(Constant.UserType.STREET);
  1413. group.setStreet_id(streeId);
  1414. Group group1 = groupService.findOne(group);
  1415. StringBuffer sb = new StringBuffer("");
  1416. //如果不为空
  1417. if(null != group1) {
  1418. //根据工作组id查出UserGroup
  1419. List<UserGroup> list = userGroupService.findByGroupId(group1.getId());
  1420. if (null == list || list.size() == 0) {
  1421. throw new BaseException("本公司所属街道企业注册审核组没有配置人员,请联系街道管理员配置!");
  1422. }
  1423. //构建一个StringBuffer 存放下一审核人id
  1424. for (UserGroup userGroup : list) {
  1425. Integer userId = userGroup.getUser_id();
  1426. sb.append(userId + ",");
  1427. }
  1428. }
  1429. return sb.toString();
  1430. }
  1431. //更新临时状态为null
  1432. public void updateTempporaryStateToNull(Integer id) {
  1433. stockLandDao.updateTempporaryStateToNull(id);
  1434. }
  1435. //找出工业用地合规性审核组所有审核人
  1436. public String findComplianceAuditUserIds(Integer apply_id) {
  1437. String checkers="";
  1438. Approval latestApproval = approvalService.getLatestApproval(apply_id,Constant.DictionaryType.STOCKLAND);
  1439. Example example = new Example(Approval.class);
  1440. Example.Criteria criteria = example.createCriteria();
  1441. criteria.andEqualTo("type",Constant.DictionaryType.STOCKLAND);
  1442. criteria.andEqualTo("apply_id",apply_id);
  1443. criteria.andEqualTo("del_flag",false);
  1444. if(null != latestApproval && null != latestApproval.getApproval_round()) {
  1445. criteria.andEqualTo("approval_round",latestApproval.getApproval_round());
  1446. }
  1447. criteria.andNotEqualTo("before_approvalstatus", Constant.LandApproveStatus.COMPLIANCE_AUDIT);
  1448. criteria.andEqualTo("after_approvalstatus", Constant.LandApproveStatus.COMPLIANCE_AUDIT);
  1449. List<Approval> approvals = approvalService.selectByExample(example);
  1450. if(null != approvals && approvals.size()>0) {
  1451. for(Approval appr : approvals) {
  1452. checkers += appr.getNextchecker();
  1453. }
  1454. }
  1455. return checkers;
  1456. }
  1457. public List<GovStatisticsDto> getApplyResult(SearchCondition searchCondition) {
  1458. return stockLandDao.getApplyResult(searchCondition);
  1459. }
  1460. public List<GovStatisticsDto> getApplyRate(SearchCondition searchCondition) {
  1461. return stockLandDao.getApplyRate(searchCondition);
  1462. }
  1463. public List<GovStatisticsDto> getStreetHandleCompare(SearchCondition searchCondition) {
  1464. return stockLandDao.getStreetHandleCompare(searchCondition);
  1465. }
  1466. public void getApplyInfo(Integer id, ModelMap modelMap) {
  1467. StockLand landApply = findLandApplyById(id);
  1468. modelMap.put("landApply", landApply);
  1469. List<ProcessNodeDto> processNodes = getProcessNodes(landApply, true); //流程节点
  1470. modelMap.put("processNodesList", processNodes);
  1471. stockLandMaterialService.getApplyMaterials(landApply, modelMap);
  1472. // modelMap.put("fileUrl", setFileUrl());
  1473. //企业信息
  1474. ProjectApplicationCompanyInfo companyInfo = projectApplicationCompanyInfoService.findByApplyIdAndType(id, Constant.DictionaryType.STOCKLAND);
  1475. if (companyInfo == null) {
  1476. Company company = companyService.getCompanyInfo(landApply.getCompany_id());
  1477. if (Objects.equals(company.getIndustry_code(), "Empty")) {
  1478. company.setIndustry_code(company.getIndustry_name());
  1479. } else {
  1480. company.setIndustry_code(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.INDUSTRY_TYPE, company.getIndustry_code()));
  1481. }
  1482. modelMap.put("companyInfo", company);
  1483. } else {
  1484. if (Objects.equals(companyInfo.getIndustry_code(), "Empty")) {
  1485. companyInfo.setIndustry_code(companyInfo.getIndustry_name());
  1486. } else {
  1487. companyInfo.setIndustry_code(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.INDUSTRY_TYPE, companyInfo.getIndustry_code()));
  1488. }
  1489. modelMap.put("companyInfo", companyInfo);
  1490. }
  1491. //Integer companyId = landApply.getCompany_id();
  1492. //modelMap.put("companyInfo", companyService.getCompanyInfo(companyId));//企业信息
  1493. List<Approval> approvalList = approvalService.getApplyApprovalList(id);
  1494. modelMap.put("approvalList", approvalList); //流程信息
  1495. }
  1496. public List<StockLand> findListByCondition(SearchCondition searchCondition) {
  1497. return stockLandDao.findListByCondition(searchCondition);
  1498. }
  1499. }