StockLandApproveService.java 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135
  1. package platform.modules.company.service;
  2. import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
  3. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  4. import com.aliyuncs.exceptions.ClientException;
  5. import com.github.pagehelper.PageHelper;
  6. import com.github.pagehelper.PageInfo;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import platform.common.Constant;
  14. import platform.common.base.model.DictionaryItem;
  15. import platform.common.base.service.BaseService;
  16. import platform.common.base.service.DictionaryItemService;
  17. import platform.common.base.service.DictionaryTypeService;
  18. import platform.common.exception.BaseException;
  19. import platform.common.util.AlibabaSMSUtil;
  20. import platform.common.util.DateUtil;
  21. import platform.common.util.ShiroUtils;
  22. import platform.modules.build.entity.BuildFloor;
  23. import platform.modules.build.entity.Company;
  24. import platform.modules.build.entity.CompanyContact;
  25. import platform.modules.build.service.CompanyContactService;
  26. import platform.modules.build.service.CompanyService;
  27. import platform.modules.build.service.ContractService;
  28. import platform.modules.build.service.FloorService;
  29. import platform.modules.carrier.entity.Building;
  30. import platform.modules.carrier.entity.Contract;
  31. import platform.modules.carrier.entity.ContractFloor;
  32. import platform.modules.carrier.service.BuildingService;
  33. import platform.modules.carrier.service.IcContractService;
  34. import platform.modules.company.dao.StockLandDao;
  35. import platform.modules.company.dto.StockLandApprovalDto;
  36. import platform.modules.company.dto.TypeAndStreetDto;
  37. import platform.modules.company.entity.ProcessFeedback;
  38. import platform.modules.company.entity.ProjectApplicationCompanyInfo;
  39. import platform.modules.company.entity.StockLand;
  40. import platform.modules.government.dao.AttachmentDao;
  41. import platform.modules.government.entity.FileDown;
  42. import platform.modules.government.entity.User;
  43. import platform.modules.government.service.UserService;
  44. import platform.modules.home.request.FindRequest;
  45. import platform.modules.sys.dao.UserGroupDao;
  46. import platform.modules.sys.entity.Approval;
  47. import platform.modules.sys.entity.Group;
  48. import platform.modules.sys.entity.Message;
  49. import platform.modules.sys.entity.UserGroup;
  50. import platform.modules.sys.report.UserData;
  51. import platform.modules.sys.service.ApprovalService;
  52. import platform.modules.sys.service.GroupService;
  53. import platform.modules.sys.service.MessageService;
  54. import platform.modules.sys.service.UserGroupService;
  55. import platform.modules.sys.service.WaitToDoService;
  56. import javax.annotation.Resource;
  57. import java.text.ParseException;
  58. import java.text.SimpleDateFormat;
  59. import java.util.*;
  60. /**
  61. * 存量用地审核Service
  62. *
  63. * @author hp
  64. */
  65. @Service
  66. @Transactional
  67. public class StockLandApproveService extends BaseService<StockLand> {
  68. private static final Logger logger = LoggerFactory.getLogger(StockLandApproveService.class);
  69. @Autowired
  70. private StockLandService stockLandService;
  71. @Autowired
  72. private MessageService messageService;
  73. @Autowired
  74. private ApprovalService approvalService;
  75. @Resource
  76. private UserGroupDao userGroupDao;
  77. @Resource
  78. private StockLandDao stockLandDao;
  79. @Resource
  80. private AttachmentDao attachmentDao;
  81. @Autowired
  82. private ProcessFeedbackService processFeedbackService;
  83. @Autowired
  84. private UserService userService;
  85. @Autowired
  86. private GroupService groupService;
  87. @Autowired
  88. private UserGroupService userGroupService;
  89. @Autowired
  90. private DictionaryItemService dictionaryItemService;
  91. @Autowired
  92. private DictionaryTypeService dictionaryTypeService;
  93. @Autowired
  94. private CompanyContactService companyContactService;
  95. @Autowired
  96. private ProjectApplicationCompanyInfoService projectApplicationCompanyInfoService;
  97. @Autowired
  98. private WaitToDoService waitToDoService;
  99. @Autowired
  100. private IcContractService contractService;
  101. @Autowired
  102. private CompanyService companyService;
  103. @Autowired
  104. private BuildingService buildingService;
  105. @Autowired
  106. private FloorService floorService;
  107. /**
  108. * 审核列表数据
  109. *
  110. * @param pageNum
  111. * @param pageSize
  112. * @param param
  113. * @param searchCondition
  114. * @return
  115. * @throws Exception
  116. */
  117. @Transactional(readOnly = true)
  118. public PageInfo<StockLand> findPage(Integer pageNum, Integer pageSize, String param, StockLand searchCondition) throws Exception {
  119. Approval approvalCondition = new Approval();
  120. approvalCondition.setNextchecker(String.valueOf(ShiroUtils.getUserId()));
  121. approvalCondition.setType(Constant.DictionaryType.STOCKLAND);
  122. FindRequest request = new FindRequest();
  123. request.setKeyword(param);
  124. Integer userType = ShiroUtils.getUserType();
  125. if (userType.equals(Constant.UserType.STREET)) {
  126. Integer streetId = ShiroUtils.getStreetId();
  127. request.setStreet_id(streetId);
  128. }
  129. PageHelper.startPage(pageNum, pageSize);
  130. List<StockLand> landApplys = stockLandDao.findApprovePageInfo(request, searchCondition, approvalCondition);
  131. for (StockLand stockLand : landApplys) {
  132. stockLandService.getFullLandInfo(stockLand);
  133. //绑定处理时间 、绑定是否需要街道通知企业
  134. if (searchCondition.getIsPendingAudit() == Constant.PendingAuditStatus.PENDING_AUDIT) {
  135. //剩余或超出时间
  136. Approval latestApproval = approvalService.getLatestApproval(stockLand.getId(), Constant.DictionaryType.STOCKLAND);
  137. if (null != latestApproval) {
  138. Integer overTime = 5;
  139. if (stockLand.getApply_type().equals(Constant.LandApplyType.RENT)) {
  140. overTime = 10;
  141. }
  142. String overTimeStr = DateUtil.getOverTimeStr(latestApproval.getCreate_time(), overTime);
  143. stockLand.setOverTimeStr(overTimeStr);
  144. }
  145. //是否是政府返回的申请数据,需要确认并通知
  146. if (isPendingNotify(stockLand)) {
  147. stockLand.setIsPendingNotify(Constant.PendingNotifyStatus.PENDING_NOTIFY);
  148. }
  149. //是否到了登录用户的审核层级
  150. String[] userIds = latestApproval.getNextchecker().split(",");
  151. User currUser = ShiroUtils.getUserEntity();
  152. if (userIds.length > 0) {
  153. for (String userId : userIds) {
  154. User user = userService.findById(Integer.valueOf(userId));
  155. if (null != user.getApprove_level() && null != currUser.getApprove_level() && user.getApprove_level() > currUser.getApprove_level()) {
  156. stockLand.setIsApproval(0);
  157. }
  158. }
  159. }
  160. if (stockLand.getCanEdit() || null != stockLand.getProcess_status()
  161. || !isPendingAudit(stockLand)) {
  162. //不能审核
  163. stockLand.setIsApproval(0);
  164. }
  165. } else {
  166. //已处理的数据,处理时间
  167. Approval latestApproval = approvalService.getLatestApprovalByUser(stockLand.getId(), Constant.DictionaryType.STOCKLAND, ShiroUtils.getUserId());
  168. if (null != latestApproval) {
  169. Integer overTime = 5;
  170. if (stockLand.getApply_type().equals(Constant.LandApplyType.RENT)) {
  171. overTime = 10;
  172. }
  173. String dealTimeStr = DateUtil.getDealTimeStr(latestApproval.getCreate_time(), latestApproval.getDeal_time(), overTime);
  174. stockLand.setOverTimeStr(dealTimeStr);
  175. //审核时间
  176. stockLand.setDeal_time(latestApproval.getCreate_time());
  177. }
  178. //最近一次是否是当前用户审核的,如果是且没有撤回,则可撤回
  179. if (!(stockLand.getApprove_status().equals(Constant.LandApproveStatus.APPROVED) || stockLand.getApprove_status().equals(Constant.LandApproveStatus.PASSED)
  180. || stockLand.getApprove_status().equals(Constant.LandApproveStatus.NOTPASSED))) {
  181. Approval latestAllApproval = approvalService.getLatestApprovalAll(stockLand.getId(), Constant.DictionaryType.STOCKLAND);
  182. if (null != latestAllApproval) {
  183. if (null == latestAllApproval.getIs_withdraw() && !latestAllApproval.getOper_type().equals(Constant.OperType.CONFIRM_AND_NOTIFY)) {
  184. //没有撤回过,不是确认并通知
  185. if (null != latestAllApproval.getChecker() && latestAllApproval.getChecker().equals(ShiroUtils.getUserId())) {
  186. //最后一次操作是当前用户
  187. stockLand.setCanWithdraw(Constant.True_False.TRUE);
  188. }
  189. }
  190. }
  191. //stockLand.setCanWithdraw(this.canWithdraw(stockLand,ShiroUtils.getUserId()));
  192. }
  193. }
  194. }
  195. return new PageInfo<StockLand>(landApplys);
  196. }
  197. //当前单据是否可以撤回
  198. private Integer canWithdraw(StockLand stockLand, int userId) {
  199. Approval latestAllApprovalByUser = approvalService.getLatestApprovalAllByUser(stockLand.getId(), Constant.DictionaryType.STOCKLAND, userId);
  200. if (null == latestAllApprovalByUser.getIs_withdraw() && latestAllApprovalByUser.getCan_withdraw().equals(Constant.True_False.TRUE)) {
  201. return Constant.True_False.TRUE;
  202. }
  203. return Constant.True_False.FASLE;
  204. }
  205. //审核方法
  206. public Boolean approve(StockLandApprovalDto approval) {
  207. StockLand apply = stockLandService.findLandApplyById(approval.getApply_id());
  208. if (null != apply) {
  209. StockLand stockland = stockLandService.findLandApplyById(approval.getApply_id());
  210. stockland.setIs_in_park(approval.getIs_in_park());
  211. if (apply.getApply_type().equals(Constant.LandApplyType.RENT)) {
  212. //房屋出租
  213. if(Objects.equals(approval.getIs_in_park(),"1")){
  214. //在园区内
  215. this.saveContract(approval);
  216. }else if(Objects.equals(approval.getIs_in_park(),"0")){
  217. //不在园区内
  218. stockland.setOut_park_location(approval.getOut_park_location());
  219. stockland.setOut_park_contract_area(approval.getOut_park_contract_area());
  220. stockland.setOut_park_contract_start(approval.getOut_park_contract_start());
  221. stockland.setOut_park_contract_end(approval.getOut_park_contract_end());
  222. }
  223. stockLandService.updateSelective(stockland);
  224. return rentAuditLocal(apply, approval);
  225. } else {
  226. return auditLocal(apply, approval);
  227. }
  228. }
  229. return false;
  230. }
  231. private int saveContract(StockLandApprovalDto approval) {
  232. StockLand stockland = stockLandService.findLandApplyById(approval.getApply_id());
  233. Company company = companyService.findCompanyInfo(stockland.getCompany_id());
  234. Contract contract = approval.getContract();
  235. List<ContractFloor> floors = contract.getFloors();
  236. Iterator<ContractFloor> it = floors.iterator();
  237. Double area = 0d;
  238. while (it.hasNext()) {
  239. ContractFloor floor = it.next();
  240. if (floor.getFloor_id() == null) {
  241. it.remove();
  242. } else {
  243. BuildFloor buildFloor = floorService.findById(floor.getFloor_id());
  244. Building building = buildingService.findBuildingById(buildFloor.getBuilding_id());
  245. floor.setFloor(buildFloor.getFloor());
  246. floor.setBuilding_id(building.getId());
  247. floor.setBuilding_name(building.getBuild_name());
  248. area += floor.getArea();
  249. }
  250. }
  251. contract.setFloors(floors);
  252. contract.setCompany_id(company.getId());
  253. contract.setCompany_name(company.getCompany_name());
  254. contract.setArea(area);
  255. contract.setOrganization_code(company.getOrganization_code());
  256. contract.setUscc(company.getUscc());
  257. int contractId = contractService.saveContract(contract);
  258. stockland.setContract_id(contractId);
  259. stockLandService.updateSelective(stockland);
  260. return contractId;
  261. }
  262. //房屋出租审核街道属地初审
  263. private Boolean rentAuditLocal(StockLand apply, StockLandApprovalDto approval) {
  264. Boolean flag = true;
  265. approval.setApproval_department(ShiroUtils.getUserEntity().getStreet_name());
  266. if (approval.getStatus().equals(Constant.ApproveButtonStatus.REJECT)) {
  267. //退回
  268. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  269. if (null != latestApproval) {
  270. String nextChecker = latestApproval.getNextchecker();
  271. //2.找出下一审核人
  272. String[] nextCheckerArr = nextChecker.split(",");
  273. if (null != nextCheckerArr && nextCheckerArr.length > 0) {
  274. //“街道合规性审核小组”最后一个人审核(退回)
  275. /*if(nextCheckerArr.length == 1){
  276. //apply.setApprove_status(Constant.LandApproveStatus.REJECT);
  277. apply.setTemporary_state(Constant.LandApproveStatus.REJECT);//记录状态
  278. //街道所有工业用地审核组的人都可以确认并通知
  279. if(StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  280. nextChecker = get_HGXSHXZ_Checkers();
  281. }else {
  282. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  283. }
  284. }else{
  285. //不是最后一个人审核
  286. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  287. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  288. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  289. }*/
  290. //2018-05-11 - 街道办事员也可以退回
  291. apply.setTemporary_state(Constant.LandApproveStatus.REJECT);//记录状态
  292. //街道所有工业用地审核组的人都可以确认并通知
  293. if (StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  294. nextChecker = get_HGXSHXZ_Checkers();
  295. } else {
  296. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  297. }
  298. }
  299. insertApproval(apply, Constant.OperType.REJECT, nextChecker, approval);
  300. //新增待办
  301. String handler = nextChecker;
  302. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + apply.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, apply.getId(),
  303. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  304. }
  305. } else if (approval.getStatus().equals(Constant.ApproveButtonStatus.APPROVED)) {
  306. //通过
  307. apply.setApprove_status(Constant.LandApproveStatus.APPROVED);
  308. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  309. if (null != latestApproval) {
  310. String nextChecker = latestApproval.getNextchecker();
  311. //2.找出下一审核人
  312. //String [] nextCheckerArr = nextChecker.split(",");
  313. //判断是第几级审核,每一级只要一个审核过了就过了。 --20180528--
  314. nextChecker = getNextLevelChecker(ShiroUtils.getUserId(), nextChecker);
  315. if (StringUtils.isNotBlank(nextChecker)) {
  316. //还有下级审核
  317. //不是最后一个人审核
  318. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  319. stockLandService.sendAuditMessage(apply, Constant.UserType.STREET, null, stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  320. } else {
  321. //没有下级审核领导审核通过
  322. //apply.setApprove_status(Constant.LandApproveStatus.APPROVED);
  323. apply.setTemporary_state(Constant.LandApproveStatus.APPROVED);//记录状态
  324. //街道所有工业用地审核组的人都可以确认并通知
  325. if (StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  326. nextChecker = get_HGXSHXZ_Checkers();
  327. } else {
  328. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  329. }
  330. }
  331. /* 每一级用户所有人都要审核
  332. * if(null != nextCheckerArr && nextCheckerArr.length > 0){
  333. //“街道合规性审核小组”最后一个人审核(通过)
  334. if(nextCheckerArr.length == 1){
  335. //apply.setApprove_status(Constant.LandApproveStatus.APPROVED);
  336. apply.setTemporary_state(Constant.LandApproveStatus.APPROVED);//记录状态
  337. //街道所有工业用地审核组的人都可以确认并通知
  338. if(StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  339. nextChecker = get_HGXSHXZ_Checkers();
  340. }else {
  341. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  342. }
  343. }else{
  344. //不是最后一个人审核
  345. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  346. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  347. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  348. }
  349. }*/
  350. insertApproval(apply, Constant.OperType.APPROVED, nextChecker, approval);
  351. //新增待办
  352. String handler = nextChecker;
  353. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + apply.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, apply.getId(),
  354. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  355. }
  356. } else if (approval.getStatus().equals(Constant.ApproveButtonStatus.NOTAPPROVED)) {
  357. //不通过,直接不通过,无需再审核
  358. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  359. if (null != latestApproval) {
  360. String nextChecker = latestApproval.getNextchecker();
  361. /*
  362. //2.找出下一审核人
  363. String [] nextCheckerArr = nextChecker.split(",");
  364. if(null != nextCheckerArr && nextCheckerArr.length > 0){
  365. //“街道合规性审核小组”最后一个人审核(退回)
  366. if(nextCheckerArr.length == 1){
  367. //apply.setApprove_status(Constant.LandApproveStatus.NOTAPPROVED);
  368. apply.setTemporary_state(Constant.LandApproveStatus.NOTAPPROVED);//记录状态
  369. //nextChecker = String.valueOf(apply.getCreate_by());
  370. //街道所有工业用地审核组的人都可以确认并通知
  371. if(StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  372. nextChecker = get_HGXSHXZ_Checkers();
  373. }else {
  374. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  375. }
  376. }else{
  377. //不是最后一个人审核
  378. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  379. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  380. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  381. }
  382. }*/
  383. //apply.setApprove_status(Constant.LandApproveStatus.NOTAPPROVED);
  384. apply.setTemporary_state(Constant.LandApproveStatus.NOTAPPROVED);//记录状态
  385. //nextChecker = String.valueOf(apply.getCreate_by());
  386. //街道所有工业用地审核组的人都可以确认并通知
  387. if (StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  388. nextChecker = get_HGXSHXZ_Checkers();
  389. } else {
  390. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  391. }
  392. insertApproval(apply, Constant.OperType.NOTAPPROVED, nextChecker, approval);
  393. //新增待办
  394. String handler = nextChecker;
  395. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + apply.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, apply.getId(),
  396. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  397. }
  398. } else if (approval.getStatus().equals(Constant.ApproveButtonStatus.SUBMIT_COMMENT)) {
  399. //提交审核意见
  400. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  401. if (null != latestApproval) {
  402. String nextChecker = latestApproval.getNextchecker();
  403. //2.找出下一审核人
  404. nextChecker = getNextLevelChecker(ShiroUtils.getUserId(), nextChecker);
  405. if (StringUtils.isNotBlank(nextChecker)) {
  406. //还有下级审核
  407. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  408. //nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  409. stockLandService.sendAuditMessage(apply, Constant.UserType.STREET, null, stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  410. //新增待办
  411. String handler = nextChecker;
  412. waitToDoService.newTODO("存量用地审核", "/stockLand/approvePage/" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  413. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  414. }
  415. /*String [] nextCheckerArr = nextChecker.split(",");
  416. if(null != nextCheckerArr && nextCheckerArr.length > 0){
  417. //街道合规性审核小组不是最后一个人审核
  418. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  419. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  420. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  421. }*/
  422. insertApproval(apply, Constant.OperType.SUBMIT_COMMENT, nextChecker, approval);
  423. }
  424. }
  425. flag = stockLandService.updateSelective(apply) > 0;
  426. return flag;
  427. }
  428. //找到下一级审核人
  429. private String getNextLevelChecker(Integer currCheckerId, String nextChecker) {
  430. String[] nextCheckerArr = nextChecker.split(",");
  431. User currChecker = userService.findById(currCheckerId);
  432. Integer level = currChecker.getApprove_level();
  433. if (null == level) {
  434. throw new BaseException("当前用户没有审核层级,请检查");
  435. }
  436. //去除相同级别的checker
  437. for (String userId : nextCheckerArr) {
  438. User checker = userService.findById(Integer.valueOf(userId));
  439. if (null == checker.getApprove_level()) {
  440. throw new BaseException("审核组有审核人员没有审核层级,请检查");
  441. }
  442. if (null != checker.getApprove_level() && checker.getApprove_level().equals(level)) {
  443. nextChecker = nextChecker.replace(userId + ",", "");
  444. }
  445. }
  446. return nextChecker;
  447. }
  448. //其他三种审核-街道属地初审
  449. private Boolean auditLocal(StockLand apply, StockLandApprovalDto approval) {
  450. Boolean flag = true;
  451. approval.setApproval_department(ShiroUtils.getUserEntity().getStreet_name());
  452. if (approval.getStatus().equals(Constant.ApproveButtonStatus.REJECT)) {
  453. //退回
  454. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  455. if (null != latestApproval) {
  456. String nextChecker = latestApproval.getNextchecker();
  457. //2.找出下一审核人
  458. String[] nextCheckerArr = nextChecker.split(",");
  459. if (null != nextCheckerArr && nextCheckerArr.length > 0) {
  460. //“街道合规性审核小组”最后一个人审核(退回)
  461. /*if(nextCheckerArr.length == 1){
  462. apply.setApprove_status(Constant.LandApproveStatus.REJECT);
  463. nextChecker = String.valueOf(apply.getCreate_by());
  464. apply.setApprove_status(Constant.LandApproveStatus.REJECT);//记录状态
  465. //街道所有工业用地审核组的人都可以确认并通知
  466. //根据工作组名称查出工作组
  467. if(StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  468. nextChecker = get_HGXSHXZ_Checkers();
  469. }else {
  470. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  471. }
  472. }else{
  473. //不是最后一个人审核
  474. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  475. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  476. stockLandService.sendAuditMessage(apply,Constant.UserType.GOVERNMENT,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  477. }*/
  478. //2018-05-11 - 街道办事员也可以退回
  479. apply.setApprove_status(Constant.LandApproveStatus.REJECT);//记录状态
  480. //街道所有工业用地审核组的人都可以确认并通知
  481. //根据工作组名称查出工作组
  482. if (StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  483. nextChecker = get_HGXSHXZ_Checkers();
  484. } else {
  485. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  486. }
  487. }
  488. insertApproval(apply, Constant.OperType.REJECT, nextChecker, approval);
  489. //新增待办
  490. String handler = nextChecker;
  491. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + apply.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, apply.getId(),
  492. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  493. }
  494. } else if (approval.getStatus().equals(Constant.ApproveButtonStatus.APPROVED)) {
  495. //通过
  496. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  497. if (null != latestApproval) {
  498. String nextChecker = latestApproval.getNextchecker();
  499. //2.找出下一审核人
  500. //String [] nextCheckerArr = nextChecker.split(",");
  501. //判断是第几级审核,每一级只要一个审核过了就过了。 --20180528--
  502. nextChecker = getNextLevelChecker(ShiroUtils.getUserId(), nextChecker);
  503. if (StringUtils.isNotBlank(nextChecker)) {
  504. //还有下级审核
  505. //不是最后一个人审核
  506. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  507. stockLandService.sendAuditMessage(apply, Constant.UserType.STREET, null, stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  508. //新增待办
  509. String handler = nextChecker;
  510. waitToDoService.newTODO("存量用地审核", "/stockLand/approvePage/" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  511. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  512. } else {
  513. //没有下级审核领导审核通过
  514. apply.setApprove_status(Constant.LandApproveStatus.PENDING_DISTRIBUTE);
  515. nextChecker = userGroupDao.findUserIdsByGroupName(Constant.GroupName.UNITEDWORKGROUP) + ",";
  516. if (StringUtils.isBlank(nextChecker)) {
  517. throw new BaseException("协调工作组暂无审核人员,请联系政府管理员配置!");
  518. }
  519. List<Integer> checkerIds = new ArrayList<Integer>();
  520. for (String checkerId : nextChecker.split(",")) {
  521. checkerIds.add(Integer.valueOf(checkerId));
  522. }
  523. stockLandService.sendAuditMessage(apply, Constant.UserType.GOVERNMENT, null, checkerIds);
  524. //新增待办
  525. String handler = nextChecker;
  526. waitToDoService.newTODO("存量用地审核", "/areaManager/approval?id=" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  527. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  528. }
  529. /*String [] nextCheckerArr = nextChecker.split(",");
  530. if(null != nextCheckerArr && nextCheckerArr.length > 0){
  531. //“街道合规性审核小组”最后一个人审核
  532. if(nextCheckerArr.length == 1){
  533. apply.setApprove_status(Constant.LandApproveStatus.PENDING_DISTRIBUTE);
  534. nextChecker = userGroupDao.findUserIdsByGroupName(Constant.GroupName.UNITEDWORKGROUP);
  535. if(StringUtils.isBlank(nextChecker)) {
  536. throw new BaseException("协调工作组暂无审核人员,请联系政府管理员配置!");
  537. }
  538. List<Integer> checkerIds = new ArrayList<Integer>();
  539. for(String checkerId : nextChecker.split(",")) {
  540. checkerIds.add(Integer.valueOf(checkerId));
  541. }
  542. stockLandService.sendAuditMessage(apply,Constant.UserType.GOVERNMENT,null,checkerIds);
  543. }else{
  544. //不是最后一个人审核
  545. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  546. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  547. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  548. }
  549. }*/
  550. insertApproval(apply, Constant.OperType.APPROVED, nextChecker, approval);
  551. }
  552. } else if (approval.getStatus().equals(Constant.ApproveButtonStatus.NOTAPPROVED)) {
  553. //不通过
  554. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  555. if (null != latestApproval) {
  556. String nextChecker = latestApproval.getNextchecker();
  557. //2.找出下一审核人
  558. /*String [] nextCheckerArr = nextChecker.split(",");
  559. if(null != nextCheckerArr && nextCheckerArr.length > 0){
  560. //“街道合规性审核小组”最后一个人审核
  561. if(nextCheckerArr.length == 1){
  562. apply.setApprove_status(Constant.LandApproveStatus.NOTAPPROVED);//记录状态
  563. //街道所有工业用地审核组的人都可以确认并通知
  564. //根据工作组名称查出工作组
  565. if(StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  566. nextChecker = get_HGXSHXZ_Checkers();
  567. }else {
  568. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  569. }
  570. }else{
  571. //不是最后一个人审核
  572. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  573. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  574. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  575. }
  576. }*/
  577. apply.setApprove_status(Constant.LandApproveStatus.NOTAPPROVED);//记录状态
  578. //nextChecker = String.valueOf(apply.getCreate_by());
  579. //街道所有工业用地审核组的人都可以确认并通知
  580. if (StringUtils.isNotBlank(get_HGXSHXZ_Checkers())) {
  581. nextChecker = get_HGXSHXZ_Checkers();
  582. } else {
  583. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  584. }
  585. insertApproval(apply, Constant.OperType.NOTAPPROVED, nextChecker, approval);
  586. //新增待办
  587. String handler = nextChecker;
  588. waitToDoService.newTODO("存量用地确认并通知", "/stockLand/confirmPage/" + apply.getId(), Constant.WaitToDo_OperType.CONFIRM_AND_NOTIFY, apply.getId(),
  589. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  590. }
  591. } else if (approval.getStatus().equals(Constant.ApproveButtonStatus.SUBMIT_COMMENT)) {
  592. //提交审核意见
  593. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  594. if (null != latestApproval) {
  595. String nextChecker = latestApproval.getNextchecker();
  596. //2.找出下一审核人
  597. nextChecker = getNextLevelChecker(ShiroUtils.getUserId(), nextChecker);
  598. if (StringUtils.isNotBlank(nextChecker)) {
  599. //还有下级审核
  600. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  601. //nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  602. stockLandService.sendAuditMessage(apply, Constant.UserType.STREET, null, stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  603. }
  604. /*String [] nextCheckerArr = nextChecker.split(",");
  605. if(null != nextCheckerArr && nextCheckerArr.length > 0){
  606. //街道合规性审核小组不是最后一个人审核
  607. apply.setApprove_status(Constant.LandApproveStatus.LOCAL_AUDIT);
  608. nextChecker = nextChecker.replace(ShiroUtils.getUserId()+",","");
  609. stockLandService.sendAuditMessage(apply,Constant.UserType.STREET,null,stockLandService.getNextCheckersByLevelAndIdsStr(nextChecker));
  610. }*/
  611. insertApproval(apply, Constant.OperType.SUBMIT_COMMENT, nextChecker, approval);
  612. //新增待办
  613. String handler = nextChecker;
  614. waitToDoService.newTODO("存量用地审核", "/stockLand/approvePage/" + apply.getId(), Constant.WaitToDo_OperType.AUDIT, apply.getId(),
  615. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  616. }
  617. }
  618. flag = stockLandService.updateSelective(apply) > 0;
  619. return flag;
  620. }
  621. //确认并通知企业
  622. public Boolean confirm(Message message) {
  623. logger.info("==== 进行单据处理 ====");
  624. logger.info("当前消息message:{}", message);
  625. StockLand apply = stockLandService.findById(message.getApply_id());
  626. logger.info("当前消息apply:{}", apply);
  627. if (null != apply) {
  628. int[] pushIds = {apply.getCompany_id()};
  629. message.setBusiness_type(Constant.Message_Business_type.STOCKLAND);
  630. message.setBusiness_type_name(Constant.DictionaryType.STOCKLAND);
  631. messageService.saveMessageAndPush(message, pushIds, Constant.UserType.COMPANY);
  632. //2018-08-23 如果是受理员申请的,同时通知受理
  633. User createUser = userService.findById(apply.getCreate_by());
  634. if (null != createUser) {
  635. int[] pushStreetIds = {apply.getCreate_by()};
  636. if (createUser.getUser_type().equals(Constant.UserType.STREET)) {
  637. messageService.saveMessageAndPushToUser(message, pushStreetIds, Constant.UserType.STREET);
  638. }
  639. }
  640. //通知企业,给applystatus赋值,企业可以看到状态改变
  641. if (apply.getApply_type().equals(Constant.LandApplyType.RENT)) {
  642. apply.setApprove_status(apply.getTemporary_state());
  643. }
  644. // 不建议这种写法,会出现空指针
  645. // if(apply.getApprove_status().equals(Constant.LandApproveStatus.REJECT)) {
  646. // apply.setApply_status(Constant.LandApplyStatus.REJECT);
  647. // }else if(apply.getApprove_status().equals(Constant.LandApproveStatus.APPROVED)) {
  648. // apply.setApply_status(Constant.LandApplyStatus.APPROVED);
  649. // apply.setProcess_status(Constant.ProcessStatus.IN_PROGRESS);
  650. // }else if(apply.getApprove_status().equals(Constant.LandApproveStatus.NOTAPPROVED)) {
  651. // apply.setApply_status(Constant.LandApplyStatus.NOTAPPROVED);
  652. // }
  653. if (Objects.equals(apply.getApprove_status(), Constant.LandApproveStatus.REJECT)) {
  654. apply.setApply_status(Constant.LandApplyStatus.REJECT);
  655. }
  656. if (Objects.equals(apply.getApprove_status(), Constant.LandApproveStatus.APPROVED)
  657. || Objects.equals(apply.getApprove_status(), Constant.LandApproveStatus.EASY_PROCESS_APPROVED)) {
  658. apply.setApply_status(Constant.LandApplyStatus.APPROVED);
  659. apply.setProcess_status(Constant.ProcessStatus.IN_PROGRESS);
  660. }
  661. if (Objects.equals(apply.getApprove_status(), Constant.LandApproveStatus.NOTAPPROVED)
  662. || Objects.equals(apply.getApprove_status(), Constant.LandApproveStatus.EASY_PROCESS_DENY)) {
  663. apply.setApply_status(Constant.LandApplyStatus.NOTAPPROVED);
  664. }
  665. // else {
  666. logger.info("===单据信息====");
  667. logger.info("单据的状态:{}", apply.getApprove_status());
  668. logger.info("单据数据:{}", apply);
  669. logger.info("消息数据:{}", message);
  670. logger.info("============");
  671. // throw new RuntimeException("错误的单据状态:" + apply.getApprove_status());
  672. // }
  673. stockLandService.updateSelective(apply);
  674. //置空临时状态
  675. stockLandService.updateTempporaryStateToNull(apply.getId());
  676. //如果街道确认并通知企业,插入街道通知企业的数据,不然审核流一直停留在街道
  677. StockLandApprovalDto approval = new StockLandApprovalDto();
  678. approval.setApproval_department(ShiroUtils.getUserEntity().getStreet_name());
  679. String nextChecker = String.valueOf(apply.getCreate_by());
  680. if (apply.getApprove_status().equals(Constant.LandApproveStatus.APPROVED)) {
  681. nextChecker = "";
  682. }
  683. approval.setApproval_comment(message.getContent());
  684. insertApproval(apply, Constant.OperType.CONFIRM_AND_NOTIFY, nextChecker, approval);
  685. if (apply.getApprove_status().equals(Constant.LandApproveStatus.REJECT)) {
  686. //新增待办
  687. String handler = String.valueOf(apply.getCreate_by());
  688. waitToDoService.newTODO("存量用地编辑", "/stockLand/editApply/" + apply.getId(), Constant.WaitToDo_OperType.EDIT, apply.getId(),
  689. Constant.DictionaryType.STOCKLAND, apply.getApply_no(), handler, Constant.WaitToDo_IsSerial.IS_SERIAL);
  690. } else {
  691. waitToDoService.completeAllTODO(apply.getId(), Constant.DictionaryType.STOCKLAND);
  692. }
  693. return true;
  694. }
  695. return false;
  696. }
  697. public Boolean sendMsg(Message message) {
  698. StockLand apply = stockLandService.findById(message.getApply_id());
  699. //发送短信通知企业
  700. try {
  701. Boolean flag = sendSMSToCompany(apply, message);
  702. return flag;
  703. } catch (ClientException | InterruptedException e) {
  704. throw new BaseException("短信接口异常!发送短信失败!");
  705. }
  706. }
  707. private Boolean sendSMSToCompany(StockLand apply, Message message) throws ClientException, InterruptedException {
  708. String phone = "";
  709. CompanyContact contact = companyContactService.findFirstByCompanyId(apply.getCompany_id());
  710. ProjectApplicationCompanyInfo companyInfo = projectApplicationCompanyInfoService.findByApplyIdAndType(apply.getId(), Constant.DictionaryType.STOCKLAND);
  711. if (null != companyInfo && null != companyInfo.getContact_phone()) {
  712. phone = companyInfo.getContact_phone();
  713. } else if (null != contact) {
  714. phone = contact.getPhone();
  715. }
  716. if (StringUtils.isNotBlank(phone)) {
  717. // ${street_name}提醒您,您的存量用地申请 :${apply_type}(单号:${apply_no})单据已审核,
  718. // 状态为: ${approve_status} ! 具体信息请登录PC端查看。感谢您的支持。
  719. String apply_no = apply.getApply_no();
  720. String apply_type = "";
  721. if (StringUtils.isNotBlank(apply.getApply_type())) {
  722. apply_type = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND, apply.getApply_type());
  723. }
  724. String approve_status = dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS, apply.getApprove_status());
  725. String street_name = ShiroUtils.getUserEntity().getStreet_name();
  726. String templateParam = "{\"street_name\":\"" + street_name + "\",\"apply_type\":\"" + apply_type + "\",\"apply_no\":\"" + apply_no + "\",\"approve_status\":\"" + approve_status + "\"}";
  727. AlibabaSMSUtil.sendSMS(phone, Constant.SMS_TemplateCode.STOCKLAND_CONFIRM_AND_NOTIFY, "企业提升发展服务平台", templateParam);
  728. return true;
  729. } else {
  730. return false;
  731. }
  732. }
  733. //插审核工作流表,审核材料
  734. public void insertApproval(StockLand apply, String oper_type, String nextChecker, StockLandApprovalDto approval) {
  735. Approval latestApproval = approvalService.getLatestApproval(apply.getId(), Constant.DictionaryType.STOCKLAND);
  736. //设置审核完成时间
  737. latestApproval.setDeal_time(DateUtil.getTimeString(new Date()));
  738. approvalService.updateSelective(latestApproval);
  739. //添加新审核流
  740. Approval approvalInfo = new Approval();
  741. approvalInfo.setApply_id(apply.getId());
  742. approvalInfo.setBefore_approvalstatus(latestApproval.getAfter_approvalstatus());
  743. approvalInfo.setAfter_approvalstatus(apply.getApprove_status());
  744. approvalInfo.setApproval_round(latestApproval.getApproval_round());
  745. approvalInfo.setChecker(ShiroUtils.getUserId());
  746. approvalInfo.setNextchecker(nextChecker);
  747. approvalInfo.setType(Constant.DictionaryType.STOCKLAND);
  748. approvalInfo.setOper_type(oper_type);
  749. approvalInfo.setDepartment(approval.getApproval_department());
  750. approvalInfo.setApproval_comment(approval.getApproval_comment());
  751. approvalService.insertAndGetId(approvalInfo);
  752. //插入审核材料
  753. if (null != approval.getFileDowns() && approval.getFileDowns().size() > 0) {
  754. for (FileDown file : approval.getFileDowns()) {
  755. if (null != file && null != file.getFile_id()) {
  756. attachmentDao.updateAttachment(Constant.Attachment.STOCKLAND_APPROVE, approvalInfo.getId(), file.getFile_id());
  757. }
  758. }
  759. }
  760. }
  761. //是否等待通知企业-申请状态与审核状态不一样时,通知企业
  762. public Boolean isPendingNotify(StockLand apply) {
  763. String approveStatus = apply.getApprove_status();
  764. String applyStatus = apply.getApply_status();
  765. if (isApprovalStatusApproved(approveStatus)
  766. && !applyStatus.equals(Constant.LandApplyStatus.APPROVED)) {
  767. return true;
  768. }
  769. if (approveStatus.equals(Constant.LandApproveStatus.NOTAPPROVED)
  770. && !applyStatus.equals(Constant.LandApplyStatus.NOTAPPROVED)) {
  771. return true;
  772. }
  773. if (isApprovalStatusRejected(approveStatus)
  774. && !applyStatus.equals(Constant.LandApplyStatus.REJECT)) {
  775. return true;
  776. }
  777. String temporary_state = apply.getTemporary_state();
  778. if (StringUtils.isNotBlank(temporary_state)) {
  779. return true;
  780. }
  781. return false;
  782. }
  783. private boolean isApprovalStatusRejected(String approveStatus) {
  784. return approveStatus.equals(Constant.LandApproveStatus.REJECT)
  785. || approveStatus.equals(Constant.LandApproveStatus.EASY_PROCESS_DENY);
  786. }
  787. private boolean isApprovalStatusApproved(String approveStatus) {
  788. return approveStatus.equals(Constant.LandApproveStatus.APPROVED)
  789. || approveStatus.equals(Constant.LandApproveStatus.EASY_PROCESS_APPROVED);
  790. }
  791. //是否待审批状态
  792. public Boolean isPendingAudit(StockLand apply) {
  793. String approveStatus = apply.getApprove_status();
  794. if (approveStatus.equals(Constant.LandApproveStatus.APPROVED) || approveStatus.equals(Constant.LandApproveStatus.NOTAPPROVED)
  795. || approveStatus.equals(Constant.LandApproveStatus.REJECT)) {
  796. return false;
  797. }
  798. return true;
  799. }
  800. //添加/编辑进程反馈
  801. public Boolean processFeedback(ProcessFeedback feedback) {
  802. StockLand apply = stockLandService.findById(feedback.getApply_id());
  803. if (null != apply) {
  804. if (null == feedback.getId()) {
  805. feedback.setType(Constant.DictionaryType.STOCKLAND);
  806. processFeedbackService.saveFeedback(feedback);
  807. } else {
  808. processFeedbackService.updateFeedback(feedback);
  809. }
  810. apply.setProcess_status(feedback.getProcess_status());//给申请的线下处理状态processStatus赋值
  811. if (feedback.getProcess_status().equals(Constant.ProcessStatus.PASS)) {
  812. apply.setApprove_status(Constant.LandApproveStatus.PASSED);
  813. apply.setApply_status(Constant.LandApplyStatus.PASSED);
  814. } else if (feedback.getProcess_status().equals(Constant.ProcessStatus.NOTPASS)) {
  815. apply.setApprove_status(Constant.LandApproveStatus.NOTPASSED);
  816. apply.setApply_status(Constant.LandApplyStatus.NOTPASSED);
  817. }
  818. stockLandService.updateSelective(apply);
  819. return true;
  820. }
  821. return false;
  822. }
  823. public Boolean isLeader(String groupName) {
  824. //登录用户的审核层级是不是工作组最高级,最高级则是领导,可以选择通过/不通过/退回
  825. Integer level = 0;
  826. User currUser = ShiroUtils.getUserEntity();
  827. level = groupService.getHighestApproveLevel(groupName, Constant.UserType.STREET);
  828. if (null != level && currUser.getApprove_level().equals(level)) {
  829. return true;
  830. }
  831. return false;
  832. }
  833. //获取街道合规性审核小组所有人员
  834. public String get_HGXSHXZ_Checkers() {
  835. //根据工作组名称查出工作组
  836. Group group = groupService.findByNameAndUserType(Constant.HGXSHXZ, null, Constant.UserType.STREET, null);
  837. //如果不为空
  838. if (null != group) {
  839. //根据工作组id查出UserGroup
  840. List<UserGroup> list = userGroupService.findByGroupId(group.getId());
  841. if (null == list || list.size() == 0) {
  842. throw new BaseException("街道工业用地合规性审核组没有配置人员,请联系街道管理员配置!");
  843. }
  844. //构建一个StringBuffer 存放下一审核人id
  845. StringBuffer sb = new StringBuffer("");
  846. for (UserGroup userGroup : list) {
  847. Integer userId = userGroup.getUser_id();
  848. sb.append(userId + ",");
  849. }
  850. return sb.toString();
  851. }
  852. return null;
  853. }
  854. /**
  855. * findApprovePassPage(查询审批通过列表)
  856. *
  857. * @param pageNum
  858. * @param pagesize
  859. * @param keyword
  860. * @param company_name
  861. * @param apply_type
  862. * @param itemId
  863. * @param street_id
  864. * @return PageInfo<StockLand>
  865. * @throws ParseException
  866. */
  867. @Transactional(readOnly = true)
  868. public PageInfo<StockLand> findApprovePassPage(
  869. Integer pageNum, Integer pagesize, String keyword, String company_name, String apply_type, Integer itemId, Integer street_id, Integer applyUserType) throws ParseException {
  870. if (StringUtils.isNotBlank(keyword)) {
  871. keyword = keyword.trim();
  872. }
  873. if (StringUtils.isNotBlank(company_name)) {
  874. company_name = company_name.trim();
  875. }
  876. Integer user_type = ShiroUtils.getUserEntity().getUser_type();
  877. UserData userData = new UserData();
  878. if (user_type.equals(Constant.UserType.STREET)) {
  879. userData.setStreet_id(ShiroUtils.getUserEntity().getStreet_id());
  880. //超级管理员
  881. }
  882. String approve = Constant.LandApproveStatus.APPROVED;
  883. //获取存量用地type id
  884. Integer stockLandId = dictionaryTypeService.getDictionaryType(Constant.DictionaryType.STOCKLAND).getId();
  885. //存量用地审核状态 id
  886. Integer approvedId = dictionaryTypeService.getDictionaryType(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS).getId();
  887. //通过的状态
  888. List<String> statusList = new ArrayList<String>();
  889. statusList.add(Constant.LandApproveStatus.APPROVED);
  890. statusList.add(Constant.LandApproveStatus.PASSED);
  891. PageHelper.startPage(pageNum, pagesize);
  892. List<StockLand> stockLandList = stockLandDao.findApprovePassPage(keyword, company_name, apply_type, approve, userData, stockLandId, approvedId, itemId, street_id, applyUserType, statusList);
  893. for (StockLand stockLand : stockLandList) {
  894. stockLand.setPassTime(stockLand.getCreate_time());
  895. //是否是重大项目
  896. Integer is_zdxm = stockLand.getIs_zdxm();
  897. if (is_zdxm != null) {
  898. if (is_zdxm == 1) {
  899. stockLand.setIs_zdxm_str("是");
  900. } else {
  901. stockLand.setIs_zdxm_str("否");
  902. }
  903. }
  904. }
  905. return new PageInfo<StockLand>(stockLandList);
  906. }
  907. /**
  908. * findSelectPage(查询所有审核状态下列表)
  909. *
  910. * @param pageNum
  911. * @param pagesize
  912. * @param keyword
  913. * @param company_name
  914. * @param apply_type
  915. * @param approve_status
  916. * @param itemId
  917. * @param street_id
  918. * @return PageInfo<StockLand>
  919. */
  920. public PageInfo<StockLand> findSelectPage(
  921. Integer pageNum, Integer pagesize, String keyword, String company_name, String apply_type,
  922. String approve_status, Integer itemId, Integer street_id, Integer applyUserType) {
  923. if (StringUtils.isNotBlank(keyword)) {
  924. keyword = keyword.trim();
  925. }
  926. if (StringUtils.isNotBlank(company_name)) {
  927. company_name = company_name.trim();
  928. }
  929. Integer user_type = ShiroUtils.getUserEntity().getUser_type();
  930. UserData userData = new UserData();
  931. if (user_type.equals(Constant.UserType.STREET)) {
  932. userData.setStreet_id(ShiroUtils.getUserEntity().getStreet_id());
  933. //超级管理员
  934. }
  935. //获取存量用地type id
  936. Integer stockLandId = dictionaryTypeService.getDictionaryType(Constant.DictionaryType.STOCKLAND).getId();
  937. //存量用地审核状态 id
  938. Integer approvedId = dictionaryTypeService.getDictionaryType(Constant.DictionaryType.STOCKLAND_APPROVE_STATUS).getId();
  939. PageHelper.startPage(pageNum, pagesize);
  940. String rejectStatus = Constant.LandApproveStatus.REJECT;
  941. List<StockLand> stockLandList = stockLandDao.findSelectPage(stockLandId, approvedId, itemId, street_id, keyword, company_name, approve_status, userData, applyUserType, rejectStatus);
  942. for (StockLand stockLand : stockLandList) {
  943. stockLand.setPassTime(stockLand.getCreate_time());
  944. //是否是重大项目
  945. Integer is_zdxm = stockLand.getIs_zdxm();
  946. if (is_zdxm != null) {
  947. if (is_zdxm == 1) {
  948. stockLand.setIs_zdxm_str("是");
  949. } else {
  950. stockLand.setIs_zdxm_str("否");
  951. }
  952. }
  953. }
  954. return new PageInfo<StockLand>(stockLandList);
  955. }
  956. //审核撤回
  957. public void withDraw(Integer apply_id) {
  958. StockLand apply = stockLandService.findById(apply_id);
  959. if (stockLandService.canWithdraw(apply, ShiroUtils.getUserId()).equals(Constant.True_False.FASLE)) {
  960. throw new BaseException("当前单据已不可撤回!");
  961. }
  962. Approval latestApproval = approvalService.getLatestApprovalAll(apply_id, Constant.DictionaryType.STOCKLAND);
  963. if (latestApproval.getBefore_approvalstatus().equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT)
  964. && (apply.getApprove_status().equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT) || apply.getApprove_status().equals(Constant.LandApproveStatus.HGXSCTG))) {
  965. //合规性审核撤回
  966. if (latestApproval.getChecker().equals(ShiroUtils.getUserId())) {
  967. //最近一条就是当前用户审核的
  968. latestApproval.setIs_withdraw(Constant.True_False.TRUE);
  969. latestApproval.setDel_flag(true);
  970. approvalService.updateSelective(latestApproval);
  971. apply.setApprove_status(latestApproval.getBefore_approvalstatus());
  972. stockLandService.updateSelective(apply);
  973. } else {
  974. //最近一条不是当前用户审核的
  975. Approval latestAllApprovalByUser = approvalService.getLatestApprovalAllByUser(apply.getId(), Constant.DictionaryType.STOCKLAND, ShiroUtils.getUserId());
  976. latestAllApprovalByUser.setIs_withdraw(Constant.True_False.TRUE);
  977. latestAllApprovalByUser.setDel_flag(true);
  978. approvalService.updateSelective(latestAllApprovalByUser);
  979. latestApproval.setNextchecker(latestApproval.getNextchecker() + ShiroUtils.getUserId() + ",");
  980. approvalService.updateSelective(latestApproval);
  981. apply.setApprove_status(latestApproval.getBefore_approvalstatus());
  982. stockLandService.updateSelective(apply);
  983. }
  984. } else {
  985. latestApproval.setIs_withdraw(Constant.True_False.TRUE);
  986. latestApproval.setDel_flag(true);
  987. approvalService.updateSelective(latestApproval);
  988. //撤回,更改单据状态为原状态
  989. //StockLand apply = stockLandService.findById(apply_id);
  990. apply.setApprove_status(latestApproval.getBefore_approvalstatus());
  991. if (StringUtils.isNotBlank(apply.getTemporary_state())) {
  992. //清空临时状态
  993. stockLandService.updateTempporaryStateToNull(apply_id);
  994. }
  995. stockLandService.updateSelective(apply);
  996. }
  997. }
  998. //是否是当前审核人
  999. public Boolean isCurrChecker(Integer apply_id, StockLandApprovalDto approvalInfo) {
  1000. Boolean isNextChecker = false;
  1001. Approval latestApproval = approvalService.getLatestApproval(apply_id, Constant.DictionaryType.STOCKLAND);
  1002. User currUser = ShiroUtils.getUserEntity();
  1003. Integer currUserId = currUser.getId();
  1004. String[] userIds = latestApproval.getNextchecker().split(",");
  1005. if (userIds.length > 0) {
  1006. for (String userId : userIds) {
  1007. if (userId.equals(String.valueOf(currUserId))) {
  1008. isNextChecker = true;
  1009. }
  1010. }
  1011. if (isNextChecker) {
  1012. //是否到了登录用户的审核层级
  1013. if (currUser.getUser_type().equals(Constant.UserType.GOVERNMENT)) {
  1014. for (String userId : userIds) {
  1015. User user = userService.findById(Integer.valueOf(userId));
  1016. if (null != user.getDepartment_id() && user.getDepartment_id().equals(currUser.getDepartment_id())) {
  1017. if (null != user.getApprove_level() && null != currUser.getApprove_level() && user.getApprove_level() > currUser.getApprove_level()) {
  1018. //没有到当前用户审核层级
  1019. isNextChecker = false;
  1020. }
  1021. }
  1022. }
  1023. } else if (currUser.getUser_type().equals(Constant.UserType.STREET)) {
  1024. for (String userId : userIds) {
  1025. User user = userService.findById(Integer.valueOf(userId));
  1026. if (null != user.getApprove_level() && null != currUser.getApprove_level() && user.getApprove_level() > currUser.getApprove_level()) {
  1027. //没有到当前用户审核层级
  1028. isNextChecker = false;
  1029. }
  1030. }
  1031. }
  1032. if (isNextChecker) {
  1033. //当前节点是否已经审核过(两个用户同时审核)
  1034. if (StringUtils.isNotBlank(approvalInfo.getStatu())) {
  1035. if (!(approvalInfo.getStatu().equals(Constant.LandApproveStatus.JYLCHQ)
  1036. || approvalInfo.getStatu().equals(Constant.LandApproveStatus.COMPLIANCE_AUDIT)
  1037. || approvalInfo.getStatu().equals(Constant.LandApproveStatus.LOCAL_AUDIT)))
  1038. if (stockLandService.isApproved(apply_id, approvalInfo.getStatu())) {
  1039. isNextChecker = false;
  1040. }
  1041. }
  1042. }
  1043. }
  1044. }
  1045. return isNextChecker;
  1046. }
  1047. }