Mybatis-Plus多表联合查询随手记2(大佬的多表查询例子)

QaProcessInstanceVO

package org.jeecg.modules.quality.vo;

import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;

@Data
public class QaProcessInstanceVO implements Serializable {

    /**
     * 主键
     */
    @TableId(type = IdType.ID_WORKER_STR)
    @ApiModelProperty(value = "主键")
    private java.lang.String id;

    /**
     * 更新人
     */
    @ApiModelProperty(value = "更新人")
    @TableField("update_by")
    private java.lang.String updateBy;
    /**
     * 更新日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "更新日期")
    @TableField("update_time")
    private java.util.Date updateTime;
    /**
     * 所属部门
     */
    @ApiModelProperty(value = "所属部门")
    @TableField("sys_org_code")
    private java.lang.String sysOrgCode;
    /**
     * 流程ID
     */
    @ApiModelProperty(value = "流程ID")
    @TableField("process_id")
    private java.lang.String processId;
    /**
     * 流程状态
     */
    @ApiModelProperty(value = "流程状态")
    @TableField("process_status")
    @Dict(dicCode = "process_instance_status")
    @Excel(name = "流程状态", dicCode = "process_instance_status", width = 15)
    private java.lang.Integer processStatus;
    /**
     * 当前处理环节ID
     */
    @TableField("cur_node_id")
    @ApiModelProperty(value = "当前处理环节ID")
    private java.lang.String curNodeId;
    /**
     * 下一处理环节ID
     */
    @TableField("next_node_id")
    @ApiModelProperty(value = "下一处理环节ID")
    private java.lang.String nextNodeId;
    /**
     * 处理标识
     */
    @TableField("handle_flag")
    @ApiModelProperty(value = "处理标识")
    private Integer handleFlag;

    /**
     * 流程编号值
     */
    @ApiModelProperty(value = "流程编号值")
    @Excel(name = "流程编号", width = 15)
    private String processNoCode;

    /**
     * 流程名称
     */
    @ApiModelProperty(value = "流程名称")
    @TableField("process_name")
    @Excel(name = "流程名称", width = 15)
    private java.lang.String processName;
    /**
     * 流程编码
     */
    @ApiModelProperty(value = "流程编码")
    @TableField("process_code")
    private java.lang.String processCode;
    /**
     * 流程类型
     */
    @ApiModelProperty(value = "流程类型")
    @TableField("process_type")
    @Dict(dicCode = "bpm_process_type")
    private java.lang.String processType;

    /**
     * 当前处理环节名称
     */
    @TableField("cur_node_name")
    @ApiModelProperty(value = "当前处理环节名称")
    private java.lang.String curNodeName;
    /**
     * 当前处理环节人ID
     */
    @TableField("handle_user_id")
    @ApiModelProperty(value = "当前处理环节人ID")
    private java.lang.String handleUserId;
    /**
     * 当前处理环节人类型
     */
    @TableField("handle_user_type")
    @ApiModelProperty(value = "当前处理环节人类型")
    private java.lang.String handleUserType;
    /**
     * 下一处理环节名称
     */
    @TableField("next_node_name")
    @ApiModelProperty(value = "下一处理环节名称")
    private java.lang.String nextNodeName;

    /**
     * 流程编号
     */
    @ApiModelProperty(value = "流程编号")
    private Integer processNo;

    @TableField(exist = false)
    private String processStatusName;

    @TableField(exist = false)
    private String processTypeName;

    /**
     * CPK数据ID
     */
    @ApiModelProperty(value = "CPK数据ID")
    @TableField(exist = false)
    private java.lang.String cpkDataId;

    /**
     * 检验项名称
     */
    @ApiModelProperty(value = "检验项名称")
    @TableField("cpk_name")
    @Excel(name = "检验项名称", width = 15)
    private java.lang.String cpkName;

    /**
     * 工位线组
     */
    @ApiModelProperty(value = "工位线组")
    @TableField("group_line")
    @Excel(name = "线组", width = 15)
    private java.lang.String groupLine;

    /**
     * 创建人
     */
    @ApiModelProperty(value = "创建人")
    @TableField("create_by")
    @Excel(name = "流程发起人", width = 15)
    private java.lang.String createBy;
    /**
     * 创建日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建日期")
    @TableField("create_time")
    @Excel(name = "发起时间", exportFormat="yyyy-MM-dd HH:mm:ss", width = 25)
    private java.util.Date createTime;

    /**
     * 处理人员
     */
    @ApiModelProperty(value = "处理人员")
    @TableField("realname")
    private java.lang.String realName;
    /**
     * 原因
     */
    @ApiModelProperty(value = "原因")
    @TableField("reason")
    @Excel(name = "原因", width = 25)
    private java.lang.String reason;
    /**
     * 工位
     */
    @ApiModelProperty(value = "工位")
    @TableField("wu_code")
    @Excel(name = "工位", width = 25)
    private java.lang.String wuCode;
}

QaProcessInstanceController 类

package org.jeecg.modules.quality.controller;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.quality.entity.QaProcessInstance;
import org.jeecg.modules.quality.entity.QaProcessNodeItemInstance;
import org.jeecg.modules.quality.service.IQaProcessInstanceService;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;

import org.jeecg.modules.quality.vo.QaProcessInstanceVO;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;

 /**
 * @Description: 流程实例表
 * @Author: jeecg-boot
 * @Date:   2021-05-17
 * @Version: V1.0
 */
@Api(tags="流程实例表")
@RestController
@RequestMapping("/quality/qaProcessInstance")
@Slf4j
public class QaProcessInstanceController extends JeecgController<QaProcessInstance, IQaProcessInstanceService> {
	@Autowired
	private IQaProcessInstanceService qaProcessInstanceService;
	
	/**
	 * 分页列表查询
	 *
	 * @param qaProcessInstanceVO
	 * @param pageNo
	 * @param pageSize
	 * @param req
	 * @return
	 */
	@AutoLog(value = "流程实例表-分页列表查询")
	@ApiOperation(value="流程实例表-分页列表查询", notes="流程实例表-分页列表查询")
	@GetMapping(value = "/list")
//	public Result<?> queryPageList(QaProcessInstance qaProcessInstance,
//								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
//								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
//								   HttpServletRequest req) {
//		QueryWrapper<QaProcessInstance> queryWrapper = QueryGenerator.initQueryWrapper(qaProcessInstance, req.getParameterMap());
//		Page<QaProcessInstance> page = new Page<QaProcessInstance>(pageNo, pageSize);
//		IPage<QaProcessInstance> pageList = qaProcessInstanceService.page(page, queryWrapper);
//		return Result.ok(pageList);
//	}
	 public Result<?> queryPageList(QaProcessInstanceVO qaProcessInstanceVO,
									@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
									@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
									HttpServletRequest req) {
		 QueryWrapper<QaProcessInstanceVO> queryWrapper = QueryGenerator.initQueryWrapper(qaProcessInstanceVO, req.getParameterMap());
		 Page<QaProcessInstanceVO> page = new Page<QaProcessInstanceVO>(pageNo, pageSize);
		 IPage<QaProcessInstanceVO> pageList = qaProcessInstanceService.getQaProcessInstanceVOList(page, queryWrapper);
		 return Result.ok(pageList);
	 }

