StockLandApproveService.java 59 KB

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