SpmkController.java 35.6 KB
Newer Older
yuquan.zhu committed
1 2
package cn.timer.api.controller.spmk;

3
import java.util.ArrayList;
tangzhaoqian committed
4
import java.util.Date;
tangzhaoqian committed
5
import java.util.HashSet;
yuquan.zhu committed
6
import java.util.List;
tangzhaoqian committed
7
import java.util.Set;
yuquan.zhu committed
8 9 10

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
11 12
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.MethodArgumentNotValidException;
yuquan.zhu committed
13 14 15 16 17 18 19
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
20
import org.springframework.web.bind.annotation.RequestParam;
yuquan.zhu committed
21 22 23 24
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
25
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
yuquan.zhu committed
26
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
27
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
yuquan.zhu committed
28 29

import cn.hutool.core.bean.BeanUtil;
tangzhaoqian committed
30
import cn.hutool.core.collection.CollUtil;
31
import cn.hutool.core.collection.CollectionUtil;
32
import cn.hutool.core.lang.Console;
yuquan.zhu committed
33
import cn.hutool.core.util.ObjectUtil;
tangzhaoqian committed
34
import cn.hutool.core.util.StrUtil;
35
import cn.hutool.json.JSONObject;
tangzhaoqian committed
36 37
import cn.timer.api.aspect.lang.annotation.Log;
import cn.timer.api.aspect.lang.enums.BusinessType;
38
import cn.timer.api.bean.qyzx.QyzxEmpEntAsso;
39 40 41 42
import cn.timer.api.bean.spmk.SpmkApprovalG;
import cn.timer.api.bean.spmk.SpmkApprovalTemplate;
import cn.timer.api.bean.spmk.SpmkApprovalTemplateG;
import cn.timer.api.bean.spmk.SpmkApproveDetail;
43
import cn.timer.api.bean.spmk.SpmkApproveExecuteRecord;
44 45
import cn.timer.api.bean.spmk.SpmkApproveSummary;
import cn.timer.api.bean.spmk.SpmkCustomApproval;
tangzhaoqian committed
46
import cn.timer.api.bean.spmk.SpmkExecutor;
yuquan.zhu committed
47
import cn.timer.api.bean.spmk.SpmkIcon;
48
import cn.timer.api.bean.spmk.SpmkInitiatorConfig;
49
import cn.timer.api.bean.yggl.YgglMainEmp;
tangzhaoqian committed
50
import cn.timer.api.bean.zzgl.ZzglBmgwM;
yuquan.zhu committed
51 52
import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
53
import cn.timer.api.config.enuminterface.SpmkEnumInterface;
54
import cn.timer.api.config.enuminterface.SpmkEnumInterface.ApproveSummarySts;
tangzhaoqian committed
55
import cn.timer.api.config.enuminterface.SpmkEnumInterface.ExecutorSts;
56
import cn.timer.api.config.enums.CommonEnum;
57
import cn.timer.api.config.enums.SysRoleType;
58
import cn.timer.api.config.exception.CustomException;
59
import cn.timer.api.config.validation.Insert;
60
import cn.timer.api.config.validation.Ranks;
61
import cn.timer.api.config.validation.Update;
62
import cn.timer.api.config.validation.ValidList;
63
import cn.timer.api.controller.spmk.service.SpmkService;
64
import cn.timer.api.controller.yggl.service.YgglService;
65
import cn.timer.api.controller.zzgl.service.ZzglBmgwMService;
66
import cn.timer.api.dao.qyzx.QyzxEmpEntAssoMapper;
67 68 69 70 71 72 73 74 75
import cn.timer.api.dao.spmk.SpmkApprovalGMapper;
import cn.timer.api.dao.spmk.SpmkApprovalTemplateGMapper;
import cn.timer.api.dao.spmk.SpmkApprovalTemplateMapper;
import cn.timer.api.dao.spmk.SpmkApproveDetailMapper;
import cn.timer.api.dao.spmk.SpmkApproveExecuteRecordMapper;
import cn.timer.api.dao.spmk.SpmkApproveSummaryMapper;
import cn.timer.api.dao.spmk.SpmkCustomApprovalMapper;
import cn.timer.api.dao.spmk.SpmkExecutorMapper;
import cn.timer.api.dao.spmk.SpmkInitiatorConfigMapper;
76
import cn.timer.api.dto.spmk.ApprovingDto;
77
import cn.timer.api.dto.spmk.FlowChildren;
78
import cn.timer.api.dto.spmk.FromData;
79
import cn.timer.api.dto.spmk.MySummaryQueryDto;
80
import cn.timer.api.dto.spmk.Relation;
81
import cn.timer.api.dto.spmk.Router;
82 83 84 85
import cn.timer.api.dto.spmk.SpmkApprovalTemplateDto;
import cn.timer.api.dto.spmk.SpmkApproveDetailDto;
import cn.timer.api.dto.spmk.SpmkApproveSummaryDto;
import cn.timer.api.dto.spmk.SpmkCustomApprovalDto;
86
import cn.timer.api.dto.spmk.SummaryQueryDto;
87
import cn.timer.api.dto.spmk.User;
yuquan.zhu committed
88 89
import cn.timer.api.utils.Result;
import cn.timer.api.utils.ResultUtil;
90
import cn.timer.api.utils.router.RouterUtils;
91 92 93
import cn.timer.api.utils.router.business.SpmkAssoBusiness;
import cn.timer.api.utils.router.business.SpmkAssoBusinessFactory;
import cn.timer.api.utils.router.enums.ApproveEnum;
yuquan.zhu committed
94 95 96 97 98 99 100 101
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Api(tags = "3.0审批模块")
@RestController
@Transactional
@RequestMapping(value = "/spmk",  
produces = { "application/json","multipart/form-data" })
102
public class SpmkController {
yuquan.zhu committed
103 104