	 /**
	  *   发布
	  *
	  * @param jsonObject
	  * @return
	  */
	 @AutoLog(value = "流程实例表-发布")
	 @ApiOperation(value="流程实例表-发布", notes="流程实例表-发布")
	 @PostMapping(value = "/publish")
	 public Result<?> publish(@RequestBody JSONObject jsonObject) {
//	 	String testStr = "{\n" +
//				"  \"processName\": \"CPK超规处理流程\",\n" +
//				"  \"processCode\": \"cpk\",\n" +
//				"  \"itemList\": [\n" +
//				"    {\n" +
//				"      \"processItemCode\": \"check_code\",\n" +
//				"      \"processItemInstanceValue\":\"1433317331186712577\"\n" +
//				"    },\n" +
//				"    {\n" +
//				"      \"processItemCode\": \"cpk\",\n" +
//				"      \"processItemInstanceValue\": \"3.4\"\n" +
//				"    },\n" +
//				"    {\n" +
//				"      \"processItemCode\": \"group_line\",\n" +
//				"      \"processItemInstanceValue\": \"JX1\"\n" +
//				"    },\n" +
//				"    {\n" +
//				"      \"processItemCode\": \"wu_code\",\n" +
//				"      \"processItemInstanceValue\": \"OP10\"\n" +
//				"    },\n" +
//				"    {\n" +
//				"      \"processItemCode\": \"cpk_reason\",\n" +
//				"      \"processItemInstanceValue\": \"超过要求\"\n" +
//				"    },\n" +
//				"    {\n" +
//				"      \"processItemCode\": \"cpk_id\",\n" +
//				"      \"processItemInstanceValue\": \"1426461543638360065\"\n" +
//				"    }\n" +
//				"  ]\n" +
//				"}";
//	 	JSONObject testJSON = JSONObject.parseObject(testStr);
//	 	qaProcessInstanceService.publishCpkProcess(testJSON);

		qaProcessInstanceService.publishProcess(jsonObject);
		return Result.ok("提交成功!");
	 }

	/**
	 *   添加
	 *
	 * @param qaProcessInstance
	 * @return
	 */
	@AutoLog(value = "流程实例表-添加")
	@ApiOperation(value="流程实例表-添加", notes="流程实例表-添加")
	@PostMapping(value = "/add")
	public Result<?> add(@RequestBody QaProcessInstance qaProcessInstance) {
		qaProcessInstanceService.save(qaProcessInstance);
		return Result.ok("添加成功!");
	}
	
	/**
	 *  编辑
	 *
	 * @param qaProcessInstance
	 * @return
	 */
	@AutoLog(value = "流程实例表-编辑")
	@ApiOperation(value="流程实例表-编辑", notes="流程实例表-编辑")
	@PutMapping(value = "/edit")
	public Result<?> edit(@RequestBody QaProcessInstance qaProcessInstance) {
		qaProcessInstanceService.updateById(qaProcessInstance);
		return Result.ok("编辑成功!");
	}
	
	/**
	 *   通过id删除
	 *
	 * @param id
	 * @return
	 */
	@AutoLog(value = "流程实例表-通过id删除")
	@ApiOperation(value="流程实例表-通过id删除", notes="流程实例表-通过id删除")
	@DeleteMapping(value = "/delete")
	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
		qaProcessInstanceService.deleteProcessInstance(id);
		return Result.ok("删除成功!");
	}
	
	/**
	 *  批量删除
	 *
	 * @param ids
	 * @return
	 */
	@AutoLog(value = "流程实例表-批量删除")
	@ApiOperation(value="流程实例表-批量删除", notes="流程实例表-批量删除")
	@DeleteMapping(value = "/deleteBatch")
	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
		this.qaProcessInstanceService.removeByIds(Arrays.asList(ids.split(",")));
		return Result.ok("批量删除成功!");
	}
	
	/**
	 * 通过id查询
	 *
	 * @param id
	 * @return
	 */
	@AutoLog(value = "流程实例表-通过id查询")
	@ApiOperation(value="流程实例表-通过id查询", notes="流程实例表-通过id查询")
	@GetMapping(value = "/queryById")
	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
		QaProcessInstance qaProcessInstance = qaProcessInstanceService.getById(id);
		if(qaProcessInstance==null) {
			return Result.error("未找到对应数据");
		}
		return Result.ok(qaProcessInstance);
	}

	 @Value("${jeecg.path.upload}")
	 private String upLoadImgPath;

    /**
    * 导出excel
    *
    * @param request
    * @param qaProcessInstanceVO
    */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, QaProcessInstanceVO qaProcessInstanceVO) {

		String title = "异常流程处理数据";
		// Step.1 组装查询条件
		QueryWrapper<QaProcessInstanceVO> queryWrapper = QueryGenerator.initQueryWrapper(qaProcessInstanceVO, request.getParameterMap());
		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();

		// Step.2 获取导出数据
		List<QaProcessInstanceVO> pageList = qaProcessInstanceService.findList(queryWrapper);
		List<QaProcessInstanceVO> exportList = null;

		// 过滤选中数据
		String selections = request.getParameter("selections");
		if (oConvertUtils.isNotEmpty(selections)) {
			List<String> selectionList = Arrays.asList(selections.split(","));
			exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
		} else {
			exportList = pageList;
		}

		// Step.3 AutoPoi 导出Excel
		ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
		mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下
		mv.addObject(NormalExcelConstants.CLASS, QaProcessInstanceVO.class);
		ExportParams  exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
		exportParams.setImageBasePath(upLoadImgPath);
		mv.addObject(NormalExcelConstants.PARAMS,exportParams);
		mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
		return mv;
    }

    /**
      * 通过excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, QaProcessInstance.class);
    }

	 /**
	  *   工装异常发布
	  *
	  * @param jsonObject
	  * @return
	  */
	 @AutoLog(value = "流程实例表-发布")
	 @ApiOperation(value="流程实例表-发布", notes="流程实例表-发布")
	 @PostMapping(value = "/publishSys")
	 public Result<?> publishSysExpProcess(@RequestBody JSONObject jsonObject) {
		 qaProcessInstanceService.publishSysExpProcess(jsonObject);
		 return Result.ok("提交成功!");
	 }

}

