diff --git a/src/main/java/cn/timer/api/controller/spmk/SpmkController.java b/src/main/java/cn/timer/api/controller/spmk/SpmkController.java
index 75c15e1..64bafcd 100644
--- a/src/main/java/cn/timer/api/controller/spmk/SpmkController.java
+++ b/src/main/java/cn/timer/api/controller/spmk/SpmkController.java
@@ -1,1055 +1,1070 @@
-package cn.timer.api.controller.spmk;
-
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import cn.timer.api.bean.spmk.*;
-import cn.timer.api.dao.spmk.*;
-import cn.timer.api.dto.spmk.*;
-import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
-import net.sf.json.JSONArray;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-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;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.lang.Console;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONObject;
-import cn.timer.api.aspect.lang.annotation.Log;
-import cn.timer.api.aspect.lang.enums.BusinessType;
-import cn.timer.api.bean.kqgl.PunchRecord;
-import cn.timer.api.bean.kqmk.KqglAssoLeaveRules;
-import cn.timer.api.bean.qyzx.QyzxEmpEntAsso;
-import cn.timer.api.bean.yggl.YgglMainEmp;
-import cn.timer.api.bean.zzgl.ZzglBmgwM;
-import cn.timer.api.config.annotation.CurrentUser;
-import cn.timer.api.config.annotation.UserBean;
-import cn.timer.api.config.enuminterface.SpmkEnumInterface;
-import cn.timer.api.config.enuminterface.SpmkEnumInterface.ApproveSummarySts;
-import cn.timer.api.config.enuminterface.SpmkEnumInterface.ExecutorSts;
-import cn.timer.api.config.enums.CommonEnum;
-import cn.timer.api.config.enums.SysRoleType;
-import cn.timer.api.config.exception.CustomException;
-import cn.timer.api.config.validation.Insert;
-import cn.timer.api.config.validation.Ranks;
-import cn.timer.api.config.validation.Update;
-import cn.timer.api.config.validation.ValidList;
-import cn.timer.api.controller.spmk.service.SpmkService;
-import cn.timer.api.controller.yggl.service.YgglService;
-import cn.timer.api.controller.zzgl.service.ZzglBmgwMService;
-import cn.timer.api.dao.kqgl.PunchRecordMapper;
-import cn.timer.api.dao.qyzx.QyzxEmpEntAssoMapper;
-import cn.timer.api.utils.Result;
-import cn.timer.api.utils.ResultUtil;
-import cn.timer.api.utils.router.RouterUtils;
-import cn.timer.api.utils.router.business.SpmkAssoBusiness;
-import cn.timer.api.utils.router.business.SpmkAssoBusinessFactory;
-import cn.timer.api.utils.router.enums.ApproveEnum;
-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" })
-public class SpmkController {
-
-	@Autowired
-	private SpmkService spmkService;
-	@Autowired
-	private ZzglBmgwMService zzglBmgwMService;
-
-	@Autowired
-	private QyzxEmpEntAssoMapper qyzxEmpEntAssoMapper;
-	@Autowired
-	private SpmkApprovalTemplateGMapper spmkApprovalTemplateGMapper;
-	@Autowired
-	private SpmkApprovalTemplateMapper spmkApprovalTemplateMapper;
-	@Autowired
-	private SpmkApprovalGMapper spmkApprovalGMapper;
-	@Autowired
-	private SpmkCustomApprovalMapper spmkCustomApprovalMapper;
-	@Autowired
-	private SpmkApproveSummaryMapper spmkApproveSummaryMapper;
-	@Autowired
-	private SpmkApproveExecuteRecordMapper spmkApproveExecuteRecordMapper;
-	@Autowired
-	private SpmkExecutorMapper spmkExecutorMapper;
-	@Autowired
-	private SpmkInitiatorConfigMapper spmkInitiatorConfigMapper;
-	@Autowired
-	private SpmkApproveDetailSummaryMapper spmkApproveDetailSummaryMapper;
-
-	@Autowired
-	private SpmkAssoBusinessFactory spmkAssoBusinessFactory;
-
-	private static com.alibaba.fastjson.JSONObject jsonObject = new  com.alibaba.fastjson.JSONObject();
-
-	private boolean ISFIRST = true; // 第一次启动审批流程
-
-
-
-
-	//TODO 审批模板组
-	/**
-	 * 新增或编辑-审批模板组
-	 */
-	@PostMapping(value = "/save_approval_template_g")
-	@ApiOperation(value = "1.新增或编辑-审批模板组", httpMethod = "POST", notes = "新增或编辑-审批模板组")
-	@ApiOperationSupport(order = 1)
-	public Result<Object> saveAtg(@Validated({Insert.class,Update.class}) @RequestBody SpmkApprovalTemplateG spmkApprovalTemplateG){
-
-		if (spmkApprovalTemplateG.selectCount(new QueryWrapper<SpmkApprovalTemplateG>().lambda()
-				.ne(spmkApprovalTemplateG.getId() != null,SpmkApprovalTemplateG::getId, spmkApprovalTemplateG.getId())
-				.eq(SpmkApprovalTemplateG::getName, spmkApprovalTemplateG.getName())) > 0) {
-			return ResultUtil.error("审批模板组名重复!");
-		}
-
-		return spmkApprovalTemplateG.insertOrUpdate() ?
-				ResultUtil.data(spmkApprovalTemplateG) : ResultUtil.error();
-	}
-
-	/**
-	 * 删除-审批模板组
-	 */
-	@DeleteMapping(value = "/delete_approval_template_g/{id}")
-	@ApiOperation(value = "2.删除-审批模板组", httpMethod = "DELETE", notes = "删除-审批模板组")
-	@ApiOperationSupport(order = 2)
-	public Result<Object> deleteAtgById(@PathVariable int id){
-
-		if (spmkApprovalTemplateMapper.selectCount(new QueryWrapper<SpmkApprovalTemplate>().lambda().eq(SpmkApprovalTemplate::getApprovalTemplateGId, id)) > 0 )
-			return ResultUtil.error("审批模板组存在 模板,不可直接删除!");
-
-		return SpmkApprovalTemplateG.builder().id(id).build().deleteById() ?
-				ResultUtil.success() : ResultUtil.error("没有找到该对象");
-	}
-
-	/**
-	 * 查询列表-审批模板组
-	 */
-	@GetMapping(value = "/list_approval_template_g")
-	@ApiOperation(value = "3.查询列表-审批模板组", httpMethod = "GET", notes = "查询列表-审批模板组")
-	@ApiOperationSupport(order = 3)
-	public Result<Object> selectListAtg(){
-
-		return ResultUtil.data(spmkApprovalTemplateGMapper.selectListAtInAtg());
-	}
-
-	/**
-	 * 排序-审批模板组
-	 */
-	@PutMapping(value = "/update_approval_template_g")
-	@ApiOperation(value = "4.排序-审批模板组", httpMethod = "PUT", notes = "排序-审批模板组")
-	@ApiOperationSupport(order = 4)
-	public Result<Object> ranksAtg(@Validated(Ranks.class) @RequestBody ValidList<SpmkApprovalTemplateG> list){
-
-		if (list == null || (list != null && list.size() <= 0)) {
-			return ResultUtil.success();
-		}
-		return spmkApprovalTemplateGMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
-	}
-
-	//TODO 审批模板
-	/**
-	 * 新增或编辑-审批模板
-	 */
-	@PostMapping(value = "/save_approval_template")
-	@ApiOperation(value = "5.新增或编辑-审批模板", httpMethod = "POST", notes = "新增或编辑-审批模板")
-	@ApiOperationSupport(order = 5)
-	public Result<Object> saveAt(@Validated @RequestBody SpmkApprovalTemplateDto spmkApprovalTemplateDto){
-
-		Integer approvalTemplateGId = spmkApprovalTemplateDto.getApprovalTemplateGId();
-		if (ObjectUtil.isNull(approvalTemplateGId))
-			return ResultUtil.error("审批模板ID不为空");
-
-		SpmkApprovalTemplate at = SpmkApprovalTemplate.builder().build();
-
-		// 克隆 SpmkApprovalTemplateDto对象 到 SpmkApprovalTemplate对象,排除属性froms,router
-		BeanUtil.copyProperties(spmkApprovalTemplateDto, at , "froms","router");
-		// 序列化 后 写入 SpmkApprovalTemplate对象
-		at.setFroms(ObjectUtil.serialize((List<JSONObject>)spmkApprovalTemplateDto.getFroms()));
-		at.setRouter(ObjectUtil.serialize(spmkApprovalTemplateDto.getRouter()));
-
-		if (at.selectCount(new QueryWrapper<SpmkApprovalTemplate>().lambda()
-				.ne(at.getId() != null, SpmkApprovalTemplate::getId, at.getId())
-				.eq(SpmkApprovalTemplate::getName, at.getName())) > 0) {
-			return ResultUtil.error("审批模板名重复!");
-		}
-
-		if (!at.insertOrUpdate())
-			return ResultUtil.error("数据库操作失败");
-
-		// 清空前端不需要的字段再返回,节省流量
-		at.setFroms(null);
-		at.setRouter(null);
-		return  ResultUtil.data(at);
-
-	}
-
-	/**
-	 * 删除-审批模板
-	 */
-	@DeleteMapping(value = "/delete_approval_template/{id}")
-	@ApiOperation(value = "6.删除-审批模板", httpMethod = "DELETE", notes = "删除-审批模板")
-	@ApiOperationSupport(order = 6)
-	public Result<Object> deleteAtById(@PathVariable int id){
-
-		return SpmkApprovalTemplate.builder().id(id).build().deleteById() ? ResultUtil.success() : ResultUtil.error("没有找到该对象");
-
-	}
-
-	/**
-	 * id查询-审批模板
-	 */
-	@GetMapping(value = "/select_approval_template/{id}")
-	@ApiOperation(value = "7.id查询-审批模板", httpMethod = "GET", notes = "id查询-审批模板")
-	@ApiOperationSupport(order = 7)
-	public Result<Object> selectAtById(@PathVariable int id){
-		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()));
-		return ResultUtil.data(atd);
-
-	}
-
-	/**
-	 * 排序-审批模板
-	 */
-	@PutMapping(value = "/update_approval_template")
-	@ApiOperation(value = "8.排序-审批模板", httpMethod = "PUT", notes = "查询列表-审批模板组")
-	@ApiOperationSupport(order = 8)
-	public Result<Object> ranksAt(@Validated({Ranks.class})@RequestBody ValidList<SpmkApprovalTemplate> list){
-
-		if (list == null || (list != null && list.size() <= 0)) {
-			return ResultUtil.success();
-		}
-
-		return spmkApprovalTemplateMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
-
-	}
-
-
-
-	//TODO 审批组
-	/**
-	 * 新增或编辑-审批组
-	 */
-	@PostMapping(value = "/save_approval_g")
-	@ApiOperation(value = "9.新增或编辑-审批组", httpMethod = "POST", notes = "新增或编辑-审批组")
-	@ApiOperationSupport(order = 9)
-	public Result<Object> saveAg(@CurrentUser UserBean userBean, @Validated({Insert.class,Update.class}) @RequestBody SpmkApprovalG spmkApprovalG){
-
-		if (spmkApprovalG.selectCount(new QueryWrapper<SpmkApprovalG>().lambda()
-				.ne(spmkApprovalG.getId() != null, SpmkApprovalG::getId, spmkApprovalG.getId())
-				.eq(SpmkApprovalG::getName, spmkApprovalG.getName())
-				.eq(SpmkApprovalG::getOrgCode, userBean.getOrgCode())) > 0) {
-			return ResultUtil.error("审批组名重复!");
-		}
-
-		spmkApprovalG.setOrgCode(userBean.getOrgCode());
-		return spmkApprovalG.insertOrUpdate() ? ResultUtil.data(spmkApprovalG) : ResultUtil.error();
-
-	}
-
-	/**
-	 * 删除-审批组
-	 */
-	@DeleteMapping(value = "/delete_approval_g/{id}")
-	@ApiOperation(value = "10.删除-审批组", httpMethod = "DELETE", notes = "删除-审批组")
-	@ApiOperationSupport(order = 10)
-	public Result<Object> deleteAgById(@PathVariable int id){
-
-//		if (spmkCustomApprovalMapper.selectCount(new QueryWrapper<SpmkCustomApproval>().lambda().eq(SpmkCustomApproval::getApprovalGId, id)) > 0 )
-//			return ResultUtil.error("审批组存在 自定义审批,不可直接删除!");
-
-		SpmkCustomApproval.builder().build().delete(new QueryWrapper<SpmkCustomApproval>().lambda().eq(SpmkCustomApproval::getApprovalGId, id));
-		return SpmkApprovalG.builder().id(id).build().deleteById() ? ResultUtil.success() : ResultUtil.error("没有找到该对象");
-
-	}
-
-	/**
-	 * 查询列表-审批组-审批管理
-	 */
-	@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());
-		return ResultUtil.data(spmkApprovalGMapper.selectListAgInCaByAdmin(userBean.getOrgCode(), userBean.getEmpNum(), depts));
-
-	}
-
-	/**
-	 * 查询列表-审批组-个人审批
-	 */
-	@GetMapping(value = "/list_approval_g")
-	@ApiOperation(value = "11.查询列表-审批组-个人审批", httpMethod = "GET", notes = "查询列表-审批组-个人审批")
-	@ApiOperationSupport(order = 11)
-	public Result<Object> selectListAg(@CurrentUser UserBean userBean){
-
-		return ResultUtil.data(spmkService.selectListAg(userBean));
-	}
-
-	/**
-	 * 排序-审批组
-	 */
-	@PutMapping(value = "/update_approval_g")
-	@ApiOperation(value = "12.排序-审批组", httpMethod = "PUT", notes = "排序-审批组")
-	@ApiOperationSupport(order = 12)
-	public Result<Object> ranksAg(@Validated({Ranks.class}) @RequestBody ValidList<SpmkApprovalG> list){
-
-		if (list == null || list.size() <= 0) {
-			return ResultUtil.success();
-		}
-
-		return spmkApprovalGMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
-	}
-
-	//TODO 自定义审批
-
-	/**
-	 * 新增或编辑-自定义审批
-	 */
-	@PostMapping(value = "/save_custom_approval")
-	@ApiOperation(value = "13.新增或编辑-自定义审批", httpMethod = "POST", notes = "新增或编辑-自定义审批")
-	@ApiOperationSupport(order = 13)
-	@Transactional(rollbackFor = Exception.class)
-	public Result<Object> saveCa(@CurrentUser UserBean userBean,@Validated @RequestBody SpmkCustomApprovalDto spmkCustomApprovalDto) throws Exception{
-
-		SpmkCustomApproval ca = SpmkCustomApproval.builder().build();
-
-		BeanUtil.copyProperties(spmkCustomApprovalDto, ca , "froms","router","initiatorConfigs");
-
-		if (ca.selectCount(new QueryWrapper<SpmkCustomApproval>().lambda()
-				.ne(ca.getId() != null, SpmkCustomApproval::getId, ca.getId())
-				.eq(SpmkCustomApproval::getName, ca.getName())
-				.eq(SpmkCustomApproval::getOrgCode, userBean.getOrgCode())) > 0) {
-			return ResultUtil.error("自定义审批名重复!");
-		}
-		ca.setOrgCode(userBean.getOrgCode());
-		ca.setFroms(ObjectUtil.serialize(spmkCustomApprovalDto.getFroms()));
-		ca.setRouter(ObjectUtil.serialize(spmkCustomApprovalDto.getRouter()));
-		ca.setUpdateTime(new Date());
-
-		//1.新增 SpmkCustomApproval-自定义审批
-		if (!ca.insertOrUpdate())
-			return ResultUtil.error("新增自定义审批 失败!");
-
-
-		Integer id = ca.getId();
-		// 2.删除	历史的  SpmkInitiatorConfig-审批发起人配置,
-		SpmkInitiatorConfig.builder().build().delete(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
-		Console.log("自定义审批id: " + id);
-		List<SpmkInitiatorConfig> listIc = spmkCustomApprovalDto.getInitiatorConfigs();
-
-		if (listIc != null && listIc.size() > 0) {
-			for (int i = 0, n = listIc.size(); i < n; i++) {
-				listIc.get(i).setCustomApprovalId(id);
-			}
-			// 3.新增	最新的 SpmkInitiatorConfig-审批发起人配置,
-			if (!spmkInitiatorConfigMapper.insertList(listIc)) {
-				// 手动抛出异常,事务回滚
-				throw new Exception();
-			}
-
-		}
-
-		//
-		/**
-		 * 注意: 为保证该api的原子性 要加 事务处理 回滚(方法注解-@Transactional(rollbackFor = Exception.class))
-		 * 1.新增 SpmkCustomApproval-自定义审批
-		 * 2.删除	历史的  SpmkInitiatorConfig-审批发起人配置,
-		 * 3.新增	最新的 SpmkInitiatorConfig-审批发起人配置,
-		 */
-
-		// 清空前端不需要的字段再返回,节省流量
-		ca.setFroms(null);
-		ca.setRouter(null);
-		return ResultUtil.data(ca);
-
-	}
-
-	/**
-	 * 删除-自定义审批
-	 * @throws Exception
-	 */
-	@DeleteMapping(value = "/delete_custom_approval/{id}")
-	@ApiOperation(value = "14.删除-自定义审批", httpMethod = "DELETE", notes = "删除-自定义审批")
-	@Transactional(rollbackFor = Exception.class)
-	@ApiOperationSupport(order = 14)
-	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();
-		}
-
-		return  ResultUtil.success();
-	}
-
-	/**
-	 * id查询-自定义审批
-	 */
-	@GetMapping(value = "/select_custom_approval/{id}")
-	@ApiOperation(value = "15.id查询-自定义审批", httpMethod = "GET", notes = "id查询-自定义审批")
-	@ApiOperationSupport(order = 15)
-	public Result<Object> selectCaById(@PathVariable int id){
-		SpmkCustomApproval ca = SpmkCustomApproval.builder().id(id).build().selectById();
-		List<SpmkInitiatorConfig> listIc = SpmkInitiatorConfig.builder().build().selectList(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
-		SpmkCustomApprovalDto caD = SpmkCustomApprovalDto.builder()
-				.froms(ObjectUtil.deserialize(ca.getFroms()))
-				.router(ObjectUtil.deserialize(ca.getRouter()))
-				.build();
-		BeanUtil.copyProperties(ca, caD,"froms","router");
-		caD.setInitiatorConfigs(listIc);
-		return ResultUtil.data(caD);
-	}
-
-	/**
-	 * 排序-自定义审批
-	 */
-	@PutMapping(value = "/update_custom_approval")
-	@ApiOperation(value = "16.排序-自定义审批", httpMethod = "PUT", notes = "排序-自定义审批")
-	@ApiOperationSupport(order = 16)
-	public Result<Object> ranksCa(@Validated({Ranks.class}) @RequestBody ValidList<SpmkCustomApproval> list){
-
-		if (list == null || (list != null && list.size() <= 0)) {
-			return ResultUtil.success();
-		}
-
-		return spmkCustomApprovalMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
-	}
-
-	@Autowired
-	YgglService ygglService;
-
-	/**
-	 * 排序-自定义审批
-	 */
-	@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;
-		Set<Integer> all = getId != null ? empNumupdept2(lanzi, bmgws, getId) : new HashSet<Integer>();
-		all.add(getId);
-		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;
-	}
-
-	// TODO 审批汇总(发起审批)
-	/**
-	 * 发起审批
-	 * @throws Exception
-	 */
-	@PostMapping(value = "/start_approval")
-	@ApiOperation(value = "17.发起审批", httpMethod = "POST", notes = "发起审批")
-	@ApiOperationSupport(order = 17)
-	@Transactional(rollbackFor = Exception.class)
-	@Log(title = "审批-发起审批", businessType = BusinessType.INSERT)
-	public Result<Object> saveA(@CurrentUser UserBean userBean,@Validated @RequestBody SpmkApproveSummaryDto spmkApproveSummaryDto) throws Exception{
-		YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>()
-				.lambda()
-				.select(YgglMainEmp::getHeadUrl,YgglMainEmp::getName)
-				.eq(YgglMainEmp::getEmpNum, userBean.getEmpNum())
-				.eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
-		);
-
-		if (ygglMainEmp == null)
-			return ResultUtil.error("发起人不存在!");
-
-//			List<SpmkApprovalG> saG = spmkService.selectListAg(userBean);
-
-		Router router = spmkApproveSummaryDto.getRouter();
-		List<Router> routers = router.getChildren();
-//			routers = RouterUtils.clearRouters(routers);
-		if(routers==null){
-			return ResultUtil.error("无法发起,请完善审批流程");
-		}
-		if (CollectionUtil.isNotEmpty(routers)) {
-//				boolean hasAudit=false;
-//				if(routers.size()>0){
-//					for (Relation relation:routers.get(0).getRelation()) {
-//						if(relation.getUsers().size()>0){
-//							hasAudit=true;
-//						}
-//					}
-//				}
-////				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("无法发起,请完善审批流程");
-////				}
-//				if(!hasAudit){
-//					return ResultUtil.error("请选择审批人!");
-//				}
-		}else {
-			return ResultUtil.error("无法发起,请完善审批流程");
-		}
-
-		List<Router> listRouter = new ArrayList<Router>();
-		listRouter.add(router);
-
-		JSONObject jSONObject = spmkApproveSummaryDto.getRequestData()
-				.set("orgCode", userBean.getOrgCode())
-				.set("initiator", ygglMainEmp.getName())
-				.set("headUrl", ygglMainEmp.getHeadUrl())
-				.set("id", userBean.getEmpNum());
-		RouterUtils.NextNode(listRouter, jSONObject, ISFIRST);
-		List<FlowChildren> listFlowChildren = new ArrayList<FlowChildren>();
-		RouterUtils.getIsFlowChildren(listRouter,listFlowChildren);
-
-		if(listFlowChildren.isEmpty()){
-			return ResultUtil.error("无法发起,请完善审批流程");
-		}
-		List<FlowChildren> listFlowChildren1 = (ArrayList<FlowChildren>) SerializationUtils.clone((Serializable) listFlowChildren);
-		List<String> uidlist = new ArrayList<>();
-		int i=0;
-		int fsize = listFlowChildren.size();
-		int f=0;//listFlowChildren删除次数
-		for (FlowChildren flowChildrenItem: listFlowChildren) {
-			if ("audit".equals(flowChildrenItem.getClassName())) {
-				boolean hasAudit = false;
-
-				for (Relation relation : flowChildrenItem.getRelation()) {
-					if (relation.getUsers().size() > 0) {
-						hasAudit = true;
-						//审批人去重
-						if (relation.getUsers().size() > 1){
-							int j=0;
-							int usize=relation.getUsers().size();//
-							int r=0;//user list删除次数
-							for (User user:relation.getUsers()
-							) {
-								if (!uidlist.contains(user.getId())) {
-									uidlist.add(user.getId());
-								}else {
-									listFlowChildren1.get(i).getRelation().get(0).getUsers().remove(j-r);
-									r++;
-								}
-								j++;
-							}
-							if (usize==r){
-								listFlowChildren1.remove(i-f);
-								f++;
-							}
-						}else {
-							if (!uidlist.contains(relation.getUsers().get(0).getId())) {
-								uidlist.add(relation.getUsers().get(0).getId());
-							}else {
-								listFlowChildren1.remove(i-f);
-								f++;
-							}
-						}
-					}
-				}
-				if (!hasAudit) {
-					return ResultUtil.error("审批流程设置审批人为空无法发起!");
-				}
-			}
-			i++;
-		}
-		listFlowChildren = (ArrayList<FlowChildren>) SerializationUtils.clone((Serializable) listFlowChildren1);
-
-		/*for (FlowChildren flowChildrenItem: listFlowChildren) {
-			if("audit".equals(flowChildrenItem.getClassName())){
-				boolean hasAudit=false;
-				for (Relation relation:flowChildrenItem.getRelation()) {
-					if(relation.getUsers().size()>0){
-						hasAudit=true;
-					}
-				}
-				if(!hasAudit){
-					return ResultUtil.error("审批流程设置审批人为空无法发起!");
-				}
-			}
-		}*/
-
-		Logoutput("listFlowChildren");
-
-		// 当前审批人
-		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())
-				.assoType(spmkApproveSummaryDto.getAssoType())
-				.sts(ApproveSummarySts.IN.ordinal())
-				.currentApprover(currentApprover).build();
-
-		if (!as.insert()) {
-			throw new CustomException("审批汇总-新增异常");
-		}
-
-		// 插入记录- 审批执行记录 - 执行人记录
-		RouterUtils.insertogExecuteRecord(listFlowChildren, as.getId());
-
-		// 封装 审批详情
-		SpmkApproveDetailSummary adm = SpmkApproveDetailSummary.builder().build();
-		adm.setApproveSummaryId(as.getId());
-		adm.setName(spmkApproveSummaryDto.getTitle());
-		adm.setRequestData(spmkApproveSummaryDto.getRequestData().toString());
-		adm.setFroms(spmkApproveSummaryDto.getFroms().toString());
-		adm.setRouter(listRouter.get(0).toJSONString());
-		adm.setFlowChildren(JSONArray.fromObject(listFlowChildren).toString());
-		try {
-			spmkApproveDetailSummaryMapper.insert(adm);
-		}catch (Exception e){
-			throw new CustomException("审批详情-新增异常");
-		}
-
-		return ResultUtil.success();
-	}
-
-	//TODO 审批汇总
-	/**
-	 * 审批汇总
-	 * @param summaryQueryDto
-	 * @return
-	 * @throws
-	 */
-	@PostMapping(value = "/select_approve_summary")
-	@ApiOperation(value = "18.审批汇总", httpMethod = "POST", notes = "审批汇总")
-	@ApiOperationSupport(order = 18)
-	@Log(title = "审批-审批汇总", businessType = BusinessType.OTHER)
-	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());
-
-		Integer deptId = summaryQueryDto.getDeptId();
-		List<YgglMainEmp> listYgglMainEmp = zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), deptId);
-
-		if (deptId != null && (listYgglMainEmp == null || listYgglMainEmp.size() == 0)) {
-			return ResultUtil.data(new ArrayList<SpmkApproveSummary>());
-		}
-
-		List<Integer> empNums = new ArrayList<Integer>();
-		for (YgglMainEmp ygglMainEmp : listYgglMainEmp) {
-			empNums.add(ygglMainEmp.getEmpNum());
-		}
-		summaryQueryDto.setEmpNums(empNums);
-
-		// 缺-部门id 搜索
-		IPage<SpmkApproveSummary> pageAs = spmkApproveSummaryMapper.selectPageByQuery(page, summaryQueryDto);
-
-		List<SpmkApproveSummary> listAs = pageAs.getRecords();
-
-		return ResultUtil.data(pageAs, listAs);
-	}
-
-	//TODO 审批详情
-	/**
-	 * 审批详情
-	 */
-	@GetMapping(value = "/select_approve_detail/{id}")
-	@ApiOperation(value = "19.审批详情", httpMethod = "GET", notes = "审批详情")
-	@ApiOperationSupport(order = 19)
-	@Log(title = "审批-审批详情", businessType = BusinessType.OTHER)
-	public Result<Object> selectAd(@PathVariable(required = true) Integer id) {
-
-		SpmkApproveDetailDto adD = spmkService.selectApproveDetailByAsId(id);
-		System.out.println(ResultUtil.data(adD));
-		return ResultUtil.data(adD);
-
-	}
-
-	//TODO 审批人审批
-	/**
-	 * 审批人审批
-	 */
-	@PostMapping(value = "/approving")
-	@ApiOperation(value = "20.审批人审批", httpMethod = "POST", notes = "审批人审批")
-	@Transactional(rollbackFor = Exception.class)
-	@ApiOperationSupport(order = 20)
-	@Log(title = "审批-审批流程", businessType = BusinessType.UPDATE)
-//	@BindingResultCtrol(title = "审批人审批")
-	public Result<Object> approving(@CurrentUser UserBean userBean,@Validated @RequestBody ApprovingDto approvingDto) throws Exception {
-
-		Integer asId = approvingDto.getAsId();
-		SpmkApproveDetailSummary ad = SpmkApproveDetailSummary.builder().build().selectOne(new QueryWrapper<SpmkApproveDetailSummary>()
-				.lambda()
-				.select(SpmkApproveDetailSummary::getId,
-						SpmkApproveDetailSummary::getRequestData,
-						SpmkApproveDetailSummary::getFlowChildren)
-				.eq(SpmkApproveDetailSummary::getApproveSummaryId, asId));
-
-		// 查询 SpmkApproveSummary 状态
-		SpmkApproveSummary aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda()
-				.select(SpmkApproveSummary::getSts)
-				.eq(SpmkApproveSummary::getId, asId));
-
-		if (aSummary.getSts() > SpmkEnumInterface.ApproveSummarySts.IN.ordinal()) {
-			return ResultUtil.error("该审批已结束!");
-		}
-
-		// 查询该 审批的状态 是否为 1 审批中
-		Integer count = SpmkExecutor.builder().build().selectCount(new QueryWrapper<SpmkExecutor>().lambda()
-				.eq(SpmkExecutor::getId, approvingDto.getExecutorId())
-				.eq(SpmkExecutor::getSts, ExecutorSts.IN_EXECUTION.ordinal()));
-
-		if (count == 0) {
-			return ResultUtil.error("您已审批过!");
-		}
-
-		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) {
-
-			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("非当前审批人 或 管理员,无法操作!");
-			}
-
-		}
-
-		if (aSummary.getSts() == 0) {
-			List<FlowChildren> listFlowChildren = jsonObject.parseArray(ad.getFlowChildren(),FlowChildren.class);
-			// 审批逻辑
-			RouterUtils.approving(
-					listFlowChildren,
-					asId,
-					approvingDto.getExecuteRecordId(),
-					approvingDto.getExecutorId(),
-					approvingDto.getOpinion(),
-					approvingDto.getSts(),
-					approvingDto.getUser()
-			);
-
-			// 更新 flowChildren
-			SpmkApproveDetailSummary.builder().id(ad.getId()).flowChildren(JSONArray.fromObject(listFlowChildren).toString()).build().updateById();
-			FlowChildren fc = CollUtil.getLast(listFlowChildren);
-			if (fc.getExecute() == "2") {
-				// 查询 SpmkApproveSummary 状态
-				aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda()
-						.select(SpmkApproveSummary::getSts,SpmkApproveSummary::getAssoType)
-						.eq(SpmkApproveSummary::getId, asId));
-
-				if (aSummary.getSts() != SpmkEnumInterface.ApproveSummarySts.REFUSE.ordinal()) {
-					SpmkApproveSummary.builder().id(asId).currentApprover(CommonEnum.NULL_STR.getDesc()).endTime(new Date()).sts(ApproveSummarySts.FINISH.ordinal()).build().updateById();
-
-					JSONObject jSONObject = jsonObject.parseObject(ad.getRequestData(),JSONObject.class);
-					jSONObject.set("approveId", FromData.builder().value(String.valueOf(asId)).build());
-					jSONObject.set("orgCode", userBean.getOrgCode());
-
-					//审批完成后 业务
-					SpmkAssoBusiness sab = spmkAssoBusinessFactory.createSpmkService(ApproveEnum.getEnums(aSummary.getAssoType()));
-					if (sab != null)
-						Logoutput("1----------"+ sab);
-					Logoutput("2----------"+ jSONObject);
-					sab.handleApprove(jSONObject);
-				}
-			}
-
-		}else {
-			return ResultUtil.error("该审批已结束!");
-		}
-		return ResultUtil.success();
-	}
-
-	@Autowired
-	private PunchRecordMapper punchrecordmapper;
-	//TODO 我发起的/我审批的/抄送我的
-	/**
-	 * 查询列表-我发起的/我审批的/抄送我的-分页
-	 */
-	@PostMapping(value = "/select_my_approve")
-	@ApiOperation(value = "21.查询列表-我发起的/我审批的/抄送我的-分页", httpMethod = "POST", notes = "查询列表-我审批的-关键字、审批状态、发起时间-分页")
-	@ApiOperationSupport(order = 21)
-	@Log(title = "审批-我发起的/我审批的/抄送我的", businessType = BusinessType.OTHER)
-	public Result<Object> selectMyAs(@CurrentUser UserBean userBean, @Validated @RequestBody MySummaryQueryDto mySummaryQueryDto) throws MethodArgumentNotValidException{
-		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());
-		if(mySummaryQueryDto.getSts() == null) {
-			mySummaryQueryDto.setSts(0);
-		}
-		//我发起的
-		if(mySummaryQueryDto.getType() ==  0) {
-//				mySummaryQueryDto.setSts(null);
-		}
-		// 缺-部门id 搜索
-		IPage<SpmkApproveSummary> pageAs = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(page, mySummaryQueryDto);
-
-		List<SpmkApproveSummary> listAs = pageAs.getRecords();
-
-		for(SpmkApproveSummary sp : listAs) {
-
-			String requerstr = "";
-			try {
-				SpmkApproveDetailSummary ad = spmkApproveDetailSummaryMapper.selectOne(new QueryWrapper<SpmkApproveDetailSummary>().lambda().eq(SpmkApproveDetailSummary::getApproveSummaryId, sp.getId()));
-
-				JSONObject as =jsonObject.parseObject(ad.getRequestData().toString(),JSONObject.class);
-//					Logoutput(as);
-//					Logoutput(sp.getId()+"==========================================="+sp.getAssoType());
-				requerstr = "";
-				//assoType : 1转正 2离职 3调薪 4调岗 5加班 6请假 7出差 8外出 9补卡
-				switch (sp.getAssoType()) {
-					case 1:requerstr = "转正时间:"+as.getJSONObject("__newConfirmationTime").getStr("value");break;
-					case 2:requerstr = "离职时间:"+as.getJSONObject("__terminationDate").getStr("value");break;
-					case 3:
-						String namepos = "";
-						PunchRecord pu = punchrecordmapper.organizationalStructure(Integer.valueOf(as.getJSONObject("__TransferInDepartment").getStr("value")));
-						if(pu != null) {
-							namepos = pu.getPost();
-						}
-						requerstr = "调入岗位:"+namepos;
-						break;
-					case 5:requerstr = "加班时长:"+as.getJSONObject("__timeLong").getStr("value")+"(小时)";break;
-					case 6:
-						String name = "";
-						KqglAssoLeaveRules rul = KqglAssoLeaveRules.builder().build().selectById(as.getJSONObject("__LeaveType").getStr("value"));
-						if(rul != null) {
-							name = rul.getName();
-						}
-						requerstr = "请假类型:"+name;
-						break;
-					case 7:requerstr = "出差时长:"+as.getJSONObject("__longTime").getStr("value")+"(小时)";break;
-					case 8:requerstr = "外出时长:"+as.getJSONObject("__longTime").getStr("value")+"(小时)";break;
-					case 9:requerstr = "补卡时间:"+as.getJSONObject("__PatchCardTime").getStr("value");break;
-					default:
-						break;
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-//				Logoutput(requerstr);
-			sp.setDigest(requerstr);
-		}
-
-		return ResultUtil.data(pageAs, listAs);
-	}
-
-	//TODO 撤销审批
-	/**
-	 * 撤销审批
-	 */
-	@PutMapping(value = "/revoke_approval/{id}")
-	@ApiOperation(value = "22.撤销审批", httpMethod = "PUT", notes = "撤销审批")
-	@Transactional(rollbackFor = Exception.class)
-	@ApiOperationSupport(order = 22)
-	@Log(title = "审批-撤销审批", businessType = BusinessType.UPDATE)
-	public Result<Object> revokeApproval(@PathVariable Integer id) throws Exception {
-
-		SpmkApproveSummary as = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>()
-				.lambda()
-				.select(SpmkApproveSummary::getSts)
-				.eq(SpmkApproveSummary::getId, id));
-
-		return as != null && as.getSts() != ApproveSummarySts.FINISH.ordinal() ? (SpmkApproveSummary.builder().id(id).endTime(new Date()).sts(ApproveSummarySts.UNDONE.ordinal()).build().updateById() ?
-				ResultUtil.success() : ResultUtil.error("撤销异常")) : ResultUtil.error("审批已结束,无法撤销!");
-	}
-
-	/**
-	 * 删除-审批(发起的审批)-根据审批汇总id
-	 */
-	@DeleteMapping(value = "/delete_approval/{id}")
-	@ApiOperation(value = "23.删除-审批(发起的审批)-根据审批汇总id", httpMethod = "DELETE", notes = "删除-审批(发起的审批)-根据审批汇总id")
-	@ApiOperationSupport(order = 23)
-	@Log(title = "审批-删除审批", businessType = BusinessType.DELETE)
-	public Result<Object> deleteApprovalData(@PathVariable Integer id){
-		List<SpmkApproveExecuteRecord> listAer = spmkApproveExecuteRecordMapper.selectList(new QueryWrapper<SpmkApproveExecuteRecord>()
-				.lambda()
-				.select(SpmkApproveExecuteRecord::getId)
-				.eq(SpmkApproveExecuteRecord::getApproveSummaryId, id));
-		if (listAer != null && listAer.size() > 0) {
-			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));
-		//新审核表删除
-		spmkApproveDetailSummaryMapper.delete(new QueryWrapper<SpmkApproveDetailSummary>().lambda().eq(SpmkApproveDetailSummary::getApproveSummaryId,id));
-
-		spmkApproveSummaryMapper.delete(new QueryWrapper<SpmkApproveSummary>().lambda().eq(SpmkApproveSummary::getId, id));
-
-		return ResultUtil.success();
-	}
-
-	/**
-	 * 删除-审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据
-	 */
-	@DeleteMapping(value = "/delete_approval_data")
-	@ApiOperation(value = "90.(开发使用)删除-审批数据", httpMethod = "DELETE", notes = "审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据")
-	@ApiOperationSupport(order = 90)
-	public Result<Object> deleteApprovalData(@CurrentUser UserBean userBean){
-		spmkApprovalGMapper.delete(null);
-		spmkCustomApprovalMapper.delete(null);
-		spmkApproveSummaryMapper.delete(null);
-		spmkApproveDetailSummaryMapper.delete(null);
-		spmkApproveExecuteRecordMapper.delete(null);
-		spmkExecutorMapper.delete(null);
-		Logoutput("删除-审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据 完成!");
-		return ResultUtil.success();
-	}
-
-	//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,"获取图标列表成功");
-	}
-
-	//TODO 测试-生成 审批组 和 自定义审批
-	@GetMapping(value = "/test")
-	@ApiOperation(value = "98.测试-生成 审批组 和 自定义审批", httpMethod = "GET", notes = "测试-生成 审批组 和 自定义审批")
-	@ApiOperationSupport(order = 98)
-	public Result<List<SpmkIcon>> createCustomApproval(@RequestParam Integer orgCode){
-
-		spmkService.createCustomApproval(orgCode);
-
-		List<SpmkIcon> spmkIcons = SpmkIcon.builder().build().selectAll();
-
-		return ResultUtil.data(spmkIcons,"生成 审批组 和 自定义审批成功");
-	}
-
-	@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);
-	}
-
-	@PostMapping(value = "/approved_quantity")
-	@ApiOperation(value = "APP-我发起的/我审批的/抄送我的-数量", httpMethod = "POST", notes = "")
-	public Result<Object> ApprovedQuantity(@CurrentUser UserBean userBean, @Validated @RequestBody MySummaryQueryDto mysummaryquerydto){
-
-		ApprovedQuantityDto qna = ApprovedQuantityDto.builder().build();
-
-		mysummaryquerydto.setEndTime(null);
-		mysummaryquerydto.setStartTime(null);
-
-		mysummaryquerydto.setOrgCode(userBean.getOrgCode());
-		mysummaryquerydto.setEmpNum(userBean.getEmpNum());
-		mysummaryquerydto.setSts(5);//状态 0审批中 1审批撤销 2审批通过/审批完成 3审批拒绝 4:(2/3)	5:全部
-
-		int istartedit=0,ccme=0,iapprovedit=0;
-		mysummaryquerydto.setType(0);//我发起的
-		List<SpmkApproveSummary> istartedit_ = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(mysummaryquerydto);
-		if(istartedit_.size() > 0) {
-			istartedit = istartedit_.size();
-		}
-
-		mysummaryquerydto.setType(1);//抄送我的
-		List<SpmkApproveSummary> ccme_ = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(mysummaryquerydto);
-		if(ccme_.size() > 0) {
-			ccme = ccme_.size();
-		}
-
-		mysummaryquerydto.setType(2);//我审批的
-		List<SpmkApproveSummary> iapprovedit_ = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(mysummaryquerydto);
-		if(iapprovedit_.size() > 0) {
-			iapprovedit = iapprovedit_.size();
-		}
-
-		qna.setIstartedit(istartedit);
-		qna.setCcme(ccme);
-		qna.setIapprovedit(iapprovedit);
-
-
-		return ResultUtil.data(qna);
-	}
-
-	@Value("${config-8timer.environmental-science}")
-	public String environmental_science;
-
-	public void Logoutput(String science) {
-
-		if(!("pro").equals(environmental_science)) {
-
-			System.out.println(science);
-		}else {
-			System.out.println("");
-		}
-
-	}
-
-	/**
-	 * 审核详情数据转换
-	 */
-	@PostMapping(value = "/approved_addDetail")
-	@ApiOperation(value = "A审核详情数据转换", httpMethod = "POST", notes = "")
-	public String addApproveDetail(){
-		return spmkService.addApproveDetail();
-	}
-}
+package cn.timer.api.controller.spmk;
+
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import cn.timer.api.bean.spmk.*;
+import cn.timer.api.dao.spmk.*;
+import cn.timer.api.dto.spmk.*;
+import cn.timer.api.utils.redis.RedisUtil;
+import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
+import net.sf.json.JSONArray;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+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;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.lang.Console;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONObject;
+import cn.timer.api.aspect.lang.annotation.Log;
+import cn.timer.api.aspect.lang.enums.BusinessType;
+import cn.timer.api.bean.kqgl.PunchRecord;
+import cn.timer.api.bean.kqmk.KqglAssoLeaveRules;
+import cn.timer.api.bean.qyzx.QyzxEmpEntAsso;
+import cn.timer.api.bean.yggl.YgglMainEmp;
+import cn.timer.api.bean.zzgl.ZzglBmgwM;
+import cn.timer.api.config.annotation.CurrentUser;
+import cn.timer.api.config.annotation.UserBean;
+import cn.timer.api.config.enuminterface.SpmkEnumInterface;
+import cn.timer.api.config.enuminterface.SpmkEnumInterface.ApproveSummarySts;
+import cn.timer.api.config.enuminterface.SpmkEnumInterface.ExecutorSts;
+import cn.timer.api.config.enums.CommonEnum;
+import cn.timer.api.config.enums.SysRoleType;
+import cn.timer.api.config.exception.CustomException;
+import cn.timer.api.config.validation.Insert;
+import cn.timer.api.config.validation.Ranks;
+import cn.timer.api.config.validation.Update;
+import cn.timer.api.config.validation.ValidList;
+import cn.timer.api.controller.spmk.service.SpmkService;
+import cn.timer.api.controller.yggl.service.YgglService;
+import cn.timer.api.controller.zzgl.service.ZzglBmgwMService;
+import cn.timer.api.dao.kqgl.PunchRecordMapper;
+import cn.timer.api.dao.qyzx.QyzxEmpEntAssoMapper;
+import cn.timer.api.utils.Result;
+import cn.timer.api.utils.ResultUtil;
+import cn.timer.api.utils.router.RouterUtils;
+import cn.timer.api.utils.router.business.SpmkAssoBusiness;
+import cn.timer.api.utils.router.business.SpmkAssoBusinessFactory;
+import cn.timer.api.utils.router.enums.ApproveEnum;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import javax.annotation.Resource;
+
+@Api(tags = "3.0审批模块")
+@RestController
+@Transactional
+@RequestMapping(value = "/spmk", produces = { "application/json","multipart/form-data" })
+public class SpmkController {
+
+	@Autowired
+	private SpmkService spmkService;
+	@Autowired
+	private ZzglBmgwMService zzglBmgwMService;
+
+	@Autowired
+	private QyzxEmpEntAssoMapper qyzxEmpEntAssoMapper;
+	@Autowired
+	private SpmkApprovalTemplateGMapper spmkApprovalTemplateGMapper;
+	@Autowired
+	private SpmkApprovalTemplateMapper spmkApprovalTemplateMapper;
+	@Autowired
+	private SpmkApprovalGMapper spmkApprovalGMapper;
+	@Autowired
+	private SpmkCustomApprovalMapper spmkCustomApprovalMapper;
+	@Autowired
+	private SpmkApproveSummaryMapper spmkApproveSummaryMapper;
+	@Autowired
+	private SpmkApproveExecuteRecordMapper spmkApproveExecuteRecordMapper;
+	@Autowired
+	private SpmkExecutorMapper spmkExecutorMapper;
+	@Autowired
+	private SpmkInitiatorConfigMapper spmkInitiatorConfigMapper;
+	@Autowired
+	private SpmkApproveDetailSummaryMapper spmkApproveDetailSummaryMapper;
+
+	@Autowired
+	private SpmkAssoBusinessFactory spmkAssoBusinessFactory;
+
+	private static com.alibaba.fastjson.JSONObject jsonObject = new  com.alibaba.fastjson.JSONObject();
+
+	private boolean ISFIRST = true; // 第一次启动审批流程
+
+	@Resource
+	private RedisUtil redisUtil;
+
+
+	//TODO 审批模板组
+	/**
+	 * 新增或编辑-审批模板组
+	 */
+	@PostMapping(value = "/save_approval_template_g")
+	@ApiOperation(value = "1.新增或编辑-审批模板组", httpMethod = "POST", notes = "新增或编辑-审批模板组")
+	@ApiOperationSupport(order = 1)
+	public Result<Object> saveAtg(@Validated({Insert.class,Update.class}) @RequestBody SpmkApprovalTemplateG spmkApprovalTemplateG){
+
+		if (spmkApprovalTemplateG.selectCount(new QueryWrapper<SpmkApprovalTemplateG>().lambda()
+				.ne(spmkApprovalTemplateG.getId() != null,SpmkApprovalTemplateG::getId, spmkApprovalTemplateG.getId())
+				.eq(SpmkApprovalTemplateG::getName, spmkApprovalTemplateG.getName())) > 0) {
+			return ResultUtil.error("审批模板组名重复!");
+		}
+
+		return spmkApprovalTemplateG.insertOrUpdate() ?
+				ResultUtil.data(spmkApprovalTemplateG) : ResultUtil.error();
+	}
+
+	/**
+	 * 删除-审批模板组
+	 */
+	@DeleteMapping(value = "/delete_approval_template_g/{id}")
+	@ApiOperation(value = "2.删除-审批模板组", httpMethod = "DELETE", notes = "删除-审批模板组")
+	@ApiOperationSupport(order = 2)
+	public Result<Object> deleteAtgById(@PathVariable int id){
+
+		if (spmkApprovalTemplateMapper.selectCount(new QueryWrapper<SpmkApprovalTemplate>().lambda().eq(SpmkApprovalTemplate::getApprovalTemplateGId, id)) > 0 )
+			return ResultUtil.error("审批模板组存在 模板,不可直接删除!");
+
+		return SpmkApprovalTemplateG.builder().id(id).build().deleteById() ?
+				ResultUtil.success() : ResultUtil.error("没有找到该对象");
+	}
+
+	/**
+	 * 查询列表-审批模板组
+	 */
+	@GetMapping(value = "/list_approval_template_g")
+	@ApiOperation(value = "3.查询列表-审批模板组", httpMethod = "GET", notes = "查询列表-审批模板组")
+	@ApiOperationSupport(order = 3)
+	public Result<Object> selectListAtg(){
+
+		return ResultUtil.data(spmkApprovalTemplateGMapper.selectListAtInAtg());
+	}
+
+	/**
+	 * 排序-审批模板组
+	 */
+	@PutMapping(value = "/update_approval_template_g")
+	@ApiOperation(value = "4.排序-审批模板组", httpMethod = "PUT", notes = "排序-审批模板组")
+	@ApiOperationSupport(order = 4)
+	public Result<Object> ranksAtg(@Validated(Ranks.class) @RequestBody ValidList<SpmkApprovalTemplateG> list){
+
+		if (list == null || (list != null && list.size() <= 0)) {
+			return ResultUtil.success();
+		}
+		return spmkApprovalTemplateGMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
+	}
+
+	//TODO 审批模板
+	/**
+	 * 新增或编辑-审批模板
+	 */
+	@PostMapping(value = "/save_approval_template")
+	@ApiOperation(value = "5.新增或编辑-审批模板", httpMethod = "POST", notes = "新增或编辑-审批模板")
+	@ApiOperationSupport(order = 5)
+	public Result<Object> saveAt(@Validated @RequestBody SpmkApprovalTemplateDto spmkApprovalTemplateDto){
+
+		Integer approvalTemplateGId = spmkApprovalTemplateDto.getApprovalTemplateGId();
+		if (ObjectUtil.isNull(approvalTemplateGId))
+			return ResultUtil.error("审批模板ID不为空");
+
+		SpmkApprovalTemplate at = SpmkApprovalTemplate.builder().build();
+
+		// 克隆 SpmkApprovalTemplateDto对象 到 SpmkApprovalTemplate对象,排除属性froms,router
+		BeanUtil.copyProperties(spmkApprovalTemplateDto, at , "froms","router");
+		// 序列化 后 写入 SpmkApprovalTemplate对象
+		at.setFroms(ObjectUtil.serialize((List<JSONObject>)spmkApprovalTemplateDto.getFroms()));
+		at.setRouter(ObjectUtil.serialize(spmkApprovalTemplateDto.getRouter()));
+
+		if (at.selectCount(new QueryWrapper<SpmkApprovalTemplate>().lambda()
+				.ne(at.getId() != null, SpmkApprovalTemplate::getId, at.getId())
+				.eq(SpmkApprovalTemplate::getName, at.getName())) > 0) {
+			return ResultUtil.error("审批模板名重复!");
+		}
+
+		if (!at.insertOrUpdate())
+			return ResultUtil.error("数据库操作失败");
+
+		// 清空前端不需要的字段再返回,节省流量
+		at.setFroms(null);
+		at.setRouter(null);
+		return  ResultUtil.data(at);
+
+	}
+
+	/**
+	 * 删除-审批模板
+	 */
+	@DeleteMapping(value = "/delete_approval_template/{id}")
+	@ApiOperation(value = "6.删除-审批模板", httpMethod = "DELETE", notes = "删除-审批模板")
+	@ApiOperationSupport(order = 6)
+	public Result<Object> deleteAtById(@PathVariable int id){
+
+		return SpmkApprovalTemplate.builder().id(id).build().deleteById() ? ResultUtil.success() : ResultUtil.error("没有找到该对象");
+
+	}
+
+	/**
+	 * id查询-审批模板
+	 */
+	@GetMapping(value = "/select_approval_template/{id}")
+	@ApiOperation(value = "7.id查询-审批模板", httpMethod = "GET", notes = "id查询-审批模板")
+	@ApiOperationSupport(order = 7)
+	public Result<Object> selectAtById(@PathVariable int id){
+		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()));
+		return ResultUtil.data(atd);
+
+	}
+
+	/**
+	 * 排序-审批模板
+	 */
+	@PutMapping(value = "/update_approval_template")
+	@ApiOperation(value = "8.排序-审批模板", httpMethod = "PUT", notes = "查询列表-审批模板组")
+	@ApiOperationSupport(order = 8)
+	public Result<Object> ranksAt(@Validated({Ranks.class})@RequestBody ValidList<SpmkApprovalTemplate> list){
+
+		if (list == null || (list != null && list.size() <= 0)) {
+			return ResultUtil.success();
+		}
+
+		return spmkApprovalTemplateMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
+
+	}
+
+
+
+	//TODO 审批组
+	/**
+	 * 新增或编辑-审批组
+	 */
+	@PostMapping(value = "/save_approval_g")
+	@ApiOperation(value = "9.新增或编辑-审批组", httpMethod = "POST", notes = "新增或编辑-审批组")
+	@ApiOperationSupport(order = 9)
+	public Result<Object> saveAg(@CurrentUser UserBean userBean, @Validated({Insert.class,Update.class}) @RequestBody SpmkApprovalG spmkApprovalG){
+
+		if (spmkApprovalG.selectCount(new QueryWrapper<SpmkApprovalG>().lambda()
+				.ne(spmkApprovalG.getId() != null, SpmkApprovalG::getId, spmkApprovalG.getId())
+				.eq(SpmkApprovalG::getName, spmkApprovalG.getName())
+				.eq(SpmkApprovalG::getOrgCode, userBean.getOrgCode())) > 0) {
+			return ResultUtil.error("审批组名重复!");
+		}
+
+		spmkApprovalG.setOrgCode(userBean.getOrgCode());
+		return spmkApprovalG.insertOrUpdate() ? ResultUtil.data(spmkApprovalG) : ResultUtil.error();
+
+	}
+
+	/**
+	 * 删除-审批组
+	 */
+	@DeleteMapping(value = "/delete_approval_g/{id}")
+	@ApiOperation(value = "10.删除-审批组", httpMethod = "DELETE", notes = "删除-审批组")
+	@ApiOperationSupport(order = 10)
+	public Result<Object> deleteAgById(@PathVariable int id){
+
+//		if (spmkCustomApprovalMapper.selectCount(new QueryWrapper<SpmkCustomApproval>().lambda().eq(SpmkCustomApproval::getApprovalGId, id)) > 0 )
+//			return ResultUtil.error("审批组存在 自定义审批,不可直接删除!");
+
+		SpmkCustomApproval.builder().build().delete(new QueryWrapper<SpmkCustomApproval>().lambda().eq(SpmkCustomApproval::getApprovalGId, id));
+		return SpmkApprovalG.builder().id(id).build().deleteById() ? ResultUtil.success() : ResultUtil.error("没有找到该对象");
+
+	}
+
+	/**
+	 * 查询列表-审批组-审批管理
+	 */
+	@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());
+		return ResultUtil.data(spmkApprovalGMapper.selectListAgInCaByAdmin(userBean.getOrgCode(), userBean.getEmpNum(), depts));
+
+	}
+
+	/**
+	 * 查询列表-审批组-个人审批
+	 */
+	@GetMapping(value = "/list_approval_g")
+	@ApiOperation(value = "11.查询列表-审批组-个人审批", httpMethod = "GET", notes = "查询列表-审批组-个人审批")
+	@ApiOperationSupport(order = 11)
+	public Result<Object> selectListAg(@CurrentUser UserBean userBean){
+
+		return ResultUtil.data(spmkService.selectListAg(userBean));
+	}
+
+	/**
+	 * 排序-审批组
+	 */
+	@PutMapping(value = "/update_approval_g")
+	@ApiOperation(value = "12.排序-审批组", httpMethod = "PUT", notes = "排序-审批组")
+	@ApiOperationSupport(order = 12)
+	public Result<Object> ranksAg(@Validated({Ranks.class}) @RequestBody ValidList<SpmkApprovalG> list){
+
+		if (list == null || list.size() <= 0) {
+			return ResultUtil.success();
+		}
+
+		return spmkApprovalGMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
+	}
+
+	//TODO 自定义审批
+
+	/**
+	 * 新增或编辑-自定义审批
+	 */
+	@PostMapping(value = "/save_custom_approval")
+	@ApiOperation(value = "13.新增或编辑-自定义审批", httpMethod = "POST", notes = "新增或编辑-自定义审批")
+	@ApiOperationSupport(order = 13)
+	@Transactional(rollbackFor = Exception.class)
+	public Result<Object> saveCa(@CurrentUser UserBean userBean,@Validated @RequestBody SpmkCustomApprovalDto spmkCustomApprovalDto) throws Exception{
+
+		SpmkCustomApproval ca = SpmkCustomApproval.builder().build();
+
+		BeanUtil.copyProperties(spmkCustomApprovalDto, ca , "froms","router","initiatorConfigs");
+
+		if (ca.selectCount(new QueryWrapper<SpmkCustomApproval>().lambda()
+				.ne(ca.getId() != null, SpmkCustomApproval::getId, ca.getId())
+				.eq(SpmkCustomApproval::getName, ca.getName())
+				.eq(SpmkCustomApproval::getOrgCode, userBean.getOrgCode())) > 0) {
+			return ResultUtil.error("自定义审批名重复!");
+		}
+		ca.setOrgCode(userBean.getOrgCode());
+		ca.setFroms(ObjectUtil.serialize(spmkCustomApprovalDto.getFroms()));
+		ca.setRouter(ObjectUtil.serialize(spmkCustomApprovalDto.getRouter()));
+		ca.setUpdateTime(new Date());
+
+		//1.新增 SpmkCustomApproval-自定义审批
+		if (!ca.insertOrUpdate())
+			return ResultUtil.error("新增自定义审批 失败!");
+
+
+		Integer id = ca.getId();
+		// 2.删除	历史的  SpmkInitiatorConfig-审批发起人配置,
+		SpmkInitiatorConfig.builder().build().delete(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
+		Console.log("自定义审批id: " + id);
+		List<SpmkInitiatorConfig> listIc = spmkCustomApprovalDto.getInitiatorConfigs();
+
+		if (listIc != null && listIc.size() > 0) {
+			for (int i = 0, n = listIc.size(); i < n; i++) {
+				listIc.get(i).setCustomApprovalId(id);
+			}
+			// 3.新增	最新的 SpmkInitiatorConfig-审批发起人配置,
+			if (!spmkInitiatorConfigMapper.insertList(listIc)) {
+				// 手动抛出异常,事务回滚
+				throw new Exception();
+			}
+
+		}
+
+		//
+		/**
+		 * 注意: 为保证该api的原子性 要加 事务处理 回滚(方法注解-@Transactional(rollbackFor = Exception.class))
+		 * 1.新增 SpmkCustomApproval-自定义审批
+		 * 2.删除	历史的  SpmkInitiatorConfig-审批发起人配置,
+		 * 3.新增	最新的 SpmkInitiatorConfig-审批发起人配置,
+		 */
+
+		// 清空前端不需要的字段再返回,节省流量
+		ca.setFroms(null);
+		ca.setRouter(null);
+		return ResultUtil.data(ca);
+
+	}
+
+	/**
+	 * 删除-自定义审批
+	 * @throws Exception
+	 */
+	@DeleteMapping(value = "/delete_custom_approval/{id}")
+	@ApiOperation(value = "14.删除-自定义审批", httpMethod = "DELETE", notes = "删除-自定义审批")
+	@Transactional(rollbackFor = Exception.class)
+	@ApiOperationSupport(order = 14)
+	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();
+		}
+
+		return  ResultUtil.success();
+	}
+
+	/**
+	 * id查询-自定义审批
+	 */
+	@GetMapping(value = "/select_custom_approval/{id}")
+	@ApiOperation(value = "15.id查询-自定义审批", httpMethod = "GET", notes = "id查询-自定义审批")
+	@ApiOperationSupport(order = 15)
+	public Result<Object> selectCaById(@PathVariable int id){
+		SpmkCustomApproval ca = SpmkCustomApproval.builder().id(id).build().selectById();
+		List<SpmkInitiatorConfig> listIc = SpmkInitiatorConfig.builder().build().selectList(new QueryWrapper<SpmkInitiatorConfig>().lambda().eq(SpmkInitiatorConfig::getCustomApprovalId, id));
+		SpmkCustomApprovalDto caD = SpmkCustomApprovalDto.builder()
+				.froms(ObjectUtil.deserialize(ca.getFroms()))
+				.router(ObjectUtil.deserialize(ca.getRouter()))
+				.build();
+		BeanUtil.copyProperties(ca, caD,"froms","router");
+		caD.setInitiatorConfigs(listIc);
+		return ResultUtil.data(caD);
+	}
+
+	/**
+	 * 排序-自定义审批
+	 */
+	@PutMapping(value = "/update_custom_approval")
+	@ApiOperation(value = "16.排序-自定义审批", httpMethod = "PUT", notes = "排序-自定义审批")
+	@ApiOperationSupport(order = 16)
+	public Result<Object> ranksCa(@Validated({Ranks.class}) @RequestBody ValidList<SpmkCustomApproval> list){
+
+		if (list == null || (list != null && list.size() <= 0)) {
+			return ResultUtil.success();
+		}
+
+		return spmkCustomApprovalMapper.updateListRandsById(list) ? ResultUtil.success() : ResultUtil.error();
+	}
+
+	@Autowired
+	YgglService ygglService;
+
+	/**
+	 * 排序-自定义审批
+	 */
+	@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;
+		Set<Integer> all = getId != null ? empNumupdept2(lanzi, bmgws, getId) : new HashSet<Integer>();
+		all.add(getId);
+		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;
+	}
+
+	// TODO 审批汇总(发起审批)
+	/**
+	 * 发起审批
+	 * @throws Exception
+	 */
+	@PostMapping(value = "/start_approval")
+	@ApiOperation(value = "17.发起审批", httpMethod = "POST", notes = "发起审批")
+	@ApiOperationSupport(order = 17)
+	@Transactional(rollbackFor = Exception.class)
+	@Log(title = "审批-发起审批", businessType = BusinessType.INSERT)
+	public Result<Object> saveA(@CurrentUser UserBean userBean,@Validated @RequestBody SpmkApproveSummaryDto spmkApproveSummaryDto) throws Exception{
+		YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>()
+				.lambda()
+				.select(YgglMainEmp::getHeadUrl,YgglMainEmp::getName)
+				.eq(YgglMainEmp::getEmpNum, userBean.getEmpNum())
+				.eq(YgglMainEmp::getOrgCode, userBean.getOrgCode())
+		);
+
+		if (ygglMainEmp == null)
+			return ResultUtil.error("发起人不存在!");
+
+//			List<SpmkApprovalG> saG = spmkService.selectListAg(userBean);
+
+		Router router = spmkApproveSummaryDto.getRouter();
+		List<Router> routers = router.getChildren();
+//			routers = RouterUtils.clearRouters(routers);
+		if(routers==null){
+			return ResultUtil.error("无法发起,请完善审批流程");
+		}
+		if (CollectionUtil.isNotEmpty(routers)) {
+//				boolean hasAudit=false;
+//				if(routers.size()>0){
+//					for (Relation relation:routers.get(0).getRelation()) {
+//						if(relation.getUsers().size()>0){
+//							hasAudit=true;
+//						}
+//					}
+//				}
+////				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("无法发起,请完善审批流程");
+////				}
+//				if(!hasAudit){
+//					return ResultUtil.error("请选择审批人!");
+//				}
+		}else {
+			return ResultUtil.error("无法发起,请完善审批流程");
+		}
+
+		List<Router> listRouter = new ArrayList<Router>();
+		listRouter.add(router);
+
+		JSONObject jSONObject = spmkApproveSummaryDto.getRequestData()
+				.set("orgCode", userBean.getOrgCode())
+				.set("initiator", ygglMainEmp.getName())
+				.set("headUrl", ygglMainEmp.getHeadUrl())
+				.set("id", userBean.getEmpNum());
+		RouterUtils.NextNode(listRouter, jSONObject, ISFIRST);
+		List<FlowChildren> listFlowChildren = new ArrayList<FlowChildren>();
+		RouterUtils.getIsFlowChildren(listRouter,listFlowChildren);
+
+		if(listFlowChildren.isEmpty()){
+			return ResultUtil.error("无法发起,请完善审批流程");
+		}
+		List<FlowChildren> listFlowChildren1 = (ArrayList<FlowChildren>) SerializationUtils.clone((Serializable) listFlowChildren);
+		List<String> uidlist = new ArrayList<>();
+		int i=0;
+		int fsize = listFlowChildren.size();
+		int f=0;//listFlowChildren删除次数
+		for (FlowChildren flowChildrenItem: listFlowChildren) {
+			if ("audit".equals(flowChildrenItem.getClassName())) {
+				boolean hasAudit = false;
+
+				for (Relation relation : flowChildrenItem.getRelation()) {
+					if (relation.getUsers().size() > 0) {
+						hasAudit = true;
+						//审批人去重
+						if (relation.getUsers().size() > 1){
+							int j=0;
+							int usize=relation.getUsers().size();//
+							int r=0;//user list删除次数
+							for (User user:relation.getUsers()
+							) {
+								if (!uidlist.contains(user.getId())) {
+									uidlist.add(user.getId());
+								}else {
+									listFlowChildren1.get(i).getRelation().get(0).getUsers().remove(j-r);
+									r++;
+								}
+								j++;
+							}
+							if (usize==r){
+								listFlowChildren1.remove(i-f);
+								f++;
+							}
+						}else {
+							if (!uidlist.contains(relation.getUsers().get(0).getId())) {
+								uidlist.add(relation.getUsers().get(0).getId());
+							}else {
+								listFlowChildren1.remove(i-f);
+								f++;
+							}
+						}
+					}
+				}
+				if (!hasAudit) {
+					return ResultUtil.error("审批流程设置审批人为空无法发起!");
+				}
+			}
+			i++;
+		}
+		listFlowChildren = (ArrayList<FlowChildren>) SerializationUtils.clone((Serializable) listFlowChildren1);
+
+		/*for (FlowChildren flowChildrenItem: listFlowChildren) {
+			if("audit".equals(flowChildrenItem.getClassName())){
+				boolean hasAudit=false;
+				for (Relation relation:flowChildrenItem.getRelation()) {
+					if(relation.getUsers().size()>0){
+						hasAudit=true;
+					}
+				}
+				if(!hasAudit){
+					return ResultUtil.error("审批流程设置审批人为空无法发起!");
+				}
+			}
+		}*/
+
+		Logoutput("listFlowChildren");
+
+		// 当前审批人
+		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())
+				.assoType(spmkApproveSummaryDto.getAssoType())
+				.sts(ApproveSummarySts.IN.ordinal())
+				.currentApprover(currentApprover).build();
+
+		if (!as.insert()) {
+			throw new CustomException("审批汇总-新增异常");
+		}
+
+		// 插入记录- 审批执行记录 - 执行人记录
+		RouterUtils.insertogExecuteRecord(listFlowChildren, as.getId());
+
+		// 封装 审批详情
+		SpmkApproveDetailSummary adm = SpmkApproveDetailSummary.builder().build();
+		adm.setApproveSummaryId(as.getId());
+		adm.setName(spmkApproveSummaryDto.getTitle());
+		adm.setRequestData(spmkApproveSummaryDto.getRequestData().toString());
+		adm.setFroms(spmkApproveSummaryDto.getFroms().toString());
+		adm.setRouter(listRouter.get(0).toJSONString());
+		adm.setFlowChildren(JSONArray.fromObject(listFlowChildren).toString());
+		try {
+			spmkApproveDetailSummaryMapper.insert(adm);
+		}catch (Exception e){
+			throw new CustomException("审批详情-新增异常");
+		}
+
+		return ResultUtil.success();
+	}
+
+	//TODO 审批汇总
+	/**
+	 * 审批汇总
+	 * @param summaryQueryDto
+	 * @return
+	 * @throws
+	 */
+	@PostMapping(value = "/select_approve_summary")
+	@ApiOperation(value = "18.审批汇总", httpMethod = "POST", notes = "审批汇总")
+	@ApiOperationSupport(order = 18)
+	@Log(title = "审批-审批汇总", businessType = BusinessType.OTHER)
+	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());
+
+		Integer deptId = summaryQueryDto.getDeptId();
+		List<YgglMainEmp> listYgglMainEmp = zzglBmgwMService.selectOtherlistent(userBean.getOrgCode(), deptId);
+
+		if (deptId != null && (listYgglMainEmp == null || listYgglMainEmp.size() == 0)) {
+			return ResultUtil.data(new ArrayList<SpmkApproveSummary>());
+		}
+
+		List<Integer> empNums = new ArrayList<Integer>();
+		for (YgglMainEmp ygglMainEmp : listYgglMainEmp) {
+			empNums.add(ygglMainEmp.getEmpNum());
+		}
+		summaryQueryDto.setEmpNums(empNums);
+
+		// 缺-部门id 搜索
+		IPage<SpmkApproveSummary> pageAs = spmkApproveSummaryMapper.selectPageByQuery(page, summaryQueryDto);
+
+		List<SpmkApproveSummary> listAs = pageAs.getRecords();
+
+		return ResultUtil.data(pageAs, listAs);
+	}
+
+	//TODO 审批详情
+	/**
+	 * 审批详情
+	 */
+	@GetMapping(value = "/select_approve_detail/{id}")
+	@ApiOperation(value = "19.审批详情", httpMethod = "GET", notes = "审批详情")
+	@ApiOperationSupport(order = 19)
+	@Log(title = "审批-审批详情", businessType = BusinessType.OTHER)
+	public Result<Object> selectAd(@PathVariable(required = true) Integer id) {
+
+		SpmkApproveDetailDto adD = spmkService.selectApproveDetailByAsId(id);
+		System.out.println(ResultUtil.data(adD));
+		return ResultUtil.data(adD);
+
+	}
+
+	//TODO 审批人审批
+	/**
+	 * 审批人审批
+	 */
+	@PostMapping(value = "/approving")
+	@ApiOperation(value = "20.审批人审批", httpMethod = "POST", notes = "审批人审批")
+	@Transactional(rollbackFor = Exception.class)
+	@ApiOperationSupport(order = 20)
+	@Log(title = "审批-审批流程", businessType = BusinessType.UPDATE)
+//	@BindingResultCtrol(title = "审批人审批")
+	public Result<Object> approving(@CurrentUser UserBean userBean,@Validated @RequestBody ApprovingDto approvingDto) throws Exception {
+		Integer asId = approvingDto.getAsId();
+		//查询redis中当前有没有在被审批执行中,0是没有在执行,1是在执行
+		Integer approStatus=Integer.parseInt(redisUtil.get(asId.toString())==null?"0":redisUtil.get(asId.toString()).toString());
+		if(approStatus==1){
+			return ResultUtil.error("该审批已在审批中!");
+		}else{
+			redisUtil.set(asId.toString(),1,5000);
+		}
+		SpmkApproveDetailSummary ad = SpmkApproveDetailSummary.builder().build().selectOne(new QueryWrapper<SpmkApproveDetailSummary>()
+				.lambda()
+				.select(SpmkApproveDetailSummary::getId,
+						SpmkApproveDetailSummary::getRequestData,
+						SpmkApproveDetailSummary::getFlowChildren)
+				.eq(SpmkApproveDetailSummary::getApproveSummaryId, asId));
+
+		// 查询 SpmkApproveSummary 状态,
+		SpmkApproveSummary aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda()
+				.select(SpmkApproveSummary::getSts)
+				.eq(SpmkApproveSummary::getId, asId));
+
+		if (aSummary.getSts() > ApproveSummarySts.IN.ordinal()) {
+			redisUtil.set(asId.toString(),0,500);
+			return ResultUtil.error("该审批已结束!");
+		}
+
+		// 查询该 审批的状态 是否为 1 审批中
+		Integer count = SpmkExecutor.builder().build().selectCount(new QueryWrapper<SpmkExecutor>().lambda()
+				.eq(SpmkExecutor::getId, approvingDto.getExecutorId())
+				.eq(SpmkExecutor::getSts, ExecutorSts.IN_EXECUTION.ordinal()));
+
+		if (count == 0) {
+			redisUtil.set(asId.toString(),0,500);
+			return ResultUtil.error("您已审批过!");
+		}
+
+		if ( spmkExecutorMapper.selectCount(new QueryWrapper<SpmkExecutor>().lambda()
+				.eq(SpmkExecutor::getId, approvingDto.getExecutorId())
+				.eq(SpmkExecutor::getEmpNum, userBean.getEmpNum())
+				.eq(SpmkExecutor::getSts, ExecutorSts.IN_EXECUTION.ordinal())) == 0) {
+
+			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) {
+				redisUtil.set(asId.toString(),0,500);
+				return ResultUtil.error("非当前审批人 或 管理员,无法操作!");
+			}
+
+		}
+
+		if (aSummary.getSts() == 0) {
+			List<FlowChildren> listFlowChildren = jsonObject.parseArray(ad.getFlowChildren(),FlowChildren.class);
+			// 审批逻辑
+			RouterUtils.approving(
+					listFlowChildren,
+					asId,
+					approvingDto.getExecuteRecordId(),
+					approvingDto.getExecutorId(),
+					approvingDto.getOpinion(),
+					approvingDto.getSts(),
+					approvingDto.getUser()
+			);
+
+			// 更新 flowChildren
+			SpmkApproveDetailSummary.builder().id(ad.getId()).flowChildren(JSONArray.fromObject(listFlowChildren).toString()).build().updateById();
+			FlowChildren fc = CollUtil.getLast(listFlowChildren);
+			if (fc.getExecute() == "2") {
+				// 查询 SpmkApproveSummary 状态
+				aSummary = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>().lambda()
+						.select(SpmkApproveSummary::getSts,SpmkApproveSummary::getAssoType)
+						.eq(SpmkApproveSummary::getId, asId));
+
+				if (aSummary.getSts() != ApproveSummarySts.REFUSE.ordinal()) {
+					SpmkApproveSummary.builder().id(asId).currentApprover(CommonEnum.NULL_STR.getDesc()).endTime(new Date()).sts(ApproveSummarySts.FINISH.ordinal()).build().updateById();
+
+					JSONObject jSONObject = jsonObject.parseObject(ad.getRequestData(),JSONObject.class);
+					jSONObject.set("approveId", FromData.builder().value(String.valueOf(asId)).build());
+					jSONObject.set("orgCode", userBean.getOrgCode());
+
+					//审批完成后 业务
+					SpmkAssoBusiness sab = spmkAssoBusinessFactory.createSpmkService(ApproveEnum.getEnums(aSummary.getAssoType()));
+					if (sab != null)
+						Logoutput("1----------"+ sab);
+					Logoutput("2----------"+ jSONObject);
+					sab.handleApprove(jSONObject);
+				}
+			}
+
+		}else {
+			redisUtil.set(asId.toString(),0,500);
+			return ResultUtil.error("该审批已结束!");
+		}
+		redisUtil.set(asId.toString(),0,500);
+		return ResultUtil.success();
+	}
+
+	@Autowired
+	private PunchRecordMapper punchrecordmapper;
+	//TODO 我发起的/我审批的/抄送我的
+	/**
+	 * 查询列表-我发起的/我审批的/抄送我的-分页
+	 */
+	@PostMapping(value = "/select_my_approve")
+	@ApiOperation(value = "21.查询列表-我发起的/我审批的/抄送我的-分页", httpMethod = "POST", notes = "查询列表-我审批的-关键字、审批状态、发起时间-分页")
+	@ApiOperationSupport(order = 21)
+	@Log(title = "审批-我发起的/我审批的/抄送我的", businessType = BusinessType.OTHER)
+	public Result<Object> selectMyAs(@CurrentUser UserBean userBean, @Validated @RequestBody MySummaryQueryDto mySummaryQueryDto) throws MethodArgumentNotValidException{
+		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());
+		if(mySummaryQueryDto.getSts() == null) {
+			mySummaryQueryDto.setSts(0);
+		}
+		//我发起的
+		if(mySummaryQueryDto.getType() ==  0) {
+//				mySummaryQueryDto.setSts(null);
+		}
+		// 缺-部门id 搜索
+		IPage<SpmkApproveSummary> pageAs = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(page, mySummaryQueryDto);
+
+		List<SpmkApproveSummary> listAs = pageAs.getRecords();
+
+		for(SpmkApproveSummary sp : listAs) {
+
+			String requerstr = "";
+			try {
+				SpmkApproveDetailSummary ad = spmkApproveDetailSummaryMapper.selectOne(new QueryWrapper<SpmkApproveDetailSummary>().lambda().eq(SpmkApproveDetailSummary::getApproveSummaryId, sp.getId()));
+
+				JSONObject as =jsonObject.parseObject(ad.getRequestData().toString(),JSONObject.class);
+//					Logoutput(as);
+//					Logoutput(sp.getId()+"==========================================="+sp.getAssoType());
+				requerstr = "";
+				//assoType : 1转正 2离职 3调薪 4调岗 5加班 6请假 7出差 8外出 9补卡
+				switch (sp.getAssoType()) {
+					case 1:requerstr = "转正时间:"+as.getJSONObject("__newConfirmationTime").getStr("value");break;
+					case 2:requerstr = "离职时间:"+as.getJSONObject("__terminationDate").getStr("value");break;
+					case 3:
+						String namepos = "";
+						PunchRecord pu = punchrecordmapper.organizationalStructure(Integer.valueOf(as.getJSONObject("__TransferInDepartment").getStr("value")));
+						if(pu != null) {
+							namepos = pu.getPost();
+						}
+						requerstr = "调入岗位:"+namepos;
+						break;
+					case 5:requerstr = "加班时长:"+as.getJSONObject("__timeLong").getStr("value")+"(小时)";break;
+					case 6:
+						String name = "";
+						KqglAssoLeaveRules rul = KqglAssoLeaveRules.builder().build().selectById(as.getJSONObject("__LeaveType").getStr("value"));
+						if(rul != null) {
+							name = rul.getName();
+						}
+						requerstr = "请假类型:"+name;
+						break;
+					case 7:requerstr = "出差时长:"+as.getJSONObject("__longTime").getStr("value")+"(小时)";break;
+					case 8:requerstr = "外出时长:"+as.getJSONObject("__longTime").getStr("value")+"(小时)";break;
+					case 9:requerstr = "补卡时间:"+as.getJSONObject("__PatchCardTime").getStr("value");break;
+					default:
+						break;
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+//				Logoutput(requerstr);
+			sp.setDigest(requerstr);
+		}
+
+		return ResultUtil.data(pageAs, listAs);
+	}
+
+	//TODO 撤销审批
+	/**
+	 * 撤销审批
+	 */
+	@PutMapping(value = "/revoke_approval/{id}")
+	@ApiOperation(value = "22.撤销审批", httpMethod = "PUT", notes = "撤销审批")
+	@Transactional(rollbackFor = Exception.class)
+	@ApiOperationSupport(order = 22)
+	@Log(title = "审批-撤销审批", businessType = BusinessType.UPDATE)
+	public Result<Object> revokeApproval(@PathVariable Integer id) throws Exception {
+
+		SpmkApproveSummary as = spmkApproveSummaryMapper.selectOne(new QueryWrapper<SpmkApproveSummary>()
+				.lambda()
+				.select(SpmkApproveSummary::getSts)
+				.eq(SpmkApproveSummary::getId, id));
+
+		return as != null && as.getSts() != ApproveSummarySts.FINISH.ordinal() ? (SpmkApproveSummary.builder().id(id).endTime(new Date()).sts(ApproveSummarySts.UNDONE.ordinal()).build().updateById() ?
+				ResultUtil.success() : ResultUtil.error("撤销异常")) : ResultUtil.error("审批已结束,无法撤销!");
+	}
+
+	/**
+	 * 删除-审批(发起的审批)-根据审批汇总id
+	 */
+	@DeleteMapping(value = "/delete_approval/{id}")
+	@ApiOperation(value = "23.删除-审批(发起的审批)-根据审批汇总id", httpMethod = "DELETE", notes = "删除-审批(发起的审批)-根据审批汇总id")
+	@ApiOperationSupport(order = 23)
+	@Log(title = "审批-删除审批", businessType = BusinessType.DELETE)
+	public Result<Object> deleteApprovalData(@PathVariable Integer id){
+		List<SpmkApproveExecuteRecord> listAer = spmkApproveExecuteRecordMapper.selectList(new QueryWrapper<SpmkApproveExecuteRecord>()
+				.lambda()
+				.select(SpmkApproveExecuteRecord::getId)
+				.eq(SpmkApproveExecuteRecord::getApproveSummaryId, id));
+		if (listAer != null && listAer.size() > 0) {
+			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));
+		//新审核表删除
+		spmkApproveDetailSummaryMapper.delete(new QueryWrapper<SpmkApproveDetailSummary>().lambda().eq(SpmkApproveDetailSummary::getApproveSummaryId,id));
+
+		spmkApproveSummaryMapper.delete(new QueryWrapper<SpmkApproveSummary>().lambda().eq(SpmkApproveSummary::getId, id));
+
+		return ResultUtil.success();
+	}
+
+	/**
+	 * 删除-审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据
+	 */
+	@DeleteMapping(value = "/delete_approval_data")
+	@ApiOperation(value = "90.(开发使用)删除-审批数据", httpMethod = "DELETE", notes = "审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据")
+	@ApiOperationSupport(order = 90)
+	public Result<Object> deleteApprovalData(@CurrentUser UserBean userBean){
+		spmkApprovalGMapper.delete(null);
+		spmkCustomApprovalMapper.delete(null);
+		spmkApproveSummaryMapper.delete(null);
+		spmkApproveDetailSummaryMapper.delete(null);
+		spmkApproveExecuteRecordMapper.delete(null);
+		spmkExecutorMapper.delete(null);
+		Logoutput("删除-审批组、自定义审批、审批汇总、审批详情、审批执行记录、审批执行人记录 所有数据 完成!");
+		return ResultUtil.success();
+	}
+
+	//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,"获取图标列表成功");
+	}
+
+	//TODO 测试-生成 审批组 和 自定义审批
+	@GetMapping(value = "/test")
+	@ApiOperation(value = "98.测试-生成 审批组 和 自定义审批", httpMethod = "GET", notes = "测试-生成 审批组 和 自定义审批")
+	@ApiOperationSupport(order = 98)
+	public Result<List<SpmkIcon>> createCustomApproval(@RequestParam Integer orgCode){
+
+		spmkService.createCustomApproval(orgCode);
+
+		List<SpmkIcon> spmkIcons = SpmkIcon.builder().build().selectAll();
+
+		return ResultUtil.data(spmkIcons,"生成 审批组 和 自定义审批成功");
+	}
+
+	@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);
+	}
+
+	@PostMapping(value = "/approved_quantity")
+	@ApiOperation(value = "APP-我发起的/我审批的/抄送我的-数量", httpMethod = "POST", notes = "")
+	public Result<Object> ApprovedQuantity(@CurrentUser UserBean userBean, @Validated @RequestBody MySummaryQueryDto mysummaryquerydto){
+
+			ApprovedQuantityDto qna = ApprovedQuantityDto.builder().build();
+
+			mysummaryquerydto.setEndTime(null);
+			mysummaryquerydto.setStartTime(null);
+
+			mysummaryquerydto.setOrgCode(userBean.getOrgCode());
+			mysummaryquerydto.setEmpNum(userBean.getEmpNum());
+			mysummaryquerydto.setSts(5);//状态 0审批中 1审批撤销 2审批通过/审批完成 3审批拒绝 4:(2/3)	5:全部
+
+			int istartedit=0,ccme=0,iapprovedit=0;
+			mysummaryquerydto.setType(0);//我发起的
+			List<SpmkApproveSummary> istartedit_ = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(mysummaryquerydto);
+			if(istartedit_.size() > 0) {
+				istartedit = istartedit_.size();
+			}
+
+			mysummaryquerydto.setType(1);//抄送我的
+			List<SpmkApproveSummary> ccme_ = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(mysummaryquerydto);
+			if(ccme_.size() > 0) {
+				ccme = ccme_.size();
+			}
+
+			mysummaryquerydto.setType(2);//我审批的
+			List<SpmkApproveSummary> iapprovedit_ = spmkApproveSummaryMapper.selectPageByQueryForEmpNum(mysummaryquerydto);
+			if(iapprovedit_.size() > 0) {
+				iapprovedit = iapprovedit_.size();
+			}
+
+			qna.setIstartedit(istartedit);
+			qna.setCcme(ccme);
+			qna.setIapprovedit(iapprovedit);
+
+
+			return ResultUtil.data(qna);
+	}
+
+	@Value("${config-8timer.environmental-science}")
+	public String environmental_science;
+
+	public void Logoutput(String science) {
+
+		if(!("pro").equals(environmental_science)) {
+
+			System.out.println(science);
+		}else {
+			System.out.println("");
+		}
+
+	}
+
+	/**
+	 * 审核详情数据转换
+	 */
+	@PostMapping(value = "/approved_addDetail")
+	@ApiOperation(value = "A审核详情数据转换", httpMethod = "POST", notes = "")
+	public String addApproveDetail(){
+		return spmkService.addApproveDetail();
+	}
+}