	@Autowired
105 106 107
	private SpmkService spmkService;
	@Autowired
	private ZzglBmgwMService zzglBmgwMService;
108
	
109
	@Autowired
110 111
	private QyzxEmpEntAssoMapper qyzxEmpEntAssoMapper;
	@Autowired
112 113 114 115 116 117 118
    private SpmkApprovalTemplateGMapper spmkApprovalTemplateGMapper;
	@Autowired
    private SpmkApprovalTemplateMapper spmkApprovalTemplateMapper;
	@Autowired
    private SpmkApprovalGMapper spmkApprovalGMapper;
	@Autowired
    private SpmkCustomApprovalMapper spmkCustomApprovalMapper;
119
	@Autowired
120 121 122 123 124 125 126 127 128 129
	private SpmkApproveSummaryMapper spmkApproveSummaryMapper;
	@Autowired
	private SpmkApproveDetailMapper spmkApproveDetailMapper;
	@Autowired
	private SpmkApproveExecuteRecordMapper spmkApproveExecuteRecordMapper;
	@Autowired
	private SpmkExecutorMapper spmkExecutorMapper;
	@Autowired
	private SpmkInitiatorConfigMapper spmkInitiatorConfigMapper;
	
tangzhaoqian committed
130 131 132
	@Autowired
	private SpmkAssoBusinessFactory spmkAssoBusinessFactory;
	
133
	private boolean ISFIRST = true; // 第一次启动审批流程
134
	
135
	//TODO 审批模板组
136
	/**
137
	 * 新增或编辑-审批模板组
138
	 */
139
	@PostMapping(value = "/save_approval_template_g")
140
	@ApiOperation(value = "1.新增或编辑-审批模板组", httpMethod = "POST", notes = "新增或编辑-审批模板组")
141
	@ApiOperationSupport(order = 1)
142
	public Result<Object> saveAtg(@Validated({Insert.class,Update.class}) @RequestBody SpmkApprovalTemplateG spmkApprovalTemplateG){
143
		
144
		if (spmkApprovalTemplateG.selectCount(new QueryWrapper<SpmkApprovalTemplateG>().lambda()
145
				.ne(spmkApprovalTemplateG.getId() != null,SpmkApprovalTemplateG::getId, spmkApprovalTemplateG.getId())
146 147 148 149
				.eq(SpmkApprovalTemplateG::getName, spmkApprovalTemplateG.getName())) > 0) {
			return ResultUtil.error("审批模板组名重复!");
		}
		
150
        return spmkApprovalTemplateG.insertOrUpdate() ? 
151
        		ResultUtil.data(spmkApprovalTemplateG) : ResultUtil.error();
152 153 154
	}
	
	/**
155
	 * 删除-审批模板组
156
	 */
157
	@DeleteMapping(value = "/delete_approval_template_g/{id}")
158 159
	@ApiOperation(value = "2.删除-审批模板组", httpMethod = "DELETE", notes = "删除-审批模板组")
	@ApiOperationSupport(order = 2)
160
	public Result<Object> deleteAtgById(@PathVariable int id){
161
		
162 163 164
		if (spmkApprovalTemplateMapper.selectCount(new QueryWrapper<SpmkApprovalTemplate>().lambda().eq(SpmkApprovalTemplate::getApprovalTemplateGId, id)) > 0 ) 
			return ResultUtil.error("审批模板组存在 模板,不可直接删除!");
		
165
        return SpmkApprovalTemplateG.builder().id(id).build().deleteById() ? 
166
        		ResultUtil.success() : ResultUtil.error("没有找到该对象");
167 168 169
	}
	
	/**
170
	 * 查询列表-审批模板组
171
	 */
172
	@GetMapping(value = "/list_approval_template_g")
173 174
	@ApiOperation(value = "3.查询列表-审批模板组", httpMethod = "GET", notes = "查询列表-审批模板组")
	@ApiOperationSupport(order = 3)
175 176
	public Result<Object> selectListAtg(){
        
177
        return ResultUtil.data(spmkApprovalTemplateGMapper.selectListAtInAtg());
178 179
	}
	
180 181 182
	/**
	 * 排序-审批模板组
	 */
tangzhaoqian committed
183
	@PutMapping(value = "/update_approval_template_g")
184 185
	@ApiOperation(value = "4.排序-审批模板组", httpMethod = "PUT", notes = "排序-审批模板组")
	@ApiOperationSupport(order = 4)
186
	public Result<Object> ranksAtg(@Validated(Ranks.class) @RequestBody ValidList<SpmkApprovalTemplateG> list){
187 188 189 190 191
		
		if (list == null || (list != null && list.size() <= 0)) {
			return ResultUtil.success();
		}
        return spmkApprovalTemplateGMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
192
	}
193
	
194 195 196 197 198
	//TODO 审批模板
	/**
	 * 新增或编辑-审批模板
	 */
	@PostMapping(value = "/save_approval_template")
199 200
	@ApiOperation(value = "5.新增或编辑-审批模板", httpMethod = "POST", notes = "新增或编辑-审批模板")
	@ApiOperationSupport(order = 5)
201
	public Result<Object> saveAt(@Validated @RequestBody SpmkApprovalTemplateDto spmkApprovalTemplateDto){
202
		
203 204
		Integer approvalTemplateGId = spmkApprovalTemplateDto.getApprovalTemplateGId();
		if (ObjectUtil.isNull(approvalTemplateGId)) 
205
			return ResultUtil.error("审批模板ID不为空");
206 207 208

		SpmkApprovalTemplate at = SpmkApprovalTemplate.builder().build();

209
		// 克隆 SpmkApprovalTemplateDto对象 到 SpmkApprovalTemplate对象,排除属性froms,router
210
		BeanUtil.copyProperties(spmkApprovalTemplateDto, at , "froms","router");
211
		// 序列化 后 写入 SpmkApprovalTemplate对象
212
		at.setFroms(ObjectUtil.serialize((List<JSONObject>)spmkApprovalTemplateDto.getFroms()));
213 214
		at.setRouter(ObjectUtil.serialize(spmkApprovalTemplateDto.getRouter()));
		
215
		if (at.selectCount(new QueryWrapper<SpmkApprovalTemplate>().lambda()
216
				.ne(at.getId() != null, SpmkApprovalTemplate::getId, at.getId())
217 218 219 220
				.eq(SpmkApprovalTemplate::getName, at.getName())) > 0) {
			return ResultUtil.error("审批模板名重复!");
		}
		
221
		if (!at.insertOrUpdate()) 
222
			return ResultUtil.error("数据库操作失败");
223 224 225 226
		
		// 清空前端不需要的字段再返回,节省流量
		at.setFroms(null);
		at.setRouter(null);
227
		return  ResultUtil.data(at);
228 229
		
	}
230
	
231 232 233 234
	/**
	 * 删除-审批模板
	 */
	@DeleteMapping(value = "/delete_approval_template/{id}")
235 236
	@ApiOperation(value = "6.删除-审批模板", httpMethod = "DELETE", notes = "删除-审批模板")
	@ApiOperationSupport(order = 6)
237 238
	public Result<Object> deleteAtById(@PathVariable int id){
		
239
        return SpmkApprovalTemplate.builder().id(id).build().deleteById() ? ResultUtil.success() : ResultUtil.error("没有找到该对象");
240 241 242 243 244 245
		
	}