IQaProcessInstanceService 类

package org.jeecg.modules.quality.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.quality.entity.QaProcessInstance;
import org.jeecg.modules.quality.vo.QaProcessCpkDataVO;
import org.jeecg.modules.quality.vo.QaProcessExpDataVO;
import org.jeecg.modules.quality.vo.QaProcessInstanceVO;

import java.util.List;
import java.util.Map;

/**
 * @Description: 流程实例表
 * @Author: jeecg-boot
 * @Date: 2021-05-17
 * @Version: V1.0
 */
public interface IQaProcessInstanceService extends IService<QaProcessInstance> {
    int publishProcess(JSONObject jsonObject);

    IPage<QaProcessInstanceVO> getQaProcessInstanceVOList(Page<QaProcessInstanceVO> page, QueryWrapper<QaProcessInstanceVO> queryWrapper);

    List<QaProcessInstanceVO> findList(QueryWrapper<QaProcessInstanceVO> queryWrapper);

    int deleteProcessInstance(String processInstanceId);

    /**
     * 用户发起流程数据统计
     *
     * @return
     */
    List<Map<String, Object>> handlingSituationDataCreateList();

    /**
     * 用户处理完成流程数据统计
     *
     * @return
     */
    List<Map<String, Object>> handlingSituationDataHandleOverList();

    /**
     * 用户待处理流程数据统计
     *
     * @return
     */
    List<Map<String, Object>> handlingSituationDataHandlingList();

    /**
     * 流程占比数据统计
     *
     * @return
     */
    List<Map<String, Object>> processPercentageDataList();

    /**
     * 各类异常占比数据统计
     *
     * @return
     */
    List<Map<String, Object>> abnormalPercentageDataList();

    /**
     * 流程待处理排名数据统计
     *
     * @return
     */
    List<Map<String, Object>> processPendingDataList();

    /**
     * 流程发起趋势数据统计
     *
     * @return
     */
    List<Map<String, Object>> initiateNumberDataList(List<DictModel> dictModelList);

    /**
     * 异常流程合同号信息
     *
     * @return
     */
    List<Map<String, Object>> expDataContractList(List<QaProcessInstanceVO> qaProcessInstanceList);

    /**
     * CPK预警流程检验项信息
     *
     * @return
     */
    List<Map<String, Object>> cpkDataCheckList(List<QaProcessInstanceVO> qaProcessInstanceList);

    /**
     * 异常流程检验项信息
     *
     * @return
     */
    List<Map<String, Object>> expDataCheckList(List<QaProcessInstance> qaProcessInstanceList);

    /**
     * 表查询
     *
     * @param day
     * @return
     */
    List<QaProcessInstanceVO> findListByDay(int day, String processCode);

    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    IPage<QaProcessExpDataVO> findProcessExpByPage(IPage<QaProcessExpDataVO> page, QueryWrapper<QaProcessExpDataVO> wrapper);

    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    IPage<QaProcessCpkDataVO> findProcessCpkByPage(IPage<QaProcessCpkDataVO> page, QueryWrapper<QaProcessCpkDataVO> wrapper);

    QaProcessInstance publishCpkProcess(JSONObject jsonObject);

    /**
     * 获取关键质量异常列表
     *
     * @param wrapper 参数
     * @return 结果
     */
    List<QaProcessExpDataVO> findProcessExp(QueryWrapper<QaProcessExpDataVO> wrapper);

    /**
     * 获取关键质量预警列表
     *
     * @param wrapper 参数
     * @return 结果
     */
    List<QaProcessCpkDataVO> findProcessCpk(QueryWrapper<QaProcessCpkDataVO> wrapper);

    List<QaProcessInstance> getMonthData(String line);

    List<QaProcessInstance> getMonthTypeData(String line);

    QaProcessInstance publishSysExpProcess(JSONObject jsonObject);
}

QaProcessInstanceServiceImpl 类

package org.jeecg.modules.quality.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.quality.entity.*;
import org.jeecg.modules.quality.mapper.*;
import org.jeecg.modules.quality.service.IQaProcessInstanceService;
import org.jeecg.modules.quality.service.IQaProcessItemInstanceService;
import org.jeecg.modules.quality.service.IQaProcessNodeService;
import org.jeecg.modules.quality.vo.QaProcessCpkDataVO;
import org.jeecg.modules.quality.vo.QaProcessExpDataVO;
import org.jeecg.modules.quality.vo.QaProcessInstanceVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @Description: 流程实例表
 * @Author: jeecg-boot
 * @Date: 2021-05-17
 * @Version: V1.0
 */
@Service
public class QaProcessInstanceServiceImpl extends ServiceImpl<QaProcessInstanceMapper, QaProcessInstance> implements IQaProcessInstanceService {
    @Autowired
    private IQaProcessItemInstanceService qaProcessItemInstanceService;
    @Autowired
    private IQaProcessNodeService qaProcessNodeService;
    @Autowired
    private QaProcessItemInstanceMapper qaProcessItemInstanceMapper;
    @Autowired
    private QaProcessNodeItemInstanceMapper qaProcessNodeItemInstanceMapper;
    @Autowired
    private QaProcessNodeInstanceMapper qaProcessNodeInstanceMapper;
    @Autowired
    private QaProcessMapper qaProcessMapper;
    @Autowired
    private QaProcessItemMapper qaProcessItemMapper;
    @Autowired
    private QaCpkConfMapper qaCpkConfMapper;
    @Autowired
    private QaProcessInstanceHandleMapper qaProcessInstanceHandleMapper;

