StockLandApproveService.java 61 KB

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