	/**
	 * id查询-审批模板
	 */
246
	@GetMapping(value = "/select_approval_template/{id}")
247 248
	@ApiOperation(value = "7.id查询-审批模板", httpMethod = "GET", notes = "id查询-审批模板")
	@ApiOperationSupport(order = 7)
249
	public Result<Object> selectAtById(@PathVariable int id){
250 251 252 253 254 255
		SpmkApprovalTemplate at = SpmkApprovalTemplate.builder().id(id).build().selectById();
		
		SpmkApprovalTemplateDto atd = SpmkApprovalTemplateDto.builder().build();
		BeanUtil.copyProperties(at, atd,"froms","router");
		atd.setFroms(ObjectUtil.deserialize(at.getFroms()));
		atd.setRouter(ObjectUtil.deserialize(at.getRouter()));
256
        return ResultUtil.data(atd);
257 258 259 260 261 262
        
	}
	
	/**
	 * 排序-审批模板
	 */
tangzhaoqian committed
263
	@PutMapping(value = "/update_approval_template")
264
	@ApiOperation(value = "8.排序-审批模板", httpMethod = "PUT", notes = "查询列表-审批模板组")
265
	@ApiOperationSupport(order = 8)
266
	public Result<Object> ranksAt(@Validated({Ranks.class})@RequestBody ValidList<SpmkApprovalTemplate> list){
267

268 269 270 271 272
		if (list == null || (list != null && list.size() <= 0)) {
			return ResultUtil.success();
		}
		
        return spmkApprovalTemplateMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
273 274
	
	}
275 276
	
	
277 278
	
	//TODO 审批组
279
	/**
280
	 * 新增或编辑-审批组
281
	 */
282
	@PostMapping(value = "/save_approval_g")
283 284
	@ApiOperation(value = "9.新增或编辑-审批组", httpMethod = "POST", notes = "新增或编辑-审批组")
	@ApiOperationSupport(order = 9)
285
	public Result<Object> saveAg(@CurrentUser UserBean userBean, @Validated({Insert.class,Update.class}) @RequestBody SpmkApprovalG spmkApprovalG){
286
		
287
		if (spmkApprovalG.selectCount(new QueryWrapper<SpmkApprovalG>().lambda()
288
				.ne(spmkApprovalG.getId() != null, SpmkApprovalG::getId, spmkApprovalG.getId())
289 290
				.eq(SpmkApprovalG::getName, spmkApprovalG.getName())
				.eq(SpmkApprovalG::getOrgCode, userBean.getOrgCode())) > 0) {
291 292 293
			return ResultUtil.error("审批组名重复!");
		}
		
294
		spmkApprovalG.setOrgCode(userBean.getOrgCode());
295
		return spmkApprovalG.insertOrUpdate() ? ResultUtil.data(spmkApprovalG) : ResultUtil.error();
296
		
297 298 299 300 301 302
	}
	
	/**
	 * 删除-审批组
	 */
	@DeleteMapping(value = "/delete_approval_g/{id}")
303 304
	@ApiOperation(value = "10.删除-审批组", httpMethod = "DELETE", notes = "删除-审批组")
	@ApiOperationSupport(order = 10)
305 306
	public Result<Object> deleteAgById(@PathVariable int id){
		
lal committed
307 308
//		if (spmkCustomApprovalMapper.selectCount(new QueryWrapper<SpmkCustomApproval>().lambda().eq(SpmkCustomApproval::getApprovalGId, id)) > 0 ) 
//			return ResultUtil.error("审批组存在 自定义审批,不可直接删除!");
309
		
lal committed
310
		SpmkCustomApproval.builder().build().delete(new QueryWrapper<SpmkCustomApproval>().lambda().eq(SpmkCustomApproval::getApprovalGId, id));
311
        return SpmkApprovalG.builder().id(id).build().deleteById() ? ResultUtil.success() : ResultUtil.error("没有找到该对象");
312 313 314
		
	}
	
315
	/**
316 317 318 319 320 321 322 323 324
	 * 查询列表-审批组-审批管理
	 */
	@GetMapping(value = "/all_approval_g")
	@ApiOperation(value = "11.查询列表-审批组-审批管理", httpMethod = "GET", notes = "查询列表-审批组-审批管理")
	@ApiOperationSupport(order = 11)
	public Result<Object> selectListAgByAdmin(@CurrentUser UserBean userBean){
		
		List<Integer> depts = zzglBmgwMService.empNumupGetDepts(userBean.getOrgCode(), userBean.getEmpNum());
		System.out.println(depts);
325
        return ResultUtil.data(spmkApprovalGMapper.selectListAgInCaByAdmin(userBean.getOrgCode(), userBean.getEmpNum(), depts));
326 327 328 329 330
	
	}
	