    @Override
    @Transactional
    public int publishProcess(JSONObject jsonObject) {
        QaProcessInstance qaProcessInstance = new QaProcessInstance();
        qaProcessInstance.setProcessId(jsonObject.getString("id"));
        qaProcessInstance.setProcessStatus(1);
        QueryWrapper<QaProcessNode> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("process_id", qaProcessInstance.getProcessId());
        queryWrapper.orderByAsc("order_no");
        List<QaProcessNode> qaProcessNodeList = qaProcessNodeService.list(queryWrapper);
        if (qaProcessNodeList.size() == 1) {
            qaProcessInstance.setCurNodeId(qaProcessNodeList.get(0).getId());
        } else if (qaProcessNodeList.size() > 1) {
            qaProcessInstance.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstance.setNextNodeId(qaProcessNodeList.get(1).getId());
        }
        baseMapper.insert(qaProcessInstance);
        qaProcessInstance = baseMapper.selectById(qaProcessInstance.getId());
        qaProcessInstance.setProcessNoCode(String.format("FN%08d", qaProcessInstance.getProcessNo()));
        update(new LambdaUpdateWrapper<QaProcessInstance>().set(QaProcessInstance::getProcessNoCode, qaProcessInstance.getProcessNoCode()).eq(QaProcessInstance::getId, qaProcessInstance.getId()));

        JSONArray itemList = jsonObject.getJSONArray("itemList");
        List<QaProcessItemInstance> qaProcessItemInstanceList = new ArrayList<>();
        for (int i = 0; i < itemList.size(); i++) {
            JSONObject item = itemList.getJSONObject(i);
            QaProcessItemInstance qaProcessItemInstance = new QaProcessItemInstance();
            qaProcessItemInstance.setProcessInstanceId(qaProcessInstance.getId());
            qaProcessItemInstance.setProcessItemId(item.getString("id"));
            qaProcessItemInstance.setProcessItemInstanceValue(item.getString("processItemInstanceValue"));
            qaProcessItemInstance.setProcessItemValue(item.getString("processItemValue"));
            qaProcessItemInstance.setProcessItemName(item.getString("processItemName"));
            qaProcessItemInstance.setProcessItemType(item.getInteger("processItemType"));
            qaProcessItemInstanceList.add(qaProcessItemInstance);
        }
        qaProcessItemInstanceService.saveBatch(qaProcessItemInstanceList);
        return 0;
    }

    @Override
    public IPage<QaProcessInstanceVO> getQaProcessInstanceVOList(Page<QaProcessInstanceVO> page, QueryWrapper<QaProcessInstanceVO> queryWrapper) {
        return baseMapper.findByPage(page, queryWrapper);
    }

    @Override
    public List<QaProcessInstanceVO> findList(QueryWrapper<QaProcessInstanceVO> queryWrapper) {
        return baseMapper.findList(queryWrapper);
    }

    @Override
    @Transactional
    public int deleteProcessInstance(String processInstanceId) {
        //删除节点变量实例
        qaProcessNodeItemInstanceMapper.deleteByProcessInstanceId(processInstanceId);
        //删除节点实例
        qaProcessNodeInstanceMapper.deleteByProcessInstanceId(processInstanceId);
        //删除流程变量实例
        qaProcessItemInstanceMapper.deleteByProcessInstanceId(processInstanceId);
        //删除流程实例
        baseMapper.deleteById(processInstanceId);
        return 1;
    }

    /**
     * 用户发起流程数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> handlingSituationDataCreateList() {
        return baseMapper.handlingSituationDataCreateList();
    }

    /**
     * 用户处理完成流程数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> handlingSituationDataHandleOverList() {
        return baseMapper.handlingSituationDataHandleOverList();
    }

    /**
     * 用户待处理流程数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> handlingSituationDataHandlingList() {
        return baseMapper.handlingSituationDataHandlingList();
    }

    /**
     * 流程占比数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> processPercentageDataList() {
        return baseMapper.processPercentageDataList();
    }

    /**
     * 各类异常占比数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> abnormalPercentageDataList() {
        return baseMapper.abnormalPercentageDataList();
    }

    /**
     * 流程待处理排名数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> processPendingDataList() {
        return baseMapper.processPendingDataList();
    }

    /**
     * 流程发起趋势数据统计
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> initiateNumberDataList(List<DictModel> dictModelList) {
        return baseMapper.initiateNumberDataList(dictModelList);
    }

    /**
     * 异常流程合同号信息
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> expDataContractList(List<QaProcessInstanceVO> qaProcessInstanceList) {
        return baseMapper.expDataContractList(qaProcessInstanceList);
    }

    /**
     * CPK预警流程检验项信息
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> cpkDataCheckList(List<QaProcessInstanceVO> qaProcessInstanceList) {
        return baseMapper.cpkDataCheckList(qaProcessInstanceList);
    }

    /**
     * 异常流程检验项信息
     *
     * @return
     */
    @Override
    public List<Map<String, Object>> expDataCheckList(List<QaProcessInstance> qaProcessInstanceList) {
        return baseMapper.expDataCheckList(qaProcessInstanceList);
    }

    /**
     * 表查询
     *
     * @param day
     * @return
     */
    @Override
    public List<QaProcessInstanceVO> findListByDay(int day, String processCode) {
        return baseMapper.findListByDay(day, processCode);
    }

    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    @Override
    public IPage<QaProcessExpDataVO> findProcessExpByPage(IPage<QaProcessExpDataVO> page, QueryWrapper<QaProcessExpDataVO> wrapper) {
        return baseMapper.findProcessExpByPage(page, wrapper);
    }

    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    @Override
    public IPage<QaProcessCpkDataVO> findProcessCpkByPage(IPage<QaProcessCpkDataVO> page, QueryWrapper<QaProcessCpkDataVO> wrapper) {
        return baseMapper.findProcessCpkByPage(page, wrapper);
    }