	/**
	 * 查询列表-审批组-个人审批
331 332
	 */
	@GetMapping(value = "/list_approval_g")
333
	@ApiOperation(value = "11.查询列表-审批组-个人审批", httpMethod = "GET", notes = "查询列表-审批组-个人审批")
334
	@ApiOperationSupport(order = 11)
335 336
	public Result<Object> selectListAg(@CurrentUser UserBean userBean){
		
337
		return ResultUtil.data(spmkService.selectListAg(userBean));
338
	}
339
	
340 341 342
	/**
	 * 排序-审批组
	 */
tangzhaoqian committed
343
	@PutMapping(value = "/update_approval_g")
344 345
	@ApiOperation(value = "12.排序-审批组", httpMethod = "PUT", notes = "排序-审批组")
	@ApiOperationSupport(order = 12)
346
	public Result<Object> ranksAg(@Validated({Ranks.class}) @RequestBody ValidList<SpmkApprovalG> list){
347
		
348
		if (list == null || list.size() <= 0) {
349 350 351 352
			return ResultUtil.success();
		}
		
        return spmkApprovalGMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
353
	}
354
	
355
	//TODO 自定义审批
356
	
357 358 359 360
	/**
	 * 新增或编辑-自定义审批
	 */
	@PostMapping(value = "/save_custom_approval")
361 362
	@ApiOperation(value = "13.新增或编辑-自定义审批", httpMethod = "POST", notes = "新增或编辑-自定义审批")
	@ApiOperationSupport(order = 13)
363
	@Transactional(rollbackFor = Exception.class)
364
	public Result<Object> saveCa(@CurrentUser UserBean userBean,@Validated @RequestBody SpmkCustomApprovalDto spmkCustomApprovalDto) throws Exception{
365 366 367 368

		SpmkCustomApproval ca = SpmkCustomApproval.builder().build();

		BeanUtil.copyProperties(spmkCustomApprovalDto, ca , "froms","router","initiatorConfigs");
369
		
370
		if (ca.selectCount(new QueryWrapper<SpmkCustomApproval>().lambda()
371
				.ne(ca.getId() != null, SpmkCustomApproval::getId, ca.getId())
372 373
				.eq(SpmkCustomApproval::getName, ca.getName())
				.eq(SpmkCustomApproval::getOrgCode, userBean.getOrgCode())) > 0) {
374 375
			return ResultUtil.error("自定义审批名重复!");
		}
376
		ca.setOrgCode(userBean.getOrgCode());
377 378 379
		ca.setFroms(ObjectUtil.serialize(spmkCustomApprovalDto.getFroms()));
		ca.setRouter(ObjectUtil.serialize(spmkCustomApprovalDto.getRouter()));
		
380
		//1.新增 SpmkCustomApproval-自定义审批
381
		if (!ca.insertOrUpdate())
382
			return ResultUtil.error("新增自定义审批 失败!");
383
		
384
		
385
		Integer id = ca.getId();
386 387
		// 2.删除	历史的  SpmkInitiatorConfig-审批发起人配置,
		SpmkInitiatorConfig.builder().build().delete(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
388 389 390
		Console.log("自定义审批id: " + id);
		List<SpmkInitiatorConfig> listIc = spmkCustomApprovalDto.getInitiatorConfigs();

391 392 393 394
		if (listIc != null && listIc.size() > 0) {
			for (int i = 0, n = listIc.size(); i < n; i++) {
				listIc.get(i).setCustomApprovalId(id);
			}
395
			// 3.新增	最新的 SpmkInitiatorConfig-审批发起人配置,
396 397 398 399 400
			if (!spmkInitiatorConfigMapper.insertList(listIc)) {
				// 手动抛出异常,事务回滚
				throw new Exception();
			}
			
401
		}
402
		
403 404 405
		//  
		/**
		 * 注意: 为保证该api的原子性 要加 事务处理 回滚(方法注解-@Transactional(rollbackFor = Exception.class))
406 407 408
		 * 1.新增 SpmkCustomApproval-自定义审批
		 * 2.删除	历史的  SpmkInitiatorConfig-审批发起人配置,
		 * 3.新增	最新的 SpmkInitiatorConfig-审批发起人配置,
409
		 */
410 411 412 413

		// 清空前端不需要的字段再返回,节省流量
		ca.setFroms(null);
		ca.setRouter(null);
414
		return ResultUtil.data(ca);
415 416
		
	}
417
	
418 419
	/**
	 * 删除-自定义审批
420
	 * @throws Exception 
421 422
	 */
	@DeleteMapping(value = "/delete_custom_approval/{id}")
423
	@ApiOperation(value = "14.删除-自定义审批", httpMethod = "DELETE", notes = "删除-自定义审批")
424
	@Transactional(rollbackFor = Exception.class)
425
	@ApiOperationSupport(order = 14)
426 427 428 429 430 431 432
	public Result<Object> deleteCaById(@PathVariable int id) throws Exception{
		SpmkInitiatorConfig.builder().build().delete(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
        
		if (!SpmkCustomApproval.builder().id(id).build().deleteById()) {
			throw new Exception();
		}
		
433
		return  ResultUtil.success();
434 435 436 437 438
	}

	/**
	 * id查询-自定义审批
	 */
439 440 441
	@GetMapping(value = "/select_custom_approval/{id}")
	@ApiOperation(value = "15.id查询-自定义审批", httpMethod = "GET", notes = "id查询-自定义审批")
	@ApiOperationSupport(order = 15)
442
	public Result<Object> selectCaById(@PathVariable int id){
443
		SpmkCustomApproval ca = SpmkCustomApproval.builder().id(id).build().selectById();
444
		List<SpmkInitiatorConfig> listIc = SpmkInitiatorConfig.builder().build().selectList(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
445
		SpmkCustomApprovalDto caD = SpmkCustomApprovalDto.builder()
446 447
				.froms(ObjectUtil.deserialize(ca.getFroms()))
				.router(ObjectUtil.deserialize(ca.getRouter()))
448 449
				.build();
		BeanUtil.copyProperties(ca, caD,"froms","router");
450
		caD.setInitiatorConfigs(listIc);
451
        return ResultUtil.data(caD);
452
	}
453
	
454 455 456
	/**
	 * 排序-自定义审批
	 */
tangzhaoqian committed
457
	@PutMapping(value = "/update_custom_approval")
458 459
	@ApiOperation(value = "16.排序-自定义审批", httpMethod = "PUT", notes = "排序-自定义审批")
	@ApiOperationSupport(order = 16)
460
	public Result<Object> ranksCa(@Validated({Ranks.class}) @RequestBody ValidList<SpmkCustomApproval> list){
461 462 463 464 465 466
		
		if (list == null || (list != null && list.size() <= 0)) {
			return ResultUtil.success();
		}
		
        return spmkCustomApprovalMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
467
	}
468
	
469 470 471
	@Autowired
	YgglService ygglService;
	
tangzhaoqian committed
472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512
	/**
	 * 排序-自定义审批
	 */
	@PutMapping(value = "/test_spmk")
	@ApiOperation(value = "16.测试", httpMethod = "PUT", notes = "排序-自定义审批")
	@ApiOperationSupport(order = 16)
	public Result<Object> test222(@Validated({Ranks.class}) @RequestBody ValidList<SpmkCustomApproval> list){
		
		Set<Integer> lanzi = new HashSet<Integer>();
		//所有部门岗位
		List<ZzglBmgwM> bmgws = ZzglBmgwM.builder().build().selectList(new QueryWrapper<ZzglBmgwM>().lambda().eq(ZzglBmgwM::getOrgCode, 311));
		//个人岗位
		YgglMainEmp one = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda()
							.select(YgglMainEmp::getBmgwId)
							.eq(YgglMainEmp::getOrgCode, 311).eq(YgglMainEmp::getEmpNum, 12512));
		
		Integer getId = one != null ? one.getBmgwId() : null;
		System.out.println(getId);
		Set<Integer> all = getId != null ? empNumupdept2(lanzi, bmgws, getId) : new HashSet<Integer>();
		all.add(getId);
		
		System.out.println(all);
		
		return spmkCustomApprovalMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
	}
	
	//遍历
	public static Set<Integer> empNumupdept2(Set<Integer> lanzi,List<ZzglBmgwM> bmgws,Integer getId) {
		for (ZzglBmgwM z : bmgws) {
			if (getId.equals(z.getId())) {
				lanzi.add(getId);
				if (z.getUpId()==null || z.getUpId() == 0) {
					return lanzi;
				}
				getId = z.getUpId();
				empNumupdept2(lanzi, bmgws, getId);
			}
		}
		return lanzi;
	}
	
513 514 515
	// TODO 审批汇总(发起审批)
	/**
	 * 发起审批
516
	 * @throws Exception 
517 518
	 */
	@PostMapping(value = "/start_approval")
519 520 521
	@ApiOperation(value = "17.发起审批", httpMethod = "POST", notes = "发起审批")
	@ApiOperationSupport(order = 17)
	@Transactional(rollbackFor = Exception.class)
tangzhaoqian committed
522
	@Log(title = "审批-发起审批", businessType = BusinessType.INSERT)
tangzhaoqian committed
523
	public Result<Object> saveA(@CurrentUser UserBean userBean,@Validated @RequestBody SpmkApproveSummaryDto spmkApproveSummaryDto) throws Exception{
524 525 526
			YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>()
					.lambda()
					.select(YgglMainEmp::getHeadUrl,YgglMainEmp::getName)
527 528 529
					.eq(YgglMainEmp::getEmpNum, userBean.getEmpNum())
					.eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
					);
530 531
			
			if (ygglMainEmp == null) 
532 533 534
				return ResultUtil.error("发起人不存在!");
			
//			List<SpmkApprovalG> saG = spmkService.selectListAg(userBean);
535
			
536 537
			Router router = spmkApproveSummaryDto.getRouter();
			List<Router> routers = router.getChildren();
538
			if (CollectionUtil.isNotEmpty(routers)) {
yuquan.zhu committed
539 540 541 542 543 544 545 546
//				List<Relation> relations = routers.get(0).getRelation();
//				if (relations == null || relations.size() < 1) {
//					return ResultUtil.error("无法发起,请完善审批流程");
//				}
//				List<User> users = relations.get(0).getUsers();
//				if (CollectionUtil.isEmpty(users)) {
//					return ResultUtil.error("无法发起,请完善审批流程");
//				}
547 548 549 550 551
				
			}else {
				return ResultUtil.error("无法发起,请完善审批流程");
			}
			
552
			List<Router> listRouter = new ArrayList<Router>();
553 554
			listRouter.add(router);
			
555
			JSONObject jSONObject = spmkApproveSummaryDto.getRequestData()
tangzhaoqian committed
556 557 558 559
					.set("orgCode", userBean.getOrgCode())
					.set("initiator", ygglMainEmp.getName())
					.set("headUrl", ygglMainEmp.getHeadUrl())
					.set("id", userBean.getEmpNum());
560
			RouterUtils.NextNode(listRouter, jSONObject, ISFIRST);
561
			System.out.println(listRouter);
562 563
			List<FlowChildren> listFlowChildren = new ArrayList<FlowChildren>();
			RouterUtils.getIsFlowChildren(listRouter,listFlowChildren);
yuquan.zhu committed
564
			System.out.println("listFlowChildren");
565
			System.out.println(listFlowChildren);
566
			
567 568 569 570 571 572 573 574 575 576
			// 当前审批人
			String currentApprover = jSONObject.getStr("current_approver");
			// 封装 审批汇总
			SpmkApproveSummary as = SpmkApproveSummary
					.builder()
					.orgCode(userBean.getOrgCode())
					.empNum(userBean.getEmpNum())
					.title(spmkApproveSummaryDto.getTitle())
					.initiator(spmkApproveSummaryDto.getInitiator())
					.approveName(spmkApproveSummaryDto.getApproveName())
577
					.assoType(spmkApproveSummaryDto.getAssoType())
578
					.sts(ApproveSummarySts.IN.ordinal())
579
					.currentApprover(currentApprover).build();
580
			
581
			if (!as.insert()) {
582
				throw new CustomException("审批汇总-新增异常");
583
			}
584
			
tangzhaoqian committed
585
			// 插入记录- 审批执行记录 - 执行人记录
586 587
			RouterUtils.insertogExecuteRecord(listFlowChildren, as.getId());
			
588 589 590 591 592
			// 封装 审批详情
			SpmkApproveDetail ad = SpmkApproveDetail.builder().build();
			ad.setApproveSummaryId(as.getId());
			ad.setName(spmkApproveSummaryDto.getTitle());
			ad.setRequestData(ObjectUtil.serialize(spmkApproveSummaryDto.getRequestData()));
593
			ad.setFroms(ObjectUtil.serialize((List<JSONObject>)spmkApproveSummaryDto.getFroms()));
594 595
			ad.setRouter(ObjectUtil.serialize(listRouter.get(0)));
			ad.setFlowChildren(ObjectUtil.serialize(listFlowChildren));
596
			
597
			if (!ad.insert()) 
598
				throw new CustomException("审批详情-新增异常");
599
			
600
			return ResultUtil.success();
601 602
	}
	
603
	//TODO 审批汇总
604 605 606 607
	/**
	 * 审批汇总
	 * @param summaryQueryDto
	 * @return
608
	 * @throws  
609
	 */
610 611 612
	@PostMapping(value = "/select_approve_summary")
	@ApiOperation(value = "18.审批汇总", httpMethod = "POST", notes = "审批汇总")
	@ApiOperationSupport(order = 18)
tangzhaoqian committed
613
	@Log(title = "审批-审批汇总", businessType = BusinessType.OTHER)
614 615 616 617 618 619
	public Result<Object> selectAs(@CurrentUser UserBean userBean, @RequestBody SummaryQueryDto summaryQueryDto) {

			IPage<SpmkApproveSummary> page = new Page<SpmkApproveSummary>(
				summaryQueryDto.getCurrentPage() == null ? 1 : summaryQueryDto.getCurrentPage(),
				summaryQueryDto.getTotalPage() == null ? 10 : summaryQueryDto.getTotalPage());
			summaryQueryDto.setOrgCode(userBean.getOrgCode());
620 621
			
			Integer deptId = summaryQueryDto.getDeptId();
tangzhaoqian committed
622
			List<YgglMainEmp> listYgglMainEmp = zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), deptId);
tangzhaoqian committed
623

624
			if (deptId != null && (listYgglMainEmp == null || listYgglMainEmp.size() == 0)) {
625
				return ResultUtil.data(new ArrayList<SpmkApproveSummary>());
626 627 628 629 630 631 632
			}
			