    /**
     * 创建CPK流程
     * {
     * "processName": "CPK超规处理流程",
     * "processCode": "cpk",
     * "itemList": [
     * {
     * "processItemCode": "check_code",
     * "processItemInstanceValue":"cpk检验项ID"
     * },
     * {
     * "processItemCode": "cpk",
     * "processItemInstanceValue": "3.4"
     * },
     * {
     * "processItemCode": "group_line",
     * "processItemInstanceValue": "JX1"
     * },
     * {
     * "processItemCode": "wu_code",
     * "processItemInstanceValue": "OP10"
     * },
     * {
     * "processItemCode": "cpk_reason",
     * "processItemInstanceValue": "超过要求"
     * },
     * {
     * "processItemCode": "cpk_id",
     * "processItemInstanceValue": "ID1"
     * }
     * ]
     * }
     *
     * @param jsonObject
     * @return
     */
    @Override
    @Transactional
    public QaProcessInstance publishCpkProcess(JSONObject jsonObject) {
        QueryWrapper<QaProcess> queryProcessWrapper = new QueryWrapper<>();
        queryProcessWrapper.eq("process_code", jsonObject.getString("processCode"));
        QaProcess qaProcess = qaProcessMapper.selectOne(queryProcessWrapper);

        //写入关键预警数据表
        QaProcessInstanceHandle qaProcessInstanceHandle = new QaProcessInstanceHandle();

        QaProcessInstance qaProcessInstance = new QaProcessInstance();
        qaProcessInstance.setProcessId(qaProcess.getId());
        qaProcessInstance.setProcessStatus(1);
        QueryWrapper<QaProcessNode> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("process_id", qaProcess.getId());
        queryWrapper.orderByAsc("order_no");
        List<QaProcessNode> qaProcessNodeList = qaProcessNodeService.list(queryWrapper);
        if (qaProcessNodeList.size() == 1) {
            qaProcessInstanceHandle.setHandle(qaProcessNodeList.get(0).getProcessNodeName());
            qaProcessInstanceHandle.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstance.setCurNodeId(qaProcessNodeList.get(0).getId());
        } else if (qaProcessNodeList.size() > 1) {
            qaProcessInstanceHandle.setHandle(qaProcessNodeList.get(0).getProcessNodeName());
            qaProcessInstanceHandle.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstanceHandle.setNextNodeId(qaProcessNodeList.get(1).getId());
            qaProcessInstance.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstance.setNextNodeId(qaProcessNodeList.get(1).getId());
        }
        baseMapper.insert(qaProcessInstance);
        qaProcessInstance = baseMapper.selectById(qaProcessInstance.getId());
        qaProcessInstance.setProcessNoCode(String.format("FN%08d", qaProcessInstance.getProcessNo()));
        update(new LambdaUpdateWrapper<QaProcessInstance>().set(QaProcessInstance::getProcessNoCode, qaProcessInstance.getProcessNoCode()).eq(QaProcessInstance::getId, qaProcessInstance.getId()));

        //设置流程实例ID
        qaProcessInstanceHandle.setProcessInstanceId(qaProcessInstance.getId());
        qaProcessInstanceHandle.setProcessNo(qaProcessInstance.getProcessNo());
        qaProcessInstanceHandle.setProcessNoCode(qaProcessInstance.getProcessNoCode());

        QueryWrapper<QaProcessItem> queryProcessItemWrapper = new QueryWrapper<>();
        queryProcessItemWrapper.eq("process_id", qaProcess.getId());
        queryProcessItemWrapper.orderByAsc("order_no");
        List<QaProcessItem> qaProcessItemList = qaProcessItemMapper.selectList(queryProcessItemWrapper);
        JSONArray itemList = jsonObject.getJSONArray("itemList");

        for (int j = 0; j < itemList.size(); j++) {
            JSONObject item = itemList.getJSONObject(j);
            if ("wu_code".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setWuCode(item.getString("processItemInstanceValue"));
            }
            else if ("cpk_reason".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setReason(item.getString("processItemInstanceValue"));
            }
            else if ("group_line".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setGroupLine(item.getString("processItemInstanceValue"));
            }
            else if ("cpk".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setCpk(item.getString("processItemInstanceValue"));
            }
            else if ("cpk_id".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setCpkId(item.getString("processItemInstanceValue"));
            }
        }

        List<QaProcessItemInstance> qaProcessItemInstanceList = new ArrayList<>();
        for (int i = 0; i < qaProcessItemList.size(); i++) {
            QaProcessItem qaProcessItem = qaProcessItemList.get(i);
            QaProcessItemInstance qaProcessItemInstance = new QaProcessItemInstance();
            qaProcessItemInstance.setProcessInstanceId(qaProcessInstance.getId());
            qaProcessItemInstance.setProcessItemId(qaProcessItem.getId());
            qaProcessItemInstance.setProcessItemName(qaProcessItem.getProcessItemName());
            qaProcessItemInstance.setProcessItemType(qaProcessItem.getProcessItemType());
            for (int j = 0; j < itemList.size(); j++) {
                JSONObject item = itemList.getJSONObject(j);
                if (item.getString("processItemCode").equals(qaProcessItem.getProcessItemCode())) {
                    qaProcessItemInstance.setProcessItemInstanceValue(item.getString("processItemInstanceValue"));
                    if ("check_code".equals(item.getString("processItemCode"))) {
                        QueryWrapper queryWrapper1 = new QueryWrapper<>();
                        queryWrapper1.eq("cpk_code", qaProcessItemInstance.getProcessItemInstanceValue());
                        queryWrapper1.eq("process", qaProcessInstanceHandle.getWuCode());
                        QaCpkConf qaCpkConf = qaCpkConfMapper.selectOne(queryWrapper1);
                        String value = "{\"kpc_id\":\"" + qaCpkConf.getId() + "\",\"kpc_code\":\"" + qaCpkConf.getKpcCode() + "\",\"kpc_name\":\"" + qaCpkConf.getCpkName() + "\"}";
                        qaProcessInstanceHandle.setCpkName(qaCpkConf.getCpkName());
                        qaProcessInstanceHandle.setKpcType(qaCpkConf.getCpkType());
                        qaProcessInstanceHandle.setElevatorType(qaCpkConf.getEscalatorType());
                        qaProcessItemInstance.setProcessItemValue(value);
                    }
                    break;
                }
            }
            qaProcessItemInstanceList.add(qaProcessItemInstance);
        }

        qaProcessInstanceHandleMapper.insert(qaProcessInstanceHandle);

        qaProcessItemInstanceService.saveBatch(qaProcessItemInstanceList);
        return qaProcessInstance;
    }

    @Override
    public List<QaProcessExpDataVO> findProcessExp(QueryWrapper<QaProcessExpDataVO> wrapper) {
        return this.baseMapper.findProcessExpByPage(wrapper);
    }

    @Override
    public List<QaProcessCpkDataVO> findProcessCpk(QueryWrapper<QaProcessCpkDataVO> wrapper) {
        return this.baseMapper.findProcessCpkByPage(wrapper);
    }

    @Override
    public List<QaProcessInstance> getMonthData(String line) {
        return baseMapper.getMonthData(line);
    }

    @Override
    public List<QaProcessInstance> getMonthTypeData(String line) {
        return baseMapper.getMonthTypeData(line);
    }


    /**
     * 创建工装异常流程
     * {
     * "processName": "工装异常处理流程",
     * "processCode": "sysExpHandle",
     * "itemList": [
     * {
     * "processItemCode": "group_line",
     * "processItemInstanceValue": "JX1"
     * },
     * {
     * "processItemCode": "wu_code",
     * "processItemInstanceValue": "OP10"
     * },
     * {
     * "processItemCode": "exp_reason",
     * "processItemInstanceValue": "异常原因"
     * },
     * {
     * "processItemCode": "system_name",
     * "processItemInstanceValue": "工装名称"
     * }
     * {
     * "processItemCode": "sys_id",
     * "processItemInstanceValue": "工装ID"
     * }
     * ]
     * }
     *
     * @param jsonObject
     * @return
     */
    @Override
    @Transactional
    public QaProcessInstance publishSysExpProcess(JSONObject jsonObject) {
        QueryWrapper<QaProcess> queryProcessWrapper = new QueryWrapper<>();
        queryProcessWrapper.eq("process_code", jsonObject.getString("processCode"));
        QaProcess qaProcess = qaProcessMapper.selectOne(queryProcessWrapper);

        //写入关键预警数据表
        QaProcessInstanceHandle qaProcessInstanceHandle = new QaProcessInstanceHandle();

        QaProcessInstance qaProcessInstance = new QaProcessInstance();
        qaProcessInstance.setProcessId(qaProcess.getId());
        qaProcessInstance.setProcessStatus(1);
        QueryWrapper<QaProcessNode> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("process_id", qaProcess.getId());
        queryWrapper.orderByAsc("order_no");
        List<QaProcessNode> qaProcessNodeList = qaProcessNodeService.list(queryWrapper);
        if (qaProcessNodeList.size() == 1) {
            qaProcessInstanceHandle.setHandle(qaProcessNodeList.get(0).getProcessNodeName());
            qaProcessInstanceHandle.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstance.setCurNodeId(qaProcessNodeList.get(0).getId());
        } else if (qaProcessNodeList.size() > 1) {
            qaProcessInstanceHandle.setHandle(qaProcessNodeList.get(0).getProcessNodeName());
            qaProcessInstanceHandle.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstanceHandle.setNextNodeId(qaProcessNodeList.get(1).getId());
            qaProcessInstance.setCurNodeId(qaProcessNodeList.get(0).getId());
            qaProcessInstance.setNextNodeId(qaProcessNodeList.get(1).getId());
        }
        baseMapper.insert(qaProcessInstance);
        qaProcessInstance = baseMapper.selectById(qaProcessInstance.getId());
        qaProcessInstance.setProcessNoCode(String.format("FN%08d", qaProcessInstance.getProcessNo()));
        update(new LambdaUpdateWrapper<QaProcessInstance>().set(QaProcessInstance::getProcessNoCode, qaProcessInstance.getProcessNoCode()).eq(QaProcessInstance::getId, qaProcessInstance.getId()));

        //设置流程实例ID
        qaProcessInstanceHandle.setProcessInstanceId(qaProcessInstance.getId());
        qaProcessInstanceHandle.setProcessNo(qaProcessInstance.getProcessNo());
        qaProcessInstanceHandle.setProcessNoCode(qaProcessInstance.getProcessNoCode());

        QueryWrapper<QaProcessItem> queryProcessItemWrapper = new QueryWrapper<>();
        queryProcessItemWrapper.eq("process_id", qaProcess.getId());
        queryProcessItemWrapper.orderByAsc("order_no");
        List<QaProcessItem> qaProcessItemList = qaProcessItemMapper.selectList(queryProcessItemWrapper);
        JSONArray itemList = jsonObject.getJSONArray("itemList");

        for (int j = 0; j < itemList.size(); j++) {
            JSONObject item = itemList.getJSONObject(j);
            if ("wu_code".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setWuCode(item.getString("processItemInstanceValue"));
            }
            else if ("exp_reason".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setReason(item.getString("processItemInstanceValue"));
            }
            else if ("group_line".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setGroupLine(item.getString("processItemInstanceValue"));
            }
            else if ("system_name".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setCpkName(item.getString("processItemInstanceValue"));
            }
            else if ("sys_id".equals(item.getString("processItemCode"))) {
                qaProcessInstanceHandle.setCpkId(item.getString("processItemInstanceValue"));
            }
        }

        List<QaProcessItemInstance> qaProcessItemInstanceList = new ArrayList<>();
        for (int i = 0; i < qaProcessItemList.size(); i++) {
            QaProcessItem qaProcessItem = qaProcessItemList.get(i);
            QaProcessItemInstance qaProcessItemInstance = new QaProcessItemInstance();
            qaProcessItemInstance.setProcessInstanceId(qaProcessInstance.getId());
            qaProcessItemInstance.setProcessItemId(qaProcessItem.getId());
            qaProcessItemInstance.setProcessItemName(qaProcessItem.getProcessItemName());
            qaProcessItemInstance.setProcessItemType(qaProcessItem.getProcessItemType());
            qaProcessItemInstance.setProcessItemInstanceValue(qaProcessItem.getProcessItemInstanceValue());
            for (int j = 0; j < itemList.size(); j++) {
                JSONObject item = itemList.getJSONObject(j);
                if (item.getString("processItemCode").equals(qaProcessItem.getProcessItemCode())) {
                    qaProcessItemInstance.setProcessItemInstanceValue(item.getString("processItemInstanceValue"));
                    break;
                }
            }
            qaProcessItemInstanceList.add(qaProcessItemInstance);
        }

        qaProcessInstanceHandleMapper.insert(qaProcessInstanceHandle);

        qaProcessItemInstanceService.saveBatch(qaProcessItemInstanceList);
        return qaProcessInstance;
    }

}

QaProcessInstanceMapper 类

package org.jeecg.modules.quality.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.quality.entity.QaProcessInstance;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.quality.vo.QaProcessCpkDataVO;
import org.jeecg.modules.quality.vo.QaProcessExpDataVO;
import org.jeecg.modules.quality.vo.QaProcessInstanceVO;

import java.util.List;
import java.util.Map;

/**
 * @Description: 流程实例表
 * @Author: jeecg-boot
 * @Date: 2021-05-17
 * @Version: V1.0
 */
public interface QaProcessInstanceMapper extends BaseMapper<QaProcessInstance> {
    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    //参数加上@Param(Constants.WRAPPER),xml里加上${ew.customSqlSegment}可以实现复杂条件检索查询
    IPage<QaProcessInstanceVO> findByPage(IPage<QaProcessInstanceVO> page, @Param(Constants.WRAPPER) Wrapper<QaProcessInstanceVO> wrapper);

    /**
     * 表查询
     *
     * @param wrapper
     * @return
     */
    //参数加上@Param(Constants.WRAPPER),xml里加上${ew.customSqlSegment}可以实现复杂条件检索查询
    List<QaProcessInstanceVO> findList(@Param(Constants.WRAPPER) Wrapper<QaProcessInstanceVO> wrapper);


    /**
     * 用户发起流程数据统计
     *
     * @return
     */
    List<Map<String, Object>> handlingSituationDataCreateList();

    /**
     * 用户处理完成流程数据统计
     *
     * @return
     */
    List<Map<String, Object>> handlingSituationDataHandleOverList();

    /**
     * 用户待处理流程数据统计
     *
     * @return
     */
    List<Map<String, Object>> handlingSituationDataHandlingList();

    /**
     * 流程占比数据统计
     *
     * @return
     */
    List<Map<String, Object>> processPercentageDataList();

    /**
     * 各类异常占比数据统计
     *
     * @return
     */
    List<Map<String, Object>> abnormalPercentageDataList();

    /**
     * 流程待处理排名数据统计
     *
     * @return
     */
    List<Map<String, Object>> processPendingDataList();