			List<Integer> empNums = new ArrayList<Integer>();
			for (YgglMainEmp ygglMainEmp : listYgglMainEmp) {
				empNums.add(ygglMainEmp.getEmpNum());
			}
			summaryQueryDto.setEmpNums(empNums);
633

634
			// 缺-部门id 搜索
635 636 637
			IPage<SpmkApproveSummary> pageAs = spmkApproveSummaryMapper.selectPageByQuery(page, summaryQueryDto);
			
			List<SpmkApproveSummary> listAs = pageAs.getRecords();
638
			
639
			return ResultUtil.data(pageAs, listAs);
640
	}
641
	
642 643 644 645 646 647 648
	//TODO 审批详情
	/**
	 * 审批详情
	 */
	@GetMapping(value = "/select_approve_detail/{id}")
	@ApiOperation(value = "19.审批详情", httpMethod = "GET", notes = "审批详情")
	@ApiOperationSupport(order = 19)
tangzhaoqian committed
649
	@Log(title = "审批-审批详情", businessType = BusinessType.OTHER)
tangzhaoqian committed
650
	public Result<Object> selectAd(@PathVariable(required = true) Integer id) {
651
		
652
		SpmkApproveDetailDto adD = spmkService.selectApproveDetailByAsId(id);
653
		
654
		return ResultUtil.data(adD);
655
	}