    /**
     * 流程发起趋势数据统计
     *
     * @return
     */
    List<Map<String, Object>> initiateNumberDataList(List<DictModel> dictModelList);

    /**
     * 异常流程合同号信息
     *
     * @return
     */
    List<Map<String, Object>> expDataContractList(List<QaProcessInstanceVO> qaProcessInstanceList);

    /**
     * 异常流程检验项信息
     *
     * @return
     */
    List<Map<String, Object>> expDataCheckList(List<QaProcessInstance> qaProcessInstanceList);

    /**
     * CPK预警流程检验项信息
     *
     * @return
     */
    List<Map<String, Object>> cpkDataCheckList(List<QaProcessInstanceVO> qaProcessInstanceList);

    /**
     * 表查询
     *
     * @param day
     * @return
     */
    List<QaProcessInstanceVO> findListByDay(@Param("day") int day, @Param("processCode") String processCode);

    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    IPage<QaProcessExpDataVO> findProcessExpByPage(IPage<QaProcessExpDataVO> page, @Param(Constants.WRAPPER) Wrapper<QaProcessExpDataVO> wrapper);

    /**
     * 表查询
     *
     * @param page
     * @param wrapper
     * @return
     */
    IPage<QaProcessCpkDataVO> findProcessCpkByPage(IPage<QaProcessCpkDataVO> page, @Param(Constants.WRAPPER) Wrapper<QaProcessCpkDataVO> wrapper);

    /**
     * 获取关键质量异常列表
     *
     * @param wrapper 参数
     * @return 结果
     */
    List<QaProcessExpDataVO> findProcessExpByPage(@Param(Constants.WRAPPER) QueryWrapper<QaProcessExpDataVO> wrapper);

    /**
     * 获取关键质量预警列表
     *
     * @param wrapper 参数
     * @return 结果
     */
    List<QaProcessCpkDataVO> findProcessCpkByPage(@Param(Constants.WRAPPER) QueryWrapper<QaProcessCpkDataVO> wrapper);

    /**
     * 查询某条线组当月异常统计
     *
     * @param line 线组(不限地区)
     * @return 结果
     */
    List<QaProcessInstance> getMonthData(@Param("line") String line);

    /**
     * 查询某条线组异常统计
     *
     * @param line 线组(区分地区)
     * @return 结果
     */
    List<QaProcessInstance> getMonthTypeData(@Param("line") String line);
}

QaProcessInstanceMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.quality.mapper.QaProcessInstanceMapper">
    <!--mybatis-plus多表联合查询,带上${ew.customSqlSegment就可以实现查询-->
    <select id="findByPage" resultType="org.jeecg.modules.quality.vo.QaProcessInstanceVO">
        select * from (
            SELECT
                qa_process_instance.*, qa_process.process_name,
                qa_process.process_code,
                qa_process.process_type,
                c.process_node_name AS cur_node_name,
                n.process_node_name AS next_node_name,
                h.cpk_id AS cpk_data_id,
                h.cpk_name AS cpk_name,
                h.reason,
                h.wu_code AS wu_code,
                h.group_line
            FROM
                qa_process_instance
            LEFT JOIN qa_process ON qa_process_instance.process_id = qa_process.id
            LEFT JOIN qa_process_node c ON qa_process_instance.cur_node_id = c.id
            LEFT JOIN qa_process_node n ON qa_process_instance.next_node_id = n.id
            INNER JOIN qa_process_instance_handle h ON h.process_instance_id = qa_process_instance.id)
        AS t ${ew.customSqlSegment}
    </select>

    <select id="findList" resultType="org.jeecg.modules.quality.vo.QaProcessInstanceVO">
        select * from (
                          SELECT
                              qa_process_instance.*, qa_process.process_name,
                              qa_process.process_code,
                              qa_process.process_type,
                              c.process_node_name AS cur_node_name,
                              n.process_node_name AS next_node_name,
                              h.cpk_id AS cpk_data_id,
                              h.cpk_name AS cpk_name,
                              h.reason,
                              h.group_line
                          FROM
                              qa_process_instance
                                  LEFT JOIN qa_process ON qa_process_instance.process_id = qa_process.id
                                  LEFT JOIN qa_process_node c ON qa_process_instance.cur_node_id = c.id
                                  LEFT JOIN qa_process_node n ON qa_process_instance.next_node_id = n.id
                                  INNER JOIN qa_process_instance_handle h ON h.process_instance_id = qa_process_instance.id)
        AS t ${ew.customSqlSegment}
    </select>

    <select id="handlingSituationDataCreateList" resultType="Map">
        SELECT
            a.create_by AS createUser,
            b.realname AS createUserName,
            COUNT (*) AS totalNum
        FROM
            qa_process_instance a
        INNER JOIN sys_user b ON a.create_by COLLATE Chinese_PRC_CI_AS = b.username
        GROUP BY
            a.create_by,
            b.realname
    </select>
    <select id="handlingSituationDataHandleOverList" resultType="Map">
        SELECT
            b.username AS handleUser,
            b.realname AS handleUserName,
            COUNT (a.id) AS totalNum
        FROM
            qa_process_instance a
        INNER JOIN (
            SELECT
                process_instance_id,
                handle_user_id
            FROM
                qa_process_node_instance
            GROUP BY
                process_instance_id,
                handle_user_id
        ) c ON c.process_instance_id = a.id
        INNER JOIN sys_user b ON c.handle_user_id COLLATE Chinese_PRC_CI_AS = b.id
        WHERE
            a.process_status = 2
        GROUP BY
            b.username,
            b.realname
    </select>
    <select id="handlingSituationDataHandlingList" resultType="Map">
        SELECT
            b.username AS handleUser,
            b.realname AS handleUserName,
            COUNT (a.id) AS totalNum
        FROM
            qa_process_instance a
        INNER JOIN (
            SELECT
                process_instance_id,
                handle_user_id
            FROM
                qa_process_node_instance
            GROUP BY
                process_instance_id,
                handle_user_id
        ) c ON c.process_instance_id = a.id
        INNER JOIN sys_user b ON c.handle_user_id COLLATE Chinese_PRC_CI_AS = b.id
        WHERE
            a.process_status IN (0, 1)
        GROUP BY
            b.username,
            b.realname
    </select>
    <select id="processPercentageDataList" resultType="Map">
        SELECT
            b.process_code AS processCode,
            b.process_name AS processName,
            COUNT (a.id) AS totalNum
        FROM
            qa_process_instance a
        INNER JOIN qa_process b ON a.process_id = b.id
        GROUP BY
            b.process_code,
            b.process_name
    </select>
    <select id="abnormalPercentageDataList" resultType="Map">
        SELECT
            b.process_type AS processCode,
            di.item_text AS processName,
            COUNT (a.id) AS totalNum
        FROM
            qa_process_instance a
        INNER JOIN qa_process b ON a.process_id = b.id
        INNER JOIN sys_dict_item di ON b.process_type COLLATE Database_Default = di.item_value
        INNER JOIN sys_dict d ON d.id = di.dict_id
        WHERE
            d.dict_code = 'bpm_process_type'
        GROUP BY
            b.process_type,
            di.item_text
    </select>
    <select id="processPendingDataList" resultType="Map">
        SELECT
            b.process_code,
            b.process_name,
            COUNT (a.id) AS totalNum
        FROM
            qa_process_instance a
        INNER JOIN qa_process b ON a.process_id = b.id
        WHERE
            a.process_status IN (0, 1)
        GROUP BY
            b.process_code,
            b.process_name
    </select>
    <select id="initiateNumberDataList" resultType="Map">
        SELECT
            c.process_name,
            c.process_code,
            a.process_item_instance_value,
            a.process_item_value
        FROM
            qa_process_item_instance a
        INNER JOIN qa_process_instance b ON a.process_instance_id = b.id
        INNER JOIN qa_process c ON c.id = b.process_id
        WHERE
            a.process_item_type = 3 AND a.process_item_name = '产生来源'
        AND c.id IN
        <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
            #{item.value}
        </foreach>
    </select>
    <select id="findListByDay" resultType="org.jeecg.modules.quality.vo.QaProcessInstanceVO">
        SELECT
            qa_process_instance.*, qa_process.process_name,
            qa_process.process_code,
            qa_process.process_type,
          c.process_node_name as cur_node_name,
          c.handle_user_id as handle_user_id,
          c.handle_user_type as handle_user_type,
          n.process_node_name as next_node_name
        FROM
            qa_process_instance
        INNER JOIN qa_process ON qa_process_instance.process_id = qa_process.id
        LEFT JOIN qa_process_node c ON qa_process_instance.cur_node_id = c.id
        LEFT JOIN qa_process_node n ON qa_process_instance.next_node_id = n.id
        WHERE datediff(day, qa_process_instance.create_time, getdate())>= 0 AND datediff(DAY, qa_process_instance.create_time, getdate()) &lt;=  #{day} AND qa_process.process_code= #{processCode}
    </select>

    <select id="expDataContractList" resultType="Map">
        SELECT
        c.id,
        CONVERT(varchar(100), c.create_time, 23) AS create_time,
        a.process_item_instance_value,
        d.group_line,
        d.model
        FROM
        qa_process_item_instance a
        INNER JOIN qa_process_instance c ON c.id=a.process_instance_id
        INNER JOIN qa_process_item b ON b.id = a.process_item_id
        INNER JOIN qa_plan d ON d.contract_no = a.process_item_instance_value
        AND b.process_item_code = 'contract_no'
        WHERE c.id IN
        <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </select>
    <select id="expDataCheckList" resultType="Map">
        SELECT
        c.id,
        CONVERT(varchar(100), c.create_time, 23) AS create_time,
        a.process_item_instance_value,
        d.kpc_code,
        d.target_value,
        d.cpk_type
        FROM
        qa_process_item_instance a
        INNER JOIN qa_process_instance c ON c.id=a.process_instance_id
        INNER JOIN qa_process_item b ON b.id = a.process_item_id
        INNER JOIN qa_cpk_conf d ON d.id = a.process_item_instance_value
        AND b.process_item_code = 'check_code'
        WHERE c.id IN
        <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </select>

    <select id="findProcessExpByPage" resultType="org.jeecg.modules.quality.vo.QaProcessExpDataVO">
        SELECT
              t.*
            FROM
              v_process_exp AS t ${ew.customSqlSegment}
        ORDER BY
            t.create_time DESC
    </select>

    <select id="findProcessCpkByPage" resultType="org.jeecg.modules.quality.vo.QaProcessCpkDataVO">
        SELECT t.* FROM (SELECT
            a.id,
            a.create_by,
            a.create_time,
            d.process_node_name,
            a.process_status,
            f.kpc_code,
            f.process,
            f.cpk_name,
            f.target_value,
            f.cpk_type,
            f.escalator_type,
            c.cpk,
            c.id as cpk_id,
            b.process_code,
            e.process_item_instance_value as cpk_reason,
            b.process_name,
            'HZ1' as group_line
        FROM
            qa_process_instance a
        INNER JOIN qa_cpk_history c ON c.process_instance_ids LIKE CONCAT ('%', a.id, '%')
        INNER JOIN qa_cpk_conf f ON f.cpk_code = c.cpk_code
        INNER JOIN qa_process b ON a.process_id = b.id
        LEFT JOIN qa_process_node d ON a.cur_node_id = d.id
        LEFT JOIN qa_process_item g on g.process_id = b.id and g.process_item_code = 'cpk_reason'
        LEFT JOIN qa_process_item_instance e on e.process_instance_id = a.id and e.process_item_id = g.id
        WHERE
            b.process_code IN ('cpk', 'spc')) AS t ${ew.customSqlSegment}
        ORDER BY
            t.create_time DESC
    </select>
    <select id="cpkDataCheckList" resultType="Map">
        SELECT
        c.id,
        CONVERT(varchar(100), c.create_time, 23) AS create_time,
        d.escalator_type
        FROM
        qa_process_item_instance a
        INNER JOIN qa_process_instance c ON c.id = a.process_instance_id
        INNER JOIN qa_process_item b ON b.id = a.process_item_id
        INNER JOIN qa_cpk_conf d ON d.id = a.process_item_instance_value
        AND b.process_item_code = 'check_code'
        WHERE c.id IN
        <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </select>

    <select id="getMonthData" resultType="org.jeecg.modules.quality.entity.QaProcessInstance">
        SELECT
            qa_process_instance.*
        FROM
            qa_process_instance
        LEFT JOIN qa_process_item_instance pii ON qa_process_instance.id = pii.process_instance_id
        LEFT JOIN qa_process_item pit ON pii.process_item_id = pit.id
        WHERE pit.process_item_code = 'wu_code'
        AND SUBSTRING(pii.process_item_instance_value,3,1) = #{line}
    </select>

    <select id="getMonthTypeData" resultType="org.jeecg.modules.quality.entity.QaProcessInstance">
        SELECT
            qa_process_instance.*
        FROM
            qa_process_instance
        LEFT JOIN qa_process_item_instance pii ON qa_process_instance.id = pii.process_instance_id
        LEFT JOIN qa_process_item pit ON pii.process_item_id = pit.id
        WHERE pit.process_item_code = 'wu_code'
        AND SUBSTRING(pii.process_item_instance_value,1,3) = #{line}
    </select>
</mapper>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值