656
	
657 658 659 660 661 662
	//TODO 审批人审批
	/**
	 * 审批人审批
	 */
	@PostMapping(value = "/approving")
	@ApiOperation(value = "20.审批人审批", httpMethod = "POST", notes = "审批人审批")
tangzhaoqian committed
663 664
	@Transactional(rollbackFor = Exception.class)
	@ApiOperationSupport(order = 20)
tangzhaoqian committed
665
	@Log(title = "审批-审批流程", businessType = BusinessType.UPDATE)
666
//	@BindingResultCtrol(title = "审批人审批")
667 668
	public Result<Object> approving(@CurrentUser UserBean userBean,@Validated @RequestBody ApprovingDto approvingDto) throws Exception {
		
669
		Integer asId = approvingDto.getAsId();
670
		SpmkApproveDetail ad = SpmkApproveDetail.builder().build().selectOne(new QueryWrapper<SpmkApproveDetail>()
671
				.lambda()
672 673 674
				.select(SpmkApproveDetail::getId,
						SpmkApproveDetail::getRequestData,
						SpmkApproveDetail::getFlowChildren)
675
				.eq(SpmkApproveDetail::getApproveSummaryId, asId));
676
		
677 678 679
		// 查询 SpmkApproveSummary 状态
		SpmkApproveSummary aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda()
				.select(SpmkApproveSummary::getSts)
680
				.eq(SpmkApproveSummary::getId, asId));
681
		
682
		if (aSummary.getSts() > SpmkEnumInterface.ApproveSummarySts.IN.ordinal()) {
683 684 685 686
			return ResultUtil.error("该审批已结束!");
		}
		
		// 查询该 审批的状态 是否为 1 审批中 
tangzhaoqian committed
687 688
		Integer count = SpmkExecutor.builder().build().selectCount(new QueryWrapper<SpmkExecutor>().lambda()
				.eq(SpmkExecutor::getId, approvingDto.getExecutorId())
tangzhaoqian committed
689
				.eq(SpmkExecutor::getSts, ExecutorSts.IN_EXECUTION.ordinal()));
tangzhaoqian committed
690 691 692 693 694
		
		if (count == 0) {
			return ResultUtil.error("您已审批过!");
		}
		
695 696 697 698
		if ( spmkExecutorMapper.selectCount(new QueryWrapper<SpmkExecutor>().lambda()
				.eq(SpmkExecutor::getId, approvingDto.getExecutorId())
				.eq(SpmkExecutor::getEmpNum, userBean.getEmpNum())
				.eq(SpmkExecutor::getSts, SpmkEnumInterface.ExecutorSts.IN_EXECUTION.ordinal())) == 0) {
699 700 701 702 703 704 705 706 707 708 709
			
			Integer adminNum = new LambdaQueryChainWrapper<QyzxEmpEntAsso>(qyzxEmpEntAssoMapper)
					.eq(QyzxEmpEntAsso::getEmpNum, userBean.getEmpNum())
					.eq(QyzxEmpEntAsso::getOrgCode, userBean.getOrgCode())
					.in(QyzxEmpEntAsso::getUserType, SysRoleType.U_TYPE_ADMIN,SysRoleType.U_TYPE_C_ADMIN)
					.count();
			
			if (adminNum <= 0) {
				return ResultUtil.error("非当前审批人 或 管理员,无法操作!");
			}
			
710 711
		}
		
712
		if (aSummary.getSts() == 0) {
713
			List<FlowChildren> listFlowChildren = ObjectUtil.deserialize(ad.getFlowChildren());
714
			// 审批逻辑
715 716
			RouterUtils.approving(
					listFlowChildren, 
717
					asId, 
718 719 720
					approvingDto.getExecuteRecordId(), 
					approvingDto.getExecutorId(), 
					approvingDto.getOpinion(),
721 722 723
					approvingDto.getSts(),
					approvingDto.getUser()
					);
724 725 726
			
			System.out.println(listFlowChildren);
			// 更新 flowChildren
tangzhaoqian committed
727
			SpmkApproveDetail.builder().id(ad.getId()).flowChildren(ObjectUtil.serialize(listFlowChildren)).build().updateById();
728 729 730 731
			FlowChildren fc = CollUtil.getLast(listFlowChildren);
			if (fc.getExecute() == "2") {
				// 查询 SpmkApproveSummary 状态
				aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda()
732
						.select(SpmkApproveSummary::getSts,SpmkApproveSummary::getAssoType)
733
						.eq(SpmkApproveSummary::getId, asId));
734
				
735
				if (aSummary.getSts() != SpmkEnumInterface.ApproveSummarySts.REFUSE.ordinal()) {
736
					SpmkApproveSummary.builder().id(asId).currentApprover(CommonEnum.NULL_STR.getDesc()).endTime(new Date()).sts(ApproveSummarySts.FINISH.ordinal()).build().updateById();
737
						
738
					JSONObject jSONObject = ObjectUtil.deserialize(ad.getRequestData());
tangzhaoqian committed
739
					jSONObject.set("approveId", FromData.builder().value(String.valueOf(asId)).build());
tangzhaoqian committed
740
					jSONObject.set("orgCode", userBean.getOrgCode());
741
					
742
					//审批完成后 业务
tangzhaoqian committed
743
					SpmkAssoBusiness sab = spmkAssoBusinessFactory.createSpmkService(ApproveEnum.getEnums(aSummary.getAssoType()));
744
					if (sab != null)
745 746
						System.out.println("1----------"+ sab);
						System.out.println("2----------"+ jSONObject);
747
						sab.handleApprove(jSONObject);
748
				}
tangzhaoqian committed
749
			}
750 751 752 753
			
		}else {
			return ResultUtil.error("该审批已结束!");
		}
754
		return ResultUtil.success();
755
	}
756
	
tangzhaoqian committed
757
	//TODO 我发起的/我审批的/抄送我的
758
	/**
tangzhaoqian committed
759
	 * 查询列表-我发起的/我审批的/抄送我的-分页
760 761
	 */
	@PostMapping(value = "/select_my_approve")
tangzhaoqian committed
762
	@ApiOperation(value = "21.查询列表-我发起的/我审批的/抄送我的-分页", httpMethod = "POST", notes = "查询列表-我审批的-关键字、审批状态、发起时间-分页")
tangzhaoqian committed
763
	@ApiOperationSupport(order = 21)
tangzhaoqian committed
764
	@Log(title = "审批-我发起的/我审批的/抄送我的", businessType = BusinessType.OTHER)
765
	public Result<Object> selectMyAs(@CurrentUser UserBean userBean, @Validated @RequestBody MySummaryQueryDto mySummaryQueryDto) throws MethodArgumentNotValidException{
766 767 768 769 770 771 772 773 774
			IPage<SpmkApproveSummary> page = new Page<SpmkApproveSummary>(
				mySummaryQueryDto.getCurrentPage() == null ? 1 : mySummaryQueryDto.getCurrentPage(),
				mySummaryQueryDto.getTotalPage() == null ? 10 : mySummaryQueryDto.getTotalPage());
			mySummaryQueryDto.setOrgCode(userBean.getOrgCode());
			mySummaryQueryDto.setEmpNum(userBean.getEmpNum());
			// 缺-部门id 搜索
			IPage<SpmkApproveSummary> pageAs = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(page, mySummaryQueryDto);
			
			List<SpmkApproveSummary> listAs = pageAs.getRecords();
775
			return ResultUtil.data(pageAs, listAs);
776
	}
777
	
778 779 780 781 782 783 784 785
	//TODO 撤销审批
	/**
	 * 撤销审批
	 */
	@PutMapping(value = "/revoke_approval/{id}")
	@ApiOperation(value = "22.撤销审批", httpMethod = "PUT", notes = "撤销审批")
	@Transactional(rollbackFor = Exception.class)
	@ApiOperationSupport(order = 22)
tangzhaoqian committed
786
	@Log(title = "审批-撤销审批", businessType = BusinessType.UPDATE)
787 788 789 790 791 792 793
	public Result<Object> revokeApproval(@PathVariable Integer id) throws Exception {
		
		SpmkApproveSummary as = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>()
				.lambda()
				.select(SpmkApproveSummary::getSts)
				.eq(SpmkApproveSummary::getId, id));
		
794
		return as != null && as.getSts() != ApproveSummarySts.FINISH.ordinal() ? (SpmkApproveSummary.builder().id(id).endTime(new Date()).sts(ApproveSummarySts.UNDONE.ordinal()).build().updateById() ? 
795
				ResultUtil.success() : ResultUtil.error("撤销异常")) : ResultUtil.error("审批已结束,无法撤销!");
796 797 798 799 800 801 802 803
	}
	
	/**
	 * 删除-审批(发起的审批)-根据审批汇总id
	 */
	@DeleteMapping(value = "/delete_approval/{id}")
	@ApiOperation(value = "23.删除-审批(发起的审批)-根据审批汇总id", httpMethod = "DELETE", notes = "删除-审批(发起的审批)-根据审批汇总id")
	@ApiOperationSupport(order = 23)
tangzhaoqian committed
804
	@Log(title = "审批-删除审批", businessType = BusinessType.DELETE)
805 806 807 808 809
	public Result<Object> deleteApprovalData(@PathVariable Integer id){
		List<SpmkApproveExecuteRecord> listAer = spmkApproveExecuteRecordMapper.selectList(new QueryWrapper<SpmkApproveExecuteRecord>()
				.lambda()
				.select(SpmkApproveExecuteRecord::getId)
				.eq(SpmkApproveExecuteRecord::getApproveSummaryId, id));
810
		if (listAer != null && listAer.size() > 0) {
811 812 813 814 815 816 817 818 819 820 821
			for (SpmkApproveExecuteRecord aer : listAer) {
				spmkExecutorMapper.delete(new QueryWrapper<SpmkExecutor>().lambda().eq(SpmkExecutor::getApproveExecuteRecordId, aer.getId()));
			}
		}
		
		spmkApproveExecuteRecordMapper.delete(new QueryWrapper<SpmkApproveExecuteRecord>().lambda().eq(SpmkApproveExecuteRecord::getApproveSummaryId, id));
		
		spmkApproveDetailMapper.delete(new QueryWrapper<SpmkApproveDetail>().lambda().eq(SpmkApproveDetail::getApproveSummaryId, id));
		
		spmkApproveSummaryMapper.delete(new QueryWrapper<SpmkApproveSummary>().lambda().eq(SpmkApproveSummary::getId, id));
		
822
		return ResultUtil.success();
823 824
	}
	
825
	/**
826
	 * 删除-审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据
827 828
	 */
	@DeleteMapping(value = "/delete_approval_data")
829
	@ApiOperation(value = "90.(开发使用)删除-审批数据", httpMethod = "DELETE", notes = "审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据")
tangzhaoqian committed
830
	@ApiOperationSupport(order = 90)
831
	public Result<Object> deleteApprovalData(@CurrentUser UserBean userBean){
832 833
		spmkApprovalGMapper.delete(null);
		spmkCustomApprovalMapper.delete(null);
834 835 836 837
		spmkApproveSummaryMapper.delete(null);
		spmkApproveDetailMapper.delete(null);
		spmkApproveExecuteRecordMapper.delete(null);
		spmkExecutorMapper.delete(null);
838
		System.out.println("删除-审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据 完成!");
839
		return ResultUtil.success();
840
	}
841
	
tangzhaoqian committed
842 843 844 845 846 847 848 849 850 851 852
	//TODO 审批图标列表
	@GetMapping(value = "/icon")
	@ApiOperation(value = "99.图标列表", httpMethod = "GET", notes = "接口发布说明")
	@ApiOperationSupport(order = 99)
	public Result<List<SpmkIcon>> selectListIcon(@CurrentUser UserBean userBean){
		
		List<SpmkIcon> spmkIcons = SpmkIcon.builder().build().selectAll();
		
		return ResultUtil.data(spmkIcons,"获取图标列表成功");
	}
	
853 854 855 856 857 858
	//TODO 测试-生成 审批组 和 自定义审批
	@GetMapping(value = "/test")
	@ApiOperation(value = "98.测试-生成 审批组 和 自定义审批", httpMethod = "GET", notes = "测试-生成 审批组 和 自定义审批")
	@ApiOperationSupport(order = 98)
	public Result<List<SpmkIcon>> createCustomApproval(@RequestParam Integer orgCode){
		
859
		spmkService.createCustomApproval(orgCode);
860 861 862
		
		List<SpmkIcon> spmkIcons = SpmkIcon.builder().build().selectAll();
		
863
		return ResultUtil.data(spmkIcons,"生成 审批组 和 自定义审批成功");
864
	}
lal committed
865 866 867 868 869 870 871 872 873 874 875 876 877
	
	@GetMapping(value = "/verification_staff")
	@ApiOperation(value = "校验员工是否是正式员工", httpMethod = "GET", notes = " 查询列表-假期规则")
	public Result<Object> verification_staff(@CurrentUser UserBean userBean) {
		String msg = "";
		YgglMainEmp ygem = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
				.eq(YgglMainEmp::getEmpNum, userBean.getEmpNum()));
		if(ygem.getJobStatus() == 1) {
			msg = "正式员工不能发起转正审批";
		}
		
		return ResultUtil.data(msg);
	}
yuquan.zhu committed
878
}