add:新增国际整车型号管控库和流程相关代码

This commit is contained in:
sunzheng
2024-09-29 17:58:27 +08:00
parent eef5b81d3c
commit 2a29683266
29 changed files with 2107 additions and 7 deletions
@@ -20,6 +20,7 @@ public enum ProcessTypeEnum {
ANNUAL_INIT("企业标准年度制修订计划流程", 7, "com.jero.modules.activiti.process.annualinit.service.ProcessAnnualInitService","/workCenter/ESAnnualRevisionPlanProcess","/workCenter/ESAnnualRevisionPlanProcess"),
DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", 8, "com.jero.modules.activiti.process.vehicledomestic.service.impl.ProcessVehicleDomesticReleaseServiceImpl","/workCenter/VehicleDomesticReleaseProcess","/workCenter/VehicleDomesticReleaseProcess"),
PLAN_CHANGE("企业标准计划变更流程", 9, "com.jero.modules.activiti.process.planchange.service.ProcessPlanChangeService","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision"),
INTERNATIONAL_VEHICLE_CONTROL_PUBLISH("国际整车型号和VIN前八位管控流程", 10, "com.jero.modules.activiti.process.vehicleinternational.service.impl.ProcessVehicleDomesticReleaseServiceImpl","/workCenter/VehicleInternationalReleaseProcess","/workCenter/VehicleInternationalReleaseProcess")
;
private final String name;
@@ -20,6 +20,7 @@ public enum ProcessType {
ANNUAL_INIT("企业标准年度制修订计划流程", "7", "process-annual-init", "ProcessAnnualInitService"),
DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", "8", "domestic_vehicle_control_publish", "ProcessVehicleDomesticReleaseServiceImpl"),
PLAN_CHANGE("企业标准计划变更流程", "9", "process-plan-change", "ProcessPlanChangeService"),
INTERNATIONAL_VEHICLE_CONTROL_PUBLISH("国际整车型号和VIN前八位管控流程", "10", "international_vehicle_control_publish", "ProcessVehicleInternationalReleaseServiceImpl")
;
private final String name;
@@ -1,5 +1,7 @@
package com.jero.modules.activiti.process.planchange.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.activiti.process.planchange.entity.ProcessPlanChangeLink;
import com.jero.modules.activiti.process.planchange.mapper.ProcessPlanChangeLinkMapper;
import org.springframework.stereotype.Service;
@@ -321,7 +321,7 @@ public class ProcessVehicleDomesticReleaseServiceImpl extends ServiceImpl<Proces
LawsVehicleDomesticLibrary lawsVehicleDomesticLibrary = lawsVehicleDomesticLibraryService.getOne(lambdaQueryWrapper, false);
if (!Objects.isNull(lawsVehicleDomesticLibrary)) {
String msg = (Objects.equals(LocaleContextHolder.getLocale(), Locale.ENGLISH) ?
"The vehicleModel is already exist" : "整车型号已存在");
"The vehicleModel:" + jsonObject.getString("vehicleModel") + "is already exist" : "整车型:" + jsonObject.getString("vehicleModel") +"号已存在");
Result<String> result = new Result<>();
result.setMessage(msg);
result.setSuccess(false); // 前端根据success判断是否通过验证
@@ -366,6 +366,7 @@ public class ProcessVehicleDomesticReleaseServiceImpl extends ServiceImpl<Proces
queryWrapper.eq(LawsVehicleDomesticLibrarySublist::getVehicleId, processVehicleDomesticRelease.getVehicleId());
LawsVehicleDomesticLibrarySublist lawsVehicleDomesticLibrarySublist = lawsVehicleDomesticLibrarySublistService.getOne(queryWrapper);
BeanUtils.copyProperties(lawsVehicleDomesticLibrarySublist, processVehicleDomesticReleaseVo);
processVehicleDomesticReleaseVo.setId(processVehicleDomesticRelease.getId());
result.setBusinessInfoDTO(processVehicleDomesticReleaseVo);
return result;
}
@@ -0,0 +1,103 @@
package com.jero.modules.activiti.process.vehicleinterntional.controller;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.ProcessDraft;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.vehicleinterntional.service.IProcessVehicleInternationalReleaseService;
import com.jero.modules.activiti.process.vehicleinterntional.vo.ProcessVehicleInternationalReleaseVo;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 国际整车型号和VIN前八位管控流程 前端控制器
* </p>
*
* @author sz
* @since 2024-09-29
*/
@RestController
@RequestMapping("/process/vehicle/international")
public class ProcessVehicleInternationalReleaseController {
@Resource
private IProcessVehicleInternationalReleaseService processVehicleInternationalReleaseService;
@Resource
private ActFlowCommonService actFlowCommonService;
@AutoLog(value = "国际整车型号和VIN前八位管控流程-导出模板")
@ApiOperation(value="国际整车型号和VIN前八位管控流程-导出模板", notes="国际整车型号和VIN前八位管控流程-导出模板")
@GetMapping(value = "/exportTemplate")
public ModelAndView exportTemplate(HttpServletRequest request) {
return processVehicleInternationalReleaseService.exportTemplate(request);
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-导入")
@ApiOperation(value="国际整车型号和VIN前八位管控流程-导入", notes="国际整车型号和VIN前八位管控流程-导入")
@PostMapping(value = "/importExcel")
public Result<?> excelimport(HttpServletRequest request) {
return processVehicleInternationalReleaseService.importExcel(request);
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-发起流程")
@ApiOperation(value = "国际整车型号和VIN前八位管控流程-发起流程", notes = "国际整车型号和VIN前八位管控流程-发起流程")
@PostMapping(value = "/start")
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
processVehicleInternationalReleaseService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-同意")
@ApiOperation(value = "国际整车型号和VIN前八位管控流程-同意", notes = "国际整车型号和VIN前八位管控流程-同意")
@PostMapping("/agree")
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
processVehicleInternationalReleaseService.approveTask(processInfoVO, true);
return Result.OK();
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-驳回")
@ApiOperation(value = "国际整车型号和VIN前八位管控流程-驳回", notes = "国际整车型号和VIN前八位管控流程-驳回")
@PostMapping("/reject")
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
processVehicleInternationalReleaseService.approveTask(processInfoVO, false);
return Result.OK();
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-提交")
@ApiOperation(value = "国际整车型号和VIN前八位管控流程-提交", notes = "国际整车型号和VIN前八位管控流程-提交")
@PostMapping("/submit")
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
processVehicleInternationalReleaseService.submit(processInfoVO);
return Result.OK();
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-校验整车型号")
@ApiOperation(value = "国际整车型号和VIN前八位管控流程-校验整车型号", notes = "国际整车型号和VIN前八位管控流程-校验整车型号")
@PostMapping("/checkVehicleModel")
public Result<String> checkVehicleModel(@RequestBody JSONObject jsonObject) {
return processVehicleInternationalReleaseService.checkVehicleModel(jsonObject);
}
@AutoLog(value = "国际整车型号和VIN前八位管控流程-办理")
@ApiOperation(value="国际整车型号和VIN前八位管控流程-办理", notes="国际整车型号和VIN前八位管控流程-办理")
@GetMapping("/handle/{taskId}")
@Translation
public Result<?> handle(@PathVariable("taskId") String taskId) {
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.DOMESTIC_VEHICLE_CONTROL_PUBLISH);
if (draft != null) {
return Result.OK(draft);
}
return Result.OK(processVehicleInternationalReleaseService.getHandleData(taskId));
}
}
@@ -0,0 +1,61 @@
package com.jero.modules.activiti.process.vehicleinterntional.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 国际整车型号和VIN前八位管控流程
* </p>
*
* @author sz
* @since 2024-09-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("process_vehicle_international_release")
@ApiModel(value="ProcessVehicleInternationalRelease对象", description="国际整车型号和VIN前八位管控流程")
public class ProcessVehicleInternationalRelease implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "流程实例Id")
private String processInstanceId;
@ApiModelProperty(value = "整车型号id")
private String vehicleId;
@ApiModelProperty(value = "抄送人")
private String copyUser;
@ApiModelProperty(value = "0表示未删除,1表示删除")
private Integer delFlag;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
}
@@ -0,0 +1,83 @@
package com.jero.modules.activiti.process.vehicleinterntional.listener;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.SendMessageAPI;
import com.jero.common.api.dto.message.SendMessageDTO;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.vehicledomestic.entity.ProcessVehicleDomesticRelease;
import com.jero.modules.activiti.process.vehicledomestic.service.IProcessVehicleDomesticReleaseService;
import com.jero.modules.activiti.process.vehicleinterntional.entity.ProcessVehicleInternationalRelease;
import com.jero.modules.activiti.process.vehicleinterntional.service.IProcessVehicleInternationalReleaseService;
import com.jero.modules.laws.businessSupport.common.Constant;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleDomesticLibrary;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrary;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleDomesticLibraryService;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibraryService;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author: Mzaxd
* @Date: 2023/10/10 14:14
*/
@Slf4j
@Component("ProcessInternationalVehicleEndListener")
public class ProcessInternationalVehicleEndListener implements ExecutionListener, Serializable {
@Resource
private IProcessVehicleInternationalReleaseService processVehicleInternationalReleaseService;
@Resource
private ILawsVehicleInternationalLibraryService lawsVehicleInternationalLibraryService;
@Resource
private ISysUserService sysUserService;
@Resource
private SendMessageAPI sendMessageAPI;
/**
* 国内整车型号和VIN前八位管控流程结束之后给抄送人发消息
* @param delegateExecution
*/
@Override
public void notify(DelegateExecution delegateExecution) {
log.info("国内整车型号和VIN前八位管控流程:监听执行器开始执行");
// 找到流程实例Id
String processInstanceId = delegateExecution.getProcessInstanceId();
// 更新业务主表的字段
ProcessVehicleInternationalRelease processVehicleInternationalRelease = processVehicleInternationalReleaseService.getOne(new LambdaQueryWrapper<ProcessVehicleInternationalRelease>().eq(ProcessVehicleInternationalRelease::getProcessInstanceId, processInstanceId), false);
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = lawsVehicleInternationalLibraryService.getById(processVehicleInternationalRelease.getVehicleId());
lawsVehicleInternationalLibrary.setFinishDate(new Date()); // 完成日期
lawsVehicleInternationalLibrary.setIsFinish(Constant.IS_FINISH); // 是否完成流程
lawsVehicleInternationalLibrary.setState(Constant.TAKE_EFFECT); // 状态
lawsVehicleInternationalLibraryService.updateById(lawsVehicleInternationalLibrary);
// 给抄送人发送消息
String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey();
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
sendMessageDTO.setTemplateCode(processDefinitionKey);
sendMessageDTO.setToUserId(processVehicleInternationalRelease.getCopyUser());
LambdaQueryWrapper<SysUser> querySysUser = new LambdaQueryWrapper<>();
querySysUser.eq(SysUser::getUsername,processVehicleInternationalRelease.getCreateBy());
SysUser sysUser = sysUserService.getOne(querySysUser,false);
if(!Objects.isNull(sysUser)){
sendMessageDTO.setSendUser(sysUser.getId());
}
Map<String, String> sendMap = new HashMap<>();
sendMap.put("standardNumber","测试占位符1");
sendMap.put("standardName", "测试占位符2");
sendMessageDTO.setMap(sendMap);
sendMessageAPI.sendMessage(sendMessageDTO);
log.info("国内整车型号和VIN前八位管控流程:监听执行器执行结束");
}
}
@@ -0,0 +1,16 @@
package com.jero.modules.activiti.process.vehicleinterntional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.vehicleinterntional.entity.ProcessVehicleInternationalRelease;
/**
* <p>
* 国际整车型号和VIN前八位管控流程 Mapper 接口
* </p>
*
* @author sz
* @since 2024-09-29
*/
public interface ProcessVehicleInternationalReleaseMapper extends BaseMapper<ProcessVehicleInternationalRelease> {
}
@@ -0,0 +1,5 @@
<?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="com.jero.modules.activiti.process.vehicleinterntional.mapper.ProcessVehicleInternationalReleaseMapper">
</mapper>
@@ -0,0 +1,36 @@
package com.jero.modules.activiti.process.vehicleinterntional.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.common.api.vo.Result;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.vehicleinterntional.entity.ProcessVehicleInternationalRelease;
import com.jero.modules.activiti.process.vehicleinterntional.vo.ProcessVehicleInternationalReleaseVo;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 国际整车型号和VIN前八位管控流程 服务类
* </p>
*
* @author sz
* @since 2024-09-29
*/
public interface IProcessVehicleInternationalReleaseService extends IService<ProcessVehicleInternationalRelease> {
ModelAndView exportTemplate(HttpServletRequest request);
Result<?> importExcel(HttpServletRequest request);
void startProcess(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO);
void approveTask(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO, boolean pass);
void submit(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO);
Result<String> checkVehicleModel(JSONObject jsonObject);
ProcessInfoVO<ProcessVehicleInternationalReleaseVo> getHandleData(String taskId);
}
@@ -0,0 +1,596 @@
package com.jero.modules.activiti.process.vehicleinterntional.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.util.ImportExcelUtil;
import com.jero.modules.activiti.common.ActivitiCommon;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.vehicleinterntional.entity.ProcessVehicleInternationalRelease;
import com.jero.modules.activiti.process.vehicleinterntional.mapper.ProcessVehicleInternationalReleaseMapper;
import com.jero.modules.activiti.process.vehicleinterntional.service.IProcessVehicleInternationalReleaseService;
import com.jero.modules.activiti.process.vehicleinterntional.vo.ProcessVehicleInternationalReleaseVo;
import com.jero.modules.activiti.process.vehicleinterntional.vo.excel.ProcessVehicleInternationalExcelVo;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.businessSupport.common.Constant;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrary;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrarySublist;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibraryService;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibrarySublistService;
import com.jero.modules.sys.utils.UserUtils;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
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.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.BeanUtils;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
/**
* <p>
* 国际整车型号和VIN前八位管控流程 服务实现类
* </p>
*
* @author sz
* @since 2024-09-29
*/
@Service
public class ProcessVehicleInternationalReleaseServiceImpl extends ServiceImpl<ProcessVehicleInternationalReleaseMapper, ProcessVehicleInternationalRelease> implements IProcessVehicleInternationalReleaseService {
@Resource
private ActFlowCommonService actFlowCommonService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private ProcessAllService processAllService;
@Resource
private RuntimeService runtimeService;
@Resource
private IProcessHandleService processHandleService;
@Resource
private TaskService taskService;
@Resource
private ILawsVehicleInternationalLibraryService lawsVehicleInternationalLibraryService;
@Resource
private ILawsVehicleInternationalLibrarySublistService lawsVehicleInternationalLibrarySublistService;
private static final String NEWLINE_CHARACTER = "</br>";
@Override
public ModelAndView exportTemplate(HttpServletRequest request) {
// AutoPoi 导出Excel
ModelAndView modelAndView = new ModelAndView(new JeecgEntityExcelView());
// 设置文件名
modelAndView.addObject(JeroController.FILE_NAME, "国际整车型号及VIN前八位统计表.xls");
modelAndView.addObject(JeroController.CLASS, ProcessVehicleInternationalExcelVo.class);
List<ProcessVehicleInternationalExcelVo> excelList = new ArrayList<>();
// 设置导出参数
ExportParams exportParams = new ExportParams(null, "国内");
exportParams.setType(ExcelType.HSSF);
modelAndView.addObject(JeroController.PARAMS, exportParams);
// 将数据列表传递给 NormalExcelConstants.DATA_LIST
modelAndView.addObject(NormalExcelConstants.DATA_LIST, excelList);
return modelAndView;
}
@Override
public Result<?> importExcel(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
List<ProcessVehicleInternationalExcelVo> excelList = new ArrayList<>();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
// 校验表头
excelHeadVerify(ProcessVehicleInternationalExcelVo.class, file);
try {
ImportParams params = new ImportParams();
params.setNeedSave(true);
params.setHeadRows(1);
excelList = ExcelImportUtil.importExcel(file.getInputStream(), ProcessVehicleInternationalExcelVo.class, params);
if (CollectionUtils.isEmpty(excelList)) {
throw new JeroBootException("没有数据可导入");
}
if (excelList.size() > 1) {
throw new JeroBootException("一次只能导入一条数据");
}
// 校验数据
StringBuilder msg = validatorExcel(excelList);
if (StringUtils.isNotEmpty(msg.toString())) {
return Result.error(msg.toString());
}
}catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败:"+e.getMessage());
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Result.OK(excelList.get(0));
}
@Override
public void startProcess(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
// 流程Key
String processDefinitionKey = ProcessType.INTERNATIONAL_VEHICLE_CONTROL_PUBLISH.getProcessKey();
// 流程信息
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
// 任务信息
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 业务数据
ProcessVehicleInternationalReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO();
// 设置流程变量
Map<String, Object> actVariables = setVariables(userInfoMap);
// 删除草稿
actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId());
// 启动流程
ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables);
// 获取流程实例ID
String processDefinitionId = processInstance.getProcessDefinitionId();
String processInstanceId = processInstance.getId();
businessInfoDTO.setProcessInstanceId(processInstanceId);
processInfo.setProcessInstanceId(processInstanceId);
processInfo.setProcessDefinitionId(processDefinitionId);
processInfo.setProcessType(ProcessTypeEnum.INTERNATIONAL_VEHICLE_CONTROL_PUBLISH.getValue());
// 第一个节点业务数据处理
startNodeBusProcess(processInfoVO);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, changeVariables(userInfoMap));
// 当前用户Id
String userId = UserUtils.getUserId();
// 获取第一个任务的taskId
String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId);
processTask.setTaskId(taskId);
// 保存第一个节点的草稿
processHandleService.saveToDraft(processInfoVO, UserUtils.getUserId());
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 根据流程实例id更新流程总表
actFlowCommonService.updateProcessAll(processInfo);
// 自动完成第一个任务
actFlowCommonService.completeTask(taskId, userId);
// 保存快照
processHandleService.saveToSnapshot(processInfoVO,userId);
}
@Override
public void approveTask(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO, boolean pass) {
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
String taskId = processTask.getTaskId();
// 获取task
if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
// 获取当前节点的id
ProcessApprovalRecord processApprovalRecord = actFlowCommonService.getNodeIdByTaskId(taskId);
String xmlNodeId = processApprovalRecord.getNodeId();
//任务Id 查询任务对象
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
if(Objects.isNull(task)){
throw new JeroBootException("找不到对应任务");
}
if (pass && task.getName().equals("法规部门处理人审批")) {
startRegulatoryProcess(processInfoVO, processInstanceId);
}
if(Objects.isNull(processTask.getCommitFlag())){
processTask.setCommitFlag(pass ? ActivitiCommon.COMMIT_FLAG1 : ActivitiCommon.COMMIT_FLAG2);
}
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 设置流程变量
runtimeService.setVariable(processInstanceId, PASS, pass);
// 审批节点
actFlowCommonService.completeTask(taskId, userId);
// 驳回,结束所有节点
processApprovalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId);
// 保存快照
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
if(!Objects.isNull(process)){
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(process.getPrcName());
basicProcessInfoDTO.setProcessType(process.getPrcType());
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
// 保存快照
processHandleService.saveToSnapshot(processInfoVO,userId);
}
}
@Override
public void submit(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
String taskId = processTask.getTaskId();
// 获取task
if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("taskId为空或任务不存在");
}
//任务Id 查询任务对象
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if(Objects.isNull(task)){
throw new JeroBootException("找不到对应任务");
}
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 设置流程变量
Map<String, Object> actVariables = setVariables(userInfoMap);
String processInstanceId = task.getProcessInstanceId();
runtimeService.setVariables(processInstanceId,actVariables);
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
// 发起节点 更新业务数据
updateNodeBusProcess(processInfoVO, processInstanceId);
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
// 审批节点
actFlowCommonService.completeTask(taskId, userId);
// 保存快照
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
if(!Objects.isNull(process)){
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(process.getPrcName());
basicProcessInfoDTO.setProcessType(process.getPrcType());
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
// 保存快照
processHandleService.saveToSnapshot(processInfoVO,userId);
}
}
@Override
public Result<String> checkVehicleModel(JSONObject jsonObject) {
if (Objects.isNull(jsonObject)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "vehicleModel");
}
String vehicleType = jsonObject.getString("vehicleType"); // 车辆形式
String variant = jsonObject.getString("variant"); // 变型
String version = jsonObject.getString("version"); // 改型
String vehicleModel = vehicleType + " " + variant + " " + version;
LambdaQueryWrapper<LawsVehicleInternationalLibrary> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(LawsVehicleInternationalLibrary::getIsFinish, Constant.IS_FINISH);
lambdaQueryWrapper.eq(LawsVehicleInternationalLibrary::getVehicleModel, vehicleModel);
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = lawsVehicleInternationalLibraryService.getOne(lambdaQueryWrapper, false);
if (!Objects.isNull(lawsVehicleInternationalLibrary)) {
String msg = (Objects.equals(LocaleContextHolder.getLocale(), Locale.ENGLISH) ?
"The vehicleModel: " + vehicleModel + "is already exist" : "整车型号:" + vehicleModel + "已存在");
Result<String> result = new Result<>();
result.setMessage(msg);
result.setSuccess(false); // 前端根据success判断是否通过验证
return result;
}else {
return Result.OK();
}
}
@Override
public ProcessInfoVO<ProcessVehicleInternationalReleaseVo> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
ProcessInfoVO<ProcessVehicleInternationalReleaseVo> result = new ProcessInfoVO<>();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
if(!Objects.isNull(process)){
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
basicProcessInfoDTO.setProcessName(process.getPrcName());
basicProcessInfoDTO.setProcessType(process.getPrcType());
basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId());
basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId());
basicProcessInfoDTO.setProcessDescription(process.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(process.getDueTime());
result.setBasicProcessInfoDTO(basicProcessInfoDTO);
}
// 获取流程实例数据
ProcessVehicleInternationalReleaseVo processVehicleInternationalReleaseVo = new ProcessVehicleInternationalReleaseVo();
// 流程表
LambdaQueryWrapper<ProcessVehicleInternationalRelease> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProcessVehicleInternationalRelease::getProcessInstanceId, processInstanceId);
ProcessVehicleInternationalRelease processVehicleInternationalRelease = getOne(lambdaQueryWrapper,false);
BeanUtils.copyProperties(processVehicleInternationalRelease, processVehicleInternationalReleaseVo);
// 业务主表
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = lawsVehicleInternationalLibraryService.getById(processVehicleInternationalRelease.getVehicleId());
BeanUtils.copyProperties(lawsVehicleInternationalLibrary, processVehicleInternationalReleaseVo);
// 业务子表
LambdaQueryWrapper<LawsVehicleInternationalLibrarySublist> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LawsVehicleInternationalLibrarySublist::getVehicleId, processVehicleInternationalRelease.getVehicleId());
LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist = lawsVehicleInternationalLibrarySublistService.getOne(queryWrapper);
BeanUtils.copyProperties(lawsVehicleInternationalLibrarySublist, processVehicleInternationalReleaseVo);
processVehicleInternationalReleaseVo.setId(processVehicleInternationalRelease.getId());
result.setBusinessInfoDTO(processVehicleInternationalReleaseVo);
return result;
}
private void updateNodeBusProcess(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO, String processInstanceId) {
ProcessVehicleInternationalReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO();
ProcessVehicleInternationalRelease processVehicleInternationalRelease = getOne(new LambdaQueryWrapper<ProcessVehicleInternationalRelease>().eq(ProcessVehicleInternationalRelease::getProcessInstanceId, processInstanceId), false);
String vehicleId = processVehicleInternationalRelease.getVehicleId();
// 更新数据到 流程表
ProcessVehicleInternationalRelease newProcessVehicleInternationalRelease = new ProcessVehicleInternationalRelease();
BeanUtils.copyProperties(businessInfoDTO, newProcessVehicleInternationalRelease);
newProcessVehicleInternationalRelease.setId(processVehicleInternationalRelease.getId());
this.updateById(newProcessVehicleInternationalRelease);
// 更新数据到 业务主表
LambdaUpdateWrapper<LawsVehicleInternationalLibrary> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(LawsVehicleInternationalLibrary::getId, vehicleId); // id
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getIsFinish, Constant.NOT_FINISH); // 是否完成流程
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getApplicant, UserUtils.getUserId()); // 申请人
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getRemark, businessInfoDTO.getRemark()); // 备注
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVehicleModel, null); // 整车型号
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVehicleType, null); // 车辆型式
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVariant, null); // 变型
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVersion, null); // 改型
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVinTopEight, null); // vin前八位
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVehicleBasis, null); // 整车型号编制依据
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getVinBasis, null); // vin编制依据
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getRegulatoryEngineer, null); // 法规工程师
lawsVehicleInternationalLibraryService.update(lambdaUpdateWrapper);
// 更新数据到 业务子表
LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist = new LawsVehicleInternationalLibrarySublist();
BeanUtils.copyProperties(businessInfoDTO, lawsVehicleInternationalLibrarySublist);
lawsVehicleInternationalLibrarySublist.setVehicleId(vehicleId);
LawsVehicleInternationalLibrarySublist oldLawsVehicleInternationalLibrarySublist = lawsVehicleInternationalLibrarySublistService.getOne(new LambdaQueryWrapper<LawsVehicleInternationalLibrarySublist>()
.eq(LawsVehicleInternationalLibrarySublist::getVehicleId, vehicleId), false);
lawsVehicleInternationalLibrarySublist.setId(oldLawsVehicleInternationalLibrarySublist.getId());
lawsVehicleInternationalLibrarySublistService.updateById(lawsVehicleInternationalLibrarySublist);
}
private void startRegulatoryProcess(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO, String processInstanceId) {
ProcessVehicleInternationalReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO();
if (!Objects.isNull(businessInfoDTO)) {
ProcessVehicleInternationalRelease processVehicleInternationalRelease = getOne(new LambdaQueryWrapper<ProcessVehicleInternationalRelease>().eq(ProcessVehicleInternationalRelease::getProcessInstanceId, processInstanceId), false);
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = lawsVehicleInternationalLibraryService.getById(processVehicleInternationalRelease.getVehicleId());
lawsVehicleInternationalLibrary.setVehicleBasis(businessInfoDTO.getVehicleBasis()); // 整车型号编制依据
lawsVehicleInternationalLibrary.setVehicleType(businessInfoDTO.getVehicleType()); // 车辆形式
lawsVehicleInternationalLibrary.setVariant(businessInfoDTO.getVariant()); // 变型
lawsVehicleInternationalLibrary.setVersion(businessInfoDTO.getVersion()); // 改型
// 整车型号由车辆形式、变型、改型组成
String vehicleModel = businessInfoDTO.getVehicleType() + " " + businessInfoDTO.getVariant() + " " + businessInfoDTO.getVersion();
lawsVehicleInternationalLibrary.setVehicleModel(vehicleModel); // 整车型号
lawsVehicleInternationalLibrary.setVinTopEight(businessInfoDTO.getVinTopEight()); // VIN前八位
lawsVehicleInternationalLibrary.setVinBasis(businessInfoDTO.getVinBasis()); // VIN编制依据
lawsVehicleInternationalLibrary.setRegulatoryEngineer(UserUtils.getUserId()); // 法规工程师
lawsVehicleInternationalLibraryService.updateById(lawsVehicleInternationalLibrary);
}
}
private Map<String, Object> changeVariables(Map<String, Object> userInfoMap) {
Map<String, Object> map = new HashMap<>();
userInfoMap.forEach((key, value) -> {
if(Objects.equals("checkUserLeader2List",key + "List")){
map.put(key + "List", value);
}
map.put(key, value);
});
return map;
}
private void startNodeBusProcess(ProcessInfoVO<ProcessVehicleInternationalReleaseVo> processInfoVO) {
ProcessVehicleInternationalReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO();
// 保存数据到 国际整车型号及VIN前八位管控库表
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = new LawsVehicleInternationalLibrary();
BeanUtils.copyProperties(businessInfoDTO, lawsVehicleInternationalLibrary);
lawsVehicleInternationalLibrary.setIsFinish(Constant.NOT_FINISH); // 流程未完成
lawsVehicleInternationalLibrary.setApplicant(UserUtils.getUserId()); // 流程发起人
lawsVehicleInternationalLibraryService.save(lawsVehicleInternationalLibrary);
String vehicleId = lawsVehicleInternationalLibrary.getId(); // 主表id
// 保存数据到 国际整车型号及VIN前八位管控库子表
LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist = new LawsVehicleInternationalLibrarySublist();
BeanUtils.copyProperties(businessInfoDTO, lawsVehicleInternationalLibrarySublist);
lawsVehicleInternationalLibrarySublist.setVehicleId(vehicleId);
lawsVehicleInternationalLibrarySublistService.save(lawsVehicleInternationalLibrarySublist);
// 保存数据到 国内整车型号及VIN前八位管控库流程表
ProcessVehicleInternationalRelease processVehicleInternationalRelease = new ProcessVehicleInternationalRelease();
processVehicleInternationalRelease.setVehicleId(vehicleId);
processVehicleInternationalRelease.setProcessInstanceId(businessInfoDTO.getProcessInstanceId());
processVehicleInternationalRelease.setCopyUser(businessInfoDTO.getCopyUser());
this.save(processVehicleInternationalRelease);
}
private Map<String, Object> setVariables(Map<String, Object> userInfoMap) {
Map<String, Object> map = new HashMap<>();
// 人员信息
userInfoMap.forEach((key, value) -> {
if(Objects.equals("checkUserLeader1List",key + "List") ||
Objects.equals("checkUserLeader2List",key + "List") ||
Objects.equals("checkUserLeader3List",key + "List") ||
Objects.equals("checkUserLeader4List",key + "List")){
map.put(key, value);
map.put(key + "List", Arrays.asList(value.toString().split(",")));
return;
}
map.put(key, value);
});
return map;
}
private StringBuilder validatorExcel(List<ProcessVehicleInternationalExcelVo> excelList) {
StringBuilder msg = new StringBuilder();
for (int i = 0; i < excelList.size(); i++) {
ProcessVehicleInternationalExcelVo excelVo = excelList.get(i);
StringBuilder msgSub = new StringBuilder();
// 校验车型代码
if (StringUtils.isBlank(excelVo.getVehicleTypeCode())) {
msgSub.append(getErrorMsg(i, "车型代码不能为空;"));
}
// 校验动力类型
if (StringUtils.isBlank(excelVo.getPowerType())) {
msgSub.append(getErrorMsg(i, "动力类型不能为空;"));
}
// 校验发动机型号
if (StringUtils.isNotBlank(excelVo.getEngineType())) {
}
// 校验驱动电机型号
if (StringUtils.isNotBlank(excelVo.getDriveMotorModel())) {
}
// 校验动力电池型号
if (StringUtils.isNotBlank(excelVo.getPowerBatteryModel())) {
}
// 校验变速器型号
if (StringUtils.isBlank(excelVo.getTransmissionModel())) {
msgSub.append(getErrorMsg(i, "变速器型号不能为空;"));
}
// 校验车身形式
if (StringUtils.isBlank(excelVo.getBodyType())) {
msgSub.append(getErrorMsg(i, "车身形式不能为空;"));
}
// 校验驱动形式
if (StringUtils.isBlank(excelVo.getDrivingType())) {
msgSub.append(getErrorMsg(i, "驱动形式不能为空;"));
}
// 校验驱动轴数量
if (StringUtils.isBlank(excelVo.getDrivingShaftsNumber())) {
msgSub.append(getErrorMsg(i, "驱动轴数量不能为空;"));
}
// 校验转向型式
if (StringUtils.isBlank(excelVo.getSteeringType())) {
msgSub.append(getErrorMsg(i, "转向型式不能为空;"));
}
// 校验座位数量
if (StringUtils.isBlank(excelVo.getSeatsNumber())) {
msgSub.append(getErrorMsg(i, "座位数量不能为空;"));
}
// 校验技术允许最大满载质量(Kg)
if (StringUtils.isBlank(excelVo.getAllowedMaxFullLoad())) {
msgSub.append(getErrorMsg(i, "技术允许最大满载质量(Kg)不能为空;"));
}else if (excelVo.getAllowedMaxFullLoad().length() > 50) {
msgSub.append(getErrorMsg(i, "技术允许最大满载质量(Kg)字符长度不能超过50;"));
}
// 校验车辆外廓尺寸(长x宽X高)
if (StringUtils.isBlank(excelVo.getCarOutSize())) {
msgSub.append(getErrorMsg(i, "校验车辆外廓尺寸(长x宽X高)不能为空;"));
}else if (excelVo.getCarOutSize().length() > 50) {
msgSub.append(getErrorMsg(i, "校验车辆外廓尺寸(长x宽X高)字符长度不能超过50;"));
}
// 校验发动机工作原理
if (StringUtils.isBlank(excelVo.getEngineWorkingPrinciple())) {
msgSub.append(getErrorMsg(i, "发动机工作原理不能为空;"));
}
// 校验燃料类型
if (StringUtils.isBlank(excelVo.getFuelType())) {
msgSub.append(getErrorMsg(i, "燃料类型不能为空;"));
}
// 校验发动机排量(L
if (StringUtils.isNotBlank(excelVo.getEngineCapacity())) {
}
// 校验额定转速(rpm
if (StringUtils.isNotBlank(excelVo.getRatedSpeed()) && excelVo.getRatedSpeed().length() > 50) {
msgSub.append(getErrorMsg(i, "额定转速(rpm)字符长度不能超过50;"));
}
// 校验发动机最大净功率(kW
if (StringUtils.isNotBlank(excelVo.getEngineMaxPower()) && excelVo.getEngineMaxPower().length() > 50) {
msgSub.append(getErrorMsg(i, "发动机最大净功率(kw)字符长度不能超过50;"));
}
// 校验驱动电机峰值功率(kW
if (StringUtils.isNotBlank(excelVo.getDriveMotorPeakPower()) && excelVo.getDriveMotorPeakPower().length() > 50) {
msgSub.append(getErrorMsg(i, "发动机最大净功率(kw)字符长度不能超过50;"));
}
// 校验排放水平
if (StringUtils.isNotBlank(excelVo.getEmissionLevel())) {
}
// 校验能耗(L/100km or kwh/100km
if (StringUtils.isBlank(excelVo.getEnergyConsumption())) {
msgSub.append(getErrorMsg(i, "能耗(L/100km or kwh/100km)不能为空;"));
}
// 校验储能装置种类
if (StringUtils.isNotBlank(excelVo.getEnergyStorageDevices())) {
}
// 校验变速器型式
if (StringUtils.isBlank(excelVo.getTransmissionType())) {
msgSub.append(getErrorMsg(i, "变速器型式不能为空;"));
}
// 校验变速器档位数
if (StringUtils.isBlank(excelVo.getTransmissionGearNumber())) {
msgSub.append(getErrorMsg(i, "变速器档位数不能为空;"));
}
// 校验变速器是否带手动模式
if (StringUtils.isBlank(excelVo.getTransmissionIsHasManual())) {
msgSub.append(getErrorMsg(i, "变速器是否带手动模式不能为空;"));
}
// 校验前排正面气囊
if (StringUtils.isBlank(excelVo.getFrontFrontAirbag())) {
msgSub.append(getErrorMsg(i, "前排正面气囊不能为空;"));
}
// 校验前排座椅侧气囊
if (StringUtils.isBlank(excelVo.getFrontSeatSideAirbags())) {
msgSub.append(getErrorMsg(i, "前排座椅侧气囊不能为空;"));
}
//校验销售区域
if (StringUtils.isBlank(excelVo.getSalesArea())) {
msgSub.append(getErrorMsg(i, "前销售区域不能为空;"));
}
// 校验品牌
if (StringUtils.isBlank(excelVo.getBrand())) {
msgSub.append(getErrorMsg(i, "品牌不能为空;"));
}
if (msgSub.length() > 0) {
msg.append(msgSub).append(NEWLINE_CHARACTER);
}
}
return msg;
}
// 校验表头
private void excelHeadVerify(Class<?> clazz, MultipartFile file) {
try {
if (!(boolean) ImportExcelUtil.checkTemplateTitle(file, clazz, 0, 0)){
throw new JeroBootException(ResultCommon.IMPORT_TEMPLATE_ERROR);
}
}catch (Exception e) {
e.printStackTrace();
throw new JeroBootException(ResultCommon.IMPORT_TEMPLATE_ERROR);
}
}
// 错误消息格式化
private String getErrorMsg(int rowIndex, String errorMsg) {
return "" + (rowIndex + 2) + "" + errorMsg;
}
}
@@ -0,0 +1,196 @@
package com.jero.modules.activiti.process.vehicleinterntional.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class ProcessVehicleInternationalReleaseVo {
@ApiModelProperty(value = "主键")
private String id;
@ApiModelProperty(value = "流程实例Id")
private String processInstanceId;
@ApiModelProperty(value = "抄送人员")
private String copyUser;
@ApiModelProperty(value = "整车型号")
@Excel(name = "整车型号", width = 20)
private String vehicleModel;
@ApiModelProperty(value = "车辆型式")
@Excel(name = "车辆型式", width = 20)
private String vehicleType;
@ApiModelProperty(value = "变型(variant)")
@Excel(name = "变型(variant)", width = 20)
private String variant;
@ApiModelProperty(value = "改型(version)")
@Excel(name = "改型(version)", width = 20)
private String version;
@ApiModelProperty(value = "vin前八位")
@Excel(name = "vin前八位", width = 20)
private String vinTopEight;
@ApiModelProperty(value = "整车型号编制依据")
@Excel(name = "整车型号编制依据", width = 20)
private String vehicleBasis;
@ApiModelProperty(value = "vin编制依据")
@Excel(name = "vin编制依据", width = 20)
private String vinBasis;
@ApiModelProperty(value = "代替整车型号")
@Excel(name = "代替整车型号", width = 20)
private String insteadVehicleModel;
@ApiModelProperty(value = "申请人")
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname")
@Excel(name = "申请人", width = 20, dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')")
private String applicant;
@ApiModelProperty(value = "完成日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Excel(name = "完成日期", width = 20, format = "yyyy-MM-dd")
private Date finishDate;
@ApiModelProperty(value = "法规工程师")
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname")
@Excel(name = "法规工程师", width = 20, dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')")
private String regulatoryEngineer;
@ApiModelProperty(value = "状态 1-生效 2-作废")
@Dict(dicCode = "dvm_status")
@Excel(name = "状态", width = 20, dicCode = "dvm_status")
private String state;
@ApiModelProperty(value = "车型代码")
@Excel(name = "车型代码", width = 20)
private String vehicleTypeCode;
@ApiModelProperty(value = "动力类型")
@Excel(name = "动力类型", width = 20)
private String powerType;
@ApiModelProperty(value = "发动机型号")
@Excel(name = "发动机型号", width = 20)
private String engineType;
@ApiModelProperty(value = "驱动电机型号")
@Excel(name = "驱动电机型号", width = 20)
private String driveMotorModel;
@ApiModelProperty(value = "动力电池型号")
@Excel(name = "动力电池型号", width = 20)
private String powerBatteryModel;
@ApiModelProperty(value = "变速器型号")
@Excel(name = "变速器型号", width = 20)
private String transmissionModel;
@ApiModelProperty(value = "车身形式")
@Excel(name = "车身形式", width = 20)
private String bodyType;
@ApiModelProperty(value = "驱动型式")
@Excel(name = "驱动型式", width = 20)
private String drivingType;
@ApiModelProperty(value = "驱动轴数量")
@Excel(name = "驱动轴数量", width = 20)
private String drivingShaftsNumber;
@ApiModelProperty(value = "转向型式")
@Excel(name = "转向型式", width = 20)
private String steeringType;
@ApiModelProperty(value = "座位数量")
@Excel(name = "座位数量", width = 20)
private String seatsNumber;
@ApiModelProperty(value = "技术允许最大满载质量(Kg)")
@Excel(name = "技术允许最大满载质量(Kg)", width = 20)
private String allowedMaxFullLoad;
@ApiModelProperty(value = "车辆外廓尺寸(长*宽*高)")
@Excel(name = "车辆外廓尺寸(长*宽*高)", width = 20)
private String carOutSize;
@ApiModelProperty(value = "发动机工作原理")
@Excel(name = "发动机工作原理", width = 20)
private String engineWorkingPrinciple;
@ApiModelProperty(value = "燃料类型")
@Excel(name = "燃料类型", width = 20)
private String fuelType;
@ApiModelProperty(value = "发动机排量(L)")
@Excel(name = "发动机排量(L)", width = 20)
private String engineCapacity;
@ApiModelProperty(value = "额定转速(rpm)")
@Excel(name = "额定转速(rpm)", width = 20)
private String ratedSpeed;
@ApiModelProperty(value = "发动机最大净功率(kw)")
@Excel(name = "发动机最大净功率(kw)", width = 20)
private String engineMaxPower;
@ApiModelProperty(value = "驱动电机峰值功率(kw)")
@Excel(name = "驱动电机峰值功率(kw)", width = 20)
private String driveMotorPeakPower;
@ApiModelProperty(value = "排放水平")
@Excel(name = "排放水平", width = 20)
private String emissionLevel;
@ApiModelProperty(value = "能耗(L/100km or kwh/100km)")
@Excel(name = "能耗(L/100km or kwh/100km)", width = 20)
private String energyConsumption;
@ApiModelProperty(value = "储能装置种类")
@Excel(name = "储能装置种类", width = 20)
private String energyStorageDevices;
@ApiModelProperty(value = "变速器型式")
@Excel(name = "变速器型式", width = 20)
private String transmissionType;
@ApiModelProperty(value = "变速器档位数")
@Excel(name = "变速器档位数", width = 20)
private String transmissionGearNumber;
@ApiModelProperty(value = "变速器是否带手动模式")
@Excel(name = "变速器是否带手动模式", width = 20)
private String transmissionIsHasManual;
@ApiModelProperty(value = "前排正面气囊")
@Excel(name = "前排正面气囊", width = 20)
private String frontFrontAirbag;
@ApiModelProperty(value = "前排座椅侧气囊")
@Excel(name = "前排座椅侧气囊", width = 20)
private String frontSeatSideAirbags;
@ApiModelProperty(value = "销售区域")
@Excel(name = "销售区域", width = 20)
private String salesArea;
@ApiModelProperty(value = "品牌")
@Excel(name = "品牌", width = 20)
private String brand;
@ApiModelProperty(value = "备注")
@Excel(name = "备注", width = 20)
private String remark;
}
@@ -0,0 +1,126 @@
package com.jero.modules.activiti.process.vehicleinterntional.vo.excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
@Data
public class ProcessVehicleInternationalExcelVo {
@ApiModelProperty(value = "车型代码")
@Excel(name = "车型代码", width = 20)
private String vehicleTypeCode;
@ApiModelProperty(value = "动力类型")
@Excel(name = "动力类型", width = 20)
private String powerType;
@ApiModelProperty(value = "发动机型号")
@Excel(name = "发动机型号", width = 20)
private String engineType;
@ApiModelProperty(value = "驱动电机型号")
@Excel(name = "驱动电机型号", width = 20)
private String driveMotorModel;
@ApiModelProperty(value = "动力电池型号")
@Excel(name = "动力电池型号", width = 20)
private String powerBatteryModel;
@ApiModelProperty(value = "变速器型号")
@Excel(name = "变速器型号", width = 20)
private String transmissionModel;
@ApiModelProperty(value = "车身形式")
@Excel(name = "车身形式", width = 20)
private String bodyType;
@ApiModelProperty(value = "驱动形式")
@Excel(name = "驱动形式", width = 20)
private String drivingType;
@ApiModelProperty(value = "驱动轴数量")
@Excel(name = "驱动轴数量", width = 20)
private String drivingShaftsNumber;
@ApiModelProperty(value = "转向型式")
@Excel(name = "转向型式", width = 20)
private String steeringType;
@ApiModelProperty(value = "座位数量")
@Excel(name = "座位数量", width = 20)
private String seatsNumber;
@ApiModelProperty(value = "技术允许最大满载质量(Kg)")
@Excel(name = "技术允许最大满载质量(Kg)", width = 20)
private String allowedMaxFullLoad;
@ApiModelProperty(value = "车辆外廓尺寸(长*宽*高)")
@Excel(name = "车辆外廓尺寸(长*宽*高)", width = 20)
private String carOutSize;
@ApiModelProperty(value = "发动机工作原理")
@Excel(name = "发动机工作原理", width = 20)
private String engineWorkingPrinciple;
@ApiModelProperty(value = "燃料类型")
@Excel(name = "燃料类型", width = 20)
private String fuelType;
@ApiModelProperty(value = "发动机排量(L)")
@Excel(name = "发动机排量(L)", width = 20)
private String engineCapacity;
@ApiModelProperty(value = "额定转速(rpm)")
@Excel(name = "额定转速(rpm)", width = 20)
private String ratedSpeed;
@ApiModelProperty(value = "发动机最大净功率(kw)")
@Excel(name = "发动机最大净功率(kw)", width = 20)
private String engineMaxPower;
@ApiModelProperty(value = "驱动电机峰值功率(kw)")
@Excel(name = "驱动电机峰值功率(kw)", width = 20)
private String driveMotorPeakPower;
@ApiModelProperty(value = "排放水平")
@Excel(name = "排放水平", width = 20)
private String emissionLevel;
@ApiModelProperty(value = "能耗(L/100km or kwh/100km)")
@Excel(name = "能耗(L/100km or kwh/100km)", width = 20)
private String energyConsumption;
@ApiModelProperty(value = "储能装置种类")
@Excel(name = "储能装置种类", width = 20)
private String energyStorageDevices;
@ApiModelProperty(value = "变速器型式")
@Excel(name = "变速器型式", width = 20)
private String transmissionType;
@ApiModelProperty(value = "变速器档位数")
@Excel(name = "变速器档位数", width = 20)
private String transmissionGearNumber;
@ApiModelProperty(value = "变速器是否带手动模式")
@Excel(name = "变速器是否带手动模式", width = 20)
private String transmissionIsHasManual;
@ApiModelProperty(value = "前排正面气囊")
@Excel(name = "前排正面气囊", width = 20)
private String frontFrontAirbag;
@ApiModelProperty(value = "前排座椅侧气囊")
@Excel(name = "前排座椅侧气囊", width = 20)
private String frontSeatSideAirbags;
@ApiModelProperty(value = "销售区域")
@Excel(name = "销售区域", width = 20)
private String salesArea;
@ApiModelProperty(value = "品牌")
@Excel(name = "品牌", width = 20)
private String brand;
}
@@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletRequest;
*/
@Api(tags="国内整车型号及VIN前八位管控库")
@RestController
@RequestMapping("/domesticVehicle/library")
@RequestMapping("/laws/domesticVehicle/library")
@Slf4j
public class LawsVehicleDomesticLibraryController {
@@ -0,0 +1,109 @@
package com.jero.modules.laws.businessSupport.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.modules.activiti.process.vehicleinterntional.vo.ProcessVehicleInternationalReleaseVo;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrary;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibraryService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 国际整车型号及VIN前八位管控库 前端控制器
* </p>
*
* @author sz
* @since 2024-09-29
*/
@RestController
@RequestMapping("/laws/internationalVehicle/library")
public class LawsVehicleInternationalLibraryController {
@Resource
private ILawsVehicleInternationalLibraryService lawsVehicleInternationalLibraryService;
/**
* 分页列表查询
*
* @return
*/
@AutoLog(value = "国际整车型号及VIN前八位管控库-分页列表查询")
@ApiOperation(value="国际整车型号及VIN前八位管控库-分页列表查询", notes="国际整车型号及VIN前八位管控库-分页列表查询")
@GetMapping(value = "/page")
// @RequiresPermissions("companyStandardStatistics:search")
public Result<?> queryPageList(LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
IPage<LawsVehicleInternationalLibrary> pageList= lawsVehicleInternationalLibraryService.queryPageList(lawsVehicleInternationalLibrary, pageNo, pageSize, req);
return Result.OK(pageList);
}
/**
* 查看
*
* @param jsonObject
* @return
*/
@AutoLog(value = "国际整车型号及VIN前八位管控库-查看")
@ApiOperation(value="国际整车型号及VIN前八位管控库-查看", notes="国际整车型号及VIN前八位管控库-查看")
@PostMapping(value = "/queryOne")
@Translation
// @RequiresPermissions("companyStandardStatistics:edit")
public Result<?> queryOne(@RequestBody JSONObject jsonObject) {
String id = jsonObject.getString("id");
return lawsVehicleInternationalLibraryService.queryOne(id);
}
/**
* 删除
*/
@AutoLog(value = "国际整车型号及VIN前八位管控库-删除")
@ApiOperation(value="国际整车型号及VIN前八位管控库-删除", notes="国际整车型号及VIN前八位管控库-删除")
@PostMapping(value = "/delete")
// @RequiresPermissions("companyStandardStatistics:delete")
public Result<?> delete(@RequestBody JSONObject jsonObject) {
return lawsVehicleInternationalLibraryService.delete(jsonObject);
}
/**
* 作废
*/
@AutoLog(value = "国际整车型号及VIN前八位管控库-作废")
@ApiOperation(value="国际整车型号及VIN前八位管控库-作废", notes="国际整车型号及VIN前八位管控库-作废")
@PostMapping(value = "/abolish")
// @RequiresPermissions("companyStandardStatistics:delete")
public Result<?> abolish(@RequestBody JSONObject jsonObject) {
return lawsVehicleInternationalLibraryService.abolish(jsonObject);
}
/**
* 替换
*/
@AutoLog(value = "国际整车型号及VIN前八位管控库-替换")
@ApiOperation(value="国际整车型号及VIN前八位管控库-替换", notes="国际整车型号及VIN前八位管控库-替换")
@PostMapping(value = "/replace")
// @RequiresPermissions("companyStandardStatistics:delete")
public Result<?> replace(@RequestBody ProcessVehicleInternationalReleaseVo processVehicleInternationalReleaseVo) {
return lawsVehicleInternationalLibraryService.replace(processVehicleInternationalReleaseVo);
}
/**
* 导出
*/
@AutoLog(value = "国际整车型号及VIN前八位管控库-导出")
@ApiOperation(value="国际整车型号及VIN前八位管控库-导出", notes="国际整车型号及VIN前八位管控库-导出")
@GetMapping(value = "/exportXls")
// @RequiresPermissions("companyStandardStatistics:delete")
public ModelAndView exportXls(HttpServletRequest request) {
return lawsVehicleInternationalLibraryService.exportXls(request);
}
}
@@ -0,0 +1,20 @@
package com.jero.modules.laws.businessSupport.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 国际整车型号及VIN前八位管控库-子表 前端控制器
* </p>
*
* @author sz
* @since 2024-09-29
*/
@RestController
@RequestMapping("/laws-vehicle-international-library-sublist")
public class LawsVehicleInternationalLibrarySublistController {
}
@@ -96,10 +96,6 @@ public class LawsVehicleDomesticLibrary implements Serializable {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@TableField(exist = false)
@ApiModelProperty(value = "车型代码")
private String vehicleTypeCode;
@TableField(exist = false)
@ApiModelProperty(value = "子表数据")
private LawsVehicleDomesticLibrarySublist lawsVehicleDomesticLibrarySublist;
@@ -0,0 +1,112 @@
package com.jero.modules.laws.businessSupport.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
/**
* <p>
* 国际整车型号及VIN前八位管控库
* </p>
*
* @author sz
* @since 2024-09-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("laws_vehicle_international_library")
@ApiModel(value="LawsVehicleInternationalLibrary对象", description="国际整车型号及VIN前八位管控库")
public class LawsVehicleInternationalLibrary implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "整车型号")
private String vehicleModel;
@ApiModelProperty(value = "车辆型式")
private String vehicleType;
@ApiModelProperty(value = "变型")
private String variant;
@ApiModelProperty(value = "改型")
private String version;
@ApiModelProperty(value = "vin前八位")
private String vinTopEight;
@ApiModelProperty(value = "整车型号编制依据")
private String vehicleBasis;
@ApiModelProperty(value = "vin编制依据")
private String vinBasis;
@ApiModelProperty(value = "代替整车型号")
private String insteadVehicleModel;
@ApiModelProperty(value = "申请人")
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname")
private String applicant;
@ApiModelProperty(value = "完成日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date finishDate;
@ApiModelProperty(value = "法规工程师")
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname")
private String regulatoryEngineer;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "流程是否完成 0-未完成 1-已完成")
private String isFinish;
@ApiModelProperty(value = "状态 1-生效 2-作废")
@Dict(dicCode = "dvm_status")
private String state;
@ApiModelProperty(value = "逻辑删除")
@TableLogic(value = "0", delval = "1")
private Integer delFlag;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "创建时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "更新时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@TableField(exist = false)
@ApiModelProperty(value = "子表数据")
private LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist;
}
@@ -0,0 +1,151 @@
package com.jero.modules.laws.businessSupport.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
/**
* <p>
* 国际整车型号及VIN前八位管控库-子表
* </p>
*
* @author sz
* @since 2024-09-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("laws_vehicle_international_library_sublist")
@ApiModel(value="LawsVehicleInternationalLibrarySublist对象", description="国际整车型号及VIN前八位管控库-子表")
public class LawsVehicleInternationalLibrarySublist implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "整车型号id")
private String vehicleId;
@ApiModelProperty(value = "车型代码")
private String vehicleTypeCode;
@ApiModelProperty(value = "动力类型")
private String powerType;
@ApiModelProperty(value = "发动机型号")
private String engineType;
@ApiModelProperty(value = "驱动电机型号")
private String driveMotorModel;
@ApiModelProperty(value = "动力电池型号")
private String powerBatteryModel;
@ApiModelProperty(value = "变速器型号")
private String transmissionModel;
@ApiModelProperty(value = "车身形式")
private String bodyType;
@ApiModelProperty(value = "驱动型式")
private String drivingType;
@ApiModelProperty(value = "驱动轴数量")
private String drivingShaftsNumber;
@ApiModelProperty(value = "转向型式")
private String steeringType;
@ApiModelProperty(value = "座位数量")
private String seatsNumber;
@ApiModelProperty(value = "技术允许最大满载质量(Kg)")
private String allowedMaxFullLoad;
@ApiModelProperty(value = "车辆外廓尺寸(长*宽*高)")
private String carOutSize;
@ApiModelProperty(value = "发动机工作原理")
private String engineWorkingPrinciple;
@ApiModelProperty(value = "燃料类型")
private String fuelType;
@ApiModelProperty(value = "发动机排量(L)")
private String engineCapacity;
@ApiModelProperty(value = "额定转速(rpm")
private String ratedSpeed;
@ApiModelProperty(value = "发动机最大净功率(kW")
private String engineMaxPower;
@ApiModelProperty(value = "驱动电机峰值功率(kW")
private String driveMotorPeakPower;
@ApiModelProperty(value = "排放水平")
private String emissionLevel;
@ApiModelProperty(value = "能耗(L/100km or kwh/100km")
private String energyConsumption;
@ApiModelProperty(value = "储能装置种类")
private String energyStorageDevices;
@ApiModelProperty(value = "变速器型式")
private String transmissionType;
@ApiModelProperty(value = "变速器档位数")
private String transmissionGearNumber;
@ApiModelProperty(value = "变速器是否带手动模式")
private String transmissionIsHasManual;
@ApiModelProperty(value = "前排正面气囊")
private String frontFrontAirbag;
@ApiModelProperty(value = "前排座椅侧气囊")
private String frontSeatSideAirbags;
@ApiModelProperty(value = "销售区域")
private String salesArea;
@ApiModelProperty(value = "品牌")
private String brand;
@ApiModelProperty(value = "逻辑删除")
@TableLogic(value = "0", delval = "1")
private Integer delFlag;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "创建时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "更新时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,16 @@
package com.jero.modules.laws.businessSupport.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrary;
/**
* <p>
* 国际整车型号及VIN前八位管控库 Mapper 接口
* </p>
*
* @author sz
* @since 2024-09-29
*/
public interface LawsVehicleInternationalLibraryMapper extends BaseMapper<LawsVehicleInternationalLibrary> {
}
@@ -0,0 +1,17 @@
package com.jero.modules.laws.businessSupport.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrarySublist;
/**
* <p>
* 国际整车型号及VIN前八位管控库-子表 Mapper 接口
* </p>
*
* @author sz
* @since 2024-09-29
*/
public interface LawsVehicleInternationalLibrarySublistMapper extends BaseMapper<LawsVehicleInternationalLibrarySublist> {
}
@@ -0,0 +1,5 @@
<?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="com.jero.modules.laws.businessSupport.mapper.LawsVehicleInternationalLibraryMapper">
</mapper>
@@ -0,0 +1,5 @@
<?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="com.jero.modules.laws.businessSupport.mapper.LawsVehicleInternationalLibrarySublistMapper">
</mapper>
@@ -0,0 +1,34 @@
package com.jero.modules.laws.businessSupport.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.common.api.vo.Result;
import com.jero.modules.activiti.process.vehicleinterntional.vo.ProcessVehicleInternationalReleaseVo;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrary;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 国际整车型号及VIN前八位管控库 服务类
* </p>
*
* @author sz
* @since 2024-09-29
*/
public interface ILawsVehicleInternationalLibraryService extends IService<LawsVehicleInternationalLibrary> {
IPage<LawsVehicleInternationalLibrary> queryPageList(LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary, Integer pageNo, Integer pageSize, HttpServletRequest req);
Result<?> queryOne(String id);
Result<?> delete(JSONObject jsonObject);
Result<?> abolish(JSONObject jsonObject);
Result<?> replace(ProcessVehicleInternationalReleaseVo processVehicleInternationalReleaseVo);
ModelAndView exportXls(HttpServletRequest request);
}
@@ -0,0 +1,16 @@
package com.jero.modules.laws.businessSupport.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrarySublist;
/**
* <p>
* 国际整车型号及VIN前八位管控库-子表 服务类
* </p>
*
* @author sz
* @since 2024-09-29
*/
public interface ILawsVehicleInternationalLibrarySublistService extends IService<LawsVehicleInternationalLibrarySublist> {
}
@@ -67,7 +67,7 @@ public class LawsVehicleDomesticLibraryServiceImpl extends ServiceImpl<LawsVehic
}
LawsVehicleDomesticLibrary lawsVehicleDomesticLibrary = getById(id);
if (Objects.isNull(lawsVehicleDomesticLibrary)) {
throw new JeroBootException(ResultCommon.PARAMETERS_CANNOT_BE_NULL);
throw new JeroBootException(ResultCommon.NO_CORRESPONDING_RECORD_FOUND);
}
LambdaQueryWrapper<LawsVehicleDomesticLibrarySublist> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LawsVehicleDomesticLibrarySublist::getVehicleId, id);
@@ -0,0 +1,206 @@
package com.jero.modules.laws.businessSupport.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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 com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.util.oConvertUtils;
import com.jero.modules.activiti.process.vehicleinterntional.entity.ProcessVehicleInternationalRelease;
import com.jero.modules.activiti.process.vehicleinterntional.vo.ProcessVehicleInternationalReleaseVo;
import com.jero.modules.laws.businessSupport.common.Constant;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrary;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrarySublist;
import com.jero.modules.laws.businessSupport.mapper.LawsVehicleInternationalLibraryMapper;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibraryService;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibrarySublistService;
import com.jero.modules.laws.club.config.CustomExcelExportStyler;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.BeanUtils;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 国际整车型号及VIN前八位管控库 服务实现类
* </p>
*
* @author sz
* @since 2024-09-29
*/
@Service
public class LawsVehicleInternationalLibraryServiceImpl extends ServiceImpl<LawsVehicleInternationalLibraryMapper, LawsVehicleInternationalLibrary> implements ILawsVehicleInternationalLibraryService {
@Resource
private ILawsVehicleInternationalLibrarySublistService lawsVehicleInternationalLibrarySublistService;
@Override
public IPage<LawsVehicleInternationalLibrary> queryPageList(LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary, Integer pageNo, Integer pageSize, HttpServletRequest req) {
LambdaQueryWrapper<LawsVehicleInternationalLibrary> lambdaQueryWrapper = generationWrapper(req);
Page<LawsVehicleInternationalLibrary> page = new Page<>(pageNo, pageSize);
Page<LawsVehicleInternationalLibrary> result = page(page, lambdaQueryWrapper);
return result;
}
@Override
public Result<?> queryOne(String id) {
if (StringUtils.isBlank(id)) {
throw new JeroBootException(ResultCommon.PARAMETERS_CANNOT_BE_NULL);
}
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = getById(id);
if (Objects.isNull(lawsVehicleInternationalLibrary)) {
throw new JeroBootException(ResultCommon.NO_CORRESPONDING_RECORD_FOUND);
}
LambdaQueryWrapper<LawsVehicleInternationalLibrarySublist> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LawsVehicleInternationalLibrarySublist::getVehicleId, id);
LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist = lawsVehicleInternationalLibrarySublistService.getOne(queryWrapper, false);
ProcessVehicleInternationalReleaseVo processVehicleInternationalReleaseVo = new ProcessVehicleInternationalReleaseVo();
BeanUtils.copyProperties(lawsVehicleInternationalLibrary, processVehicleInternationalReleaseVo);
BeanUtils.copyProperties(lawsVehicleInternationalLibrarySublist, processVehicleInternationalReleaseVo);
processVehicleInternationalReleaseVo.setId(lawsVehicleInternationalLibrary.getId());
return Result.OK(processVehicleInternationalReleaseVo);
}
@Override
public Result<?> delete(JSONObject jsonObject) {
String id = jsonObject.getString("id");
if(StringUtils.isBlank(id)){
return Result.error(ResultCommon.PLEASE_SELECT_DATA);
}
// 删除主表数据
removeById(id);
// 删除子表数据
lawsVehicleInternationalLibrarySublistService.remove(new LambdaQueryWrapper<LawsVehicleInternationalLibrarySublist>().eq(LawsVehicleInternationalLibrarySublist::getVehicleId, id));
return Result.OK(ResultCommon.OK);
}
@Override
public Result<?> abolish(JSONObject jsonObject) {
String id = jsonObject.getString("id");
if(StringUtils.isBlank(id)){
return Result.error(ResultCommon.PLEASE_SELECT_DATA);
}
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = getById(id);
if (Constant.ABOLISH.equals(lawsVehicleInternationalLibrary.getState())) {
throw new JeroBootException((Objects.equals(LocaleContextHolder.getLocale(), Locale.ENGLISH) ?
"The status is already abolished" : "状态已经是废止了"));
}
lawsVehicleInternationalLibrary.setState(Constant.ABOLISH);
updateById(lawsVehicleInternationalLibrary);
return Result.OK();
}
@Override
public Result<?> replace(ProcessVehicleInternationalReleaseVo processVehicleInternationalReleaseVo) {
// 原数据
String oldId = processVehicleInternationalReleaseVo.getId();
// 原数据的整车型号
LawsVehicleInternationalLibrary oldMainData = getById(oldId);
if (Objects.isNull(oldMainData)) {
throw new JeroBootException(ResultCommon.PARAMETERS_CANNOT_BE_NULL);
}
String oldVehicleModel = oldMainData.getVehicleModel();
// 新数据
LawsVehicleInternationalLibrary newMainData = new LawsVehicleInternationalLibrary();
BeanUtils.copyProperties(processVehicleInternationalReleaseVo, newMainData);
newMainData.setState(Constant.TAKE_EFFECT);
newMainData.setIsFinish(Constant.IS_FINISH);
newMainData.setInsteadVehicleModel(oldVehicleModel);
newMainData.setId(null);
LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist = new LawsVehicleInternationalLibrarySublist();
BeanUtils.copyProperties(processVehicleInternationalReleaseVo, lawsVehicleInternationalLibrarySublist);
// 保存新数据
save(newMainData);
String vehicleId = newMainData.getId();
lawsVehicleInternationalLibrarySublist.setId(null);
lawsVehicleInternationalLibrarySublist.setVehicleId(vehicleId);
lawsVehicleInternationalLibrarySublistService.save(lawsVehicleInternationalLibrarySublist);
// 修改旧数据的状态为作废
LambdaUpdateWrapper<LawsVehicleInternationalLibrary> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(LawsVehicleInternationalLibrary::getId, oldId);
lambdaUpdateWrapper.set(LawsVehicleInternationalLibrary::getState, Constant.ABOLISH);
update(lambdaUpdateWrapper);
return Result.OK();
}
@Override
public ModelAndView exportXls(HttpServletRequest request) {
LambdaQueryWrapper<LawsVehicleInternationalLibrary> lambdaQueryWrapper = generationWrapper(request);
String selections = request.getParameter("selections");
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
if(!oConvertUtils.isEmpty(selections)){
lambdaQueryWrapper.in(LawsVehicleInternationalLibrary::getId, Arrays.asList(selections.split(",")));
}
List<LawsVehicleInternationalLibrary> list = list(lambdaQueryWrapper);
List<String> collectIds = list.stream().map(LawsVehicleInternationalLibrary::getId).collect(Collectors.toList());
List<ProcessVehicleInternationalReleaseVo> excelList = new ArrayList<>();
for (String collectId : collectIds) {
LawsVehicleInternationalLibrary lawsVehicleInternationalLibrary = getById(collectId);
LambdaQueryWrapper<LawsVehicleInternationalLibrarySublist> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LawsVehicleInternationalLibrarySublist::getVehicleId, collectId);
LawsVehicleInternationalLibrarySublist lawsVehicleInternationalLibrarySublist = lawsVehicleInternationalLibrarySublistService.getOne(queryWrapper, false);
ProcessVehicleInternationalReleaseVo processVehicleInternationalReleaseVo = new ProcessVehicleInternationalReleaseVo();
BeanUtils.copyProperties(lawsVehicleInternationalLibrary, processVehicleInternationalReleaseVo);
BeanUtils.copyProperties(lawsVehicleInternationalLibrarySublist, processVehicleInternationalReleaseVo);
processVehicleInternationalReleaseVo.setId(lawsVehicleInternationalLibrary.getId());
excelList.add(processVehicleInternationalReleaseVo);
}
//导出文件名称
mv.addObject(JeroController.FILE_NAME, "国际");
mv.addObject(JeroController.CLASS, ProcessVehicleInternationalReleaseVo.class);
mv.addObject(JeroController.PARAMS, createExportParams("密级:核心商密□普通商密□内部资料■外部公开□", "国际"));
mv.addObject(NormalExcelConstants.DATA_LIST, excelList);
return mv;
}
private ExportParams createExportParams(String title, String sheetName) {
ExportParams exportParams = new ExportParams();
exportParams.setTitle(title);
exportParams.setType(ExcelType.HSSF);
exportParams.setSheetName(sheetName);
exportParams.setStyle(CustomExcelExportStyler.class);
return exportParams;
}
private LambdaQueryWrapper<LawsVehicleInternationalLibrary> generationWrapper(HttpServletRequest request) {
LambdaQueryWrapper<LawsVehicleInternationalLibrary> lambdaQueryWrapper = new LambdaQueryWrapper<>();
String vehicleModel = request.getParameter("vehicleModel"); // 整车型号
String vinTopEight = request.getParameter("vinTopEight"); // VIN前八位
String vehicleTypeCode = request.getParameter("vehicleTypeCode"); // 车型代码
if (StringUtils.isNotBlank(vehicleModel)) {
lambdaQueryWrapper.like(LawsVehicleInternationalLibrary::getVehicleModel, vehicleModel);
}
if (StringUtils.isNotBlank(vinTopEight)) {
lambdaQueryWrapper.like(LawsVehicleInternationalLibrary::getVinTopEight, vinTopEight);
}
if (StringUtils.isNotBlank(vehicleTypeCode)) {
LambdaQueryWrapper<LawsVehicleInternationalLibrarySublist> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(LawsVehicleInternationalLibrarySublist::getVehicleId);
queryWrapper.like(LawsVehicleInternationalLibrarySublist::getVehicleTypeCode, vehicleTypeCode);
List<LawsVehicleInternationalLibrarySublist> list = lawsVehicleInternationalLibrarySublistService.list(queryWrapper);
List<String> ids = list.stream().map(LawsVehicleInternationalLibrarySublist::getVehicleId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(ids)) {
lambdaQueryWrapper.in(LawsVehicleInternationalLibrary::getId, ids);
}else {
lambdaQueryWrapper.in(LawsVehicleInternationalLibrary::getId, "");
}
}
lambdaQueryWrapper.eq(LawsVehicleInternationalLibrary::getIsFinish, Constant.IS_FINISH); // 只展示走完流程的数据
return lambdaQueryWrapper;
}
}
@@ -0,0 +1,20 @@
package com.jero.modules.laws.businessSupport.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.laws.businessSupport.entity.LawsVehicleInternationalLibrarySublist;
import com.jero.modules.laws.businessSupport.mapper.LawsVehicleInternationalLibrarySublistMapper;
import com.jero.modules.laws.businessSupport.service.ILawsVehicleInternationalLibrarySublistService;
import org.springframework.stereotype.Service;
/**
* <p>
* 国际整车型号及VIN前八位管控库-子表 服务实现类
* </p>
*
* @author sz
* @since 2024-09-29
*/
@Service
public class LawsVehicleInternationalLibrarySublistServiceImpl extends ServiceImpl<LawsVehicleInternationalLibrarySublistMapper, LawsVehicleInternationalLibrarySublist> implements ILawsVehicleInternationalLibrarySublistService {
}
@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="international_vehicle_control_publish" name="国际整车型号和VIN前八位管控流程" isExecutable="true">
<startEvent id="sid-c483576e-82f8-4695-91b1-5639e83d929a"/>
<userTask id="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2" name="发起人发起" activiti:assignee="${importStartUser}"/>
<exclusiveGateway id="sid-e78d13e2-999f-43c5-a571-dcf35c256e1e"/>
<userTask id="sid-79b7c959-9003-4721-aa83-ea69780d3b84" name="起草部门经理审批" activiti:assignee="${checkUserLeader1}"/>
<exclusiveGateway id="sid-f8b50b7d-1289-4833-a2ae-b7d8a9f712cd"/>
<userTask id="sid-94189bb6-b253-4e58-baee-d011679f745d" name="项目经理审批 " activiti:assignee="${checkUserLeader2}">
<multiInstanceLoopCharacteristics isSequential="false" activiti:collection="checkUserLeader2List" activiti:elementVariable="checkUserLeader2">
<completionCondition>${!pass}</completionCondition>
</multiInstanceLoopCharacteristics>
</userTask>
<exclusiveGateway id="sid-247f6f63-97e9-465c-8358-7e9836194a8f"/>
<userTask id="sid-bb749423-1e38-4640-b258-8615962ec78a" name="法规部门处理人审批 " activiti:assignee="${checkUserLeader3}"/>
<exclusiveGateway id="sid-df211942-ecdc-43f5-a2e0-ca41c5f47962"/>
<sequenceFlow id="sid-66878423-85f6-48a7-a5ca-a399311f2b66" sourceRef="sid-c483576e-82f8-4695-91b1-5639e83d929a" targetRef="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2"/>
<sequenceFlow id="sid-0b5aaa39-d086-497f-bcc0-32a2eb37bbf4" sourceRef="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2" targetRef="sid-e78d13e2-999f-43c5-a571-dcf35c256e1e"/>
<sequenceFlow id="sid-849a2487-cdec-4b9d-bd7f-50f89e0acdaf" sourceRef="sid-e78d13e2-999f-43c5-a571-dcf35c256e1e" targetRef="sid-79b7c959-9003-4721-aa83-ea69780d3b84">
<conditionExpression xsi:type="tFormalExpression"/>
</sequenceFlow>
<sequenceFlow id="sid-79f010a7-6934-413c-b044-ff7a2953c1a7" sourceRef="sid-79b7c959-9003-4721-aa83-ea69780d3b84" targetRef="sid-f8b50b7d-1289-4833-a2ae-b7d8a9f712cd"/>
<sequenceFlow id="sid-71c9fe76-394d-4472-ae7e-e7b51176ebdb" sourceRef="sid-f8b50b7d-1289-4833-a2ae-b7d8a9f712cd" targetRef="sid-94189bb6-b253-4e58-baee-d011679f745d" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-7f794a11-e741-4a27-ba8c-e55208565446" sourceRef="sid-94189bb6-b253-4e58-baee-d011679f745d" targetRef="sid-247f6f63-97e9-465c-8358-7e9836194a8f"/>
<sequenceFlow id="sid-bd755d1e-a72b-433e-8003-c17fc969e990" sourceRef="sid-247f6f63-97e9-465c-8358-7e9836194a8f" targetRef="sid-bb749423-1e38-4640-b258-8615962ec78a" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-d619a790-a898-4dec-bb5f-fd6f3d45b797" sourceRef="sid-bb749423-1e38-4640-b258-8615962ec78a" targetRef="sid-df211942-ecdc-43f5-a2e0-ca41c5f47962"/>
<userTask id="sid-af5db21f-d883-4309-bdf6-c037495fbcd7" name="法规部门经理审批 " activiti:assignee="${checkUserLeader4}"/>
<sequenceFlow id="sid-9bf4f4cb-e555-4344-90a6-45ad53769fe0" sourceRef="sid-df211942-ecdc-43f5-a2e0-ca41c5f47962" targetRef="sid-af5db21f-d883-4309-bdf6-c037495fbcd7" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="sid-34d54902-ab6a-401e-9bd7-515f9dc7c270"/>
<sequenceFlow id="sid-fcb81dc6-7ac9-4372-8eb1-84cc1377257d" sourceRef="sid-af5db21f-d883-4309-bdf6-c037495fbcd7" targetRef="sid-34d54902-ab6a-401e-9bd7-515f9dc7c270"/>
<endEvent id="sid-2237e720-869a-4fe2-9f77-ffc99093d373">
<extensionElements>
<activiti:executionListener event="end" delegateExpression="${ProcessInternationalVehicleEndListener}"/>
</extensionElements>
</endEvent>
<sequenceFlow id="sid-305e193f-ec3a-4bd3-ada2-81865cb97774" sourceRef="sid-34d54902-ab6a-401e-9bd7-515f9dc7c270" targetRef="sid-2237e720-869a-4fe2-9f77-ffc99093d373" name="通过">
<conditionExpression xsi:type="tFormalExpression">${pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-53d5f67e-e7dc-4af7-9785-5183b7d85f66" sourceRef="sid-f8b50b7d-1289-4833-a2ae-b7d8a9f712cd" targetRef="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-b8277378-78f5-450e-9052-62fd016736bb" sourceRef="sid-247f6f63-97e9-465c-8358-7e9836194a8f" targetRef="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-e7f50f04-fb9d-4be5-b294-4291166c139e" sourceRef="sid-df211942-ecdc-43f5-a2e0-ca41c5f47962" targetRef="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-e3fa4efd-9df3-44d3-9822-8402e8e59a03" sourceRef="sid-34d54902-ab6a-401e-9bd7-515f9dc7c270" targetRef="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2" name="驳回">
<conditionExpression xsi:type="tFormalExpression">${!pass}</conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_international_vehicle">
<bpmndi:BPMNPlane bpmnElement="国际整车型号和VIN前八位管控流程" id="BPMNPlane_国际整车型号和VIN前八位管控流程">
<bpmndi:BPMNShape id="shape-1b8786a6-c928-4733-8b58-4316532d1738" bpmnElement="sid-c483576e-82f8-4695-91b1-5639e83d929a">
<omgdc:Bounds x="-270.0" y="-32.5" width="30.0" height="30.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-291ab3a7-8f2e-41aa-9861-fb4c6755d124" bpmnElement="sid-ae80c354-9ade-43d7-be0b-ccfc2b347fe2">
<omgdc:Bounds x="-215.0" y="-35.0" width="60.0" height="35.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-d535c2de-f507-4627-b8fa-5be689d7b8db" bpmnElement="sid-e78d13e2-999f-43c5-a571-dcf35c256e1e">
<omgdc:Bounds x="-135.0" y="-37.5" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-ef5d37e2-a211-4575-b30b-2b2bd8d7bcab" bpmnElement="sid-79b7c959-9003-4721-aa83-ea69780d3b84">
<omgdc:Bounds x="-70.0" y="-35.0" width="60.0" height="35.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-eac56840-0879-4358-8ee7-a250284ab306" bpmnElement="sid-f8b50b7d-1289-4833-a2ae-b7d8a9f712cd">
<omgdc:Bounds x="10.0" y="-37.5" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-a572afb0-a619-446f-b1f4-eb0d7b906da7" bpmnElement="sid-94189bb6-b253-4e58-baee-d011679f745d">
<omgdc:Bounds x="70.0" y="-35.0" width="55.0" height="35.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-3dcacef4-4e43-4577-8f31-3ae9b9a62f1e" bpmnElement="sid-247f6f63-97e9-465c-8358-7e9836194a8f">
<omgdc:Bounds x="145.0" y="-37.5" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-03fcc127-c30d-48f0-888e-2d1304907c04" bpmnElement="sid-bb749423-1e38-4640-b258-8615962ec78a">
<omgdc:Bounds x="207.5" y="-35.0" width="55.0" height="35.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-1061f45b-1f54-4ebb-a637-eddfede008f0" bpmnElement="sid-df211942-ecdc-43f5-a2e0-ca41c5f47962">
<omgdc:Bounds x="285.0" y="-37.5" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-b58017b7-9bd9-43de-ba39-dedea8904492" bpmnElement="sid-66878423-85f6-48a7-a5ca-a399311f2b66">
<omgdi:waypoint x="-240.0" y="-17.5"/>
<omgdi:waypoint x="-215.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-2f0800c0-0565-4cf0-a2b4-80cfbeebdd1d" bpmnElement="sid-0b5aaa39-d086-497f-bcc0-32a2eb37bbf4">
<omgdi:waypoint x="-155.0" y="-17.5"/>
<omgdi:waypoint x="-135.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-f0723056-f870-4f95-bca4-b403a9f990bd" bpmnElement="sid-849a2487-cdec-4b9d-bd7f-50f89e0acdaf">
<omgdi:waypoint x="-95.0" y="-17.5"/>
<omgdi:waypoint x="-70.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-96f1ce6d-2651-4370-968f-e73aa30e4404" bpmnElement="sid-79f010a7-6934-413c-b044-ff7a2953c1a7">
<omgdi:waypoint x="-10.0" y="-17.5"/>
<omgdi:waypoint x="10.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-04a7fd2f-5cbc-43e1-9284-90fe1e38690a" bpmnElement="sid-71c9fe76-394d-4472-ae7e-e7b51176ebdb">
<omgdi:waypoint x="50.0" y="-17.5"/>
<omgdi:waypoint x="70.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-14867d4b-51fc-4981-9478-44edbf6f6947" bpmnElement="sid-7f794a11-e741-4a27-ba8c-e55208565446">
<omgdi:waypoint x="125.0" y="-17.5"/>
<omgdi:waypoint x="145.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-4c164a32-a59e-41ab-8ac5-43dce317d3c4" bpmnElement="sid-bd755d1e-a72b-433e-8003-c17fc969e990">
<omgdi:waypoint x="185.0" y="-17.5"/>
<omgdi:waypoint x="207.5" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-2ea2f120-edba-4456-bf32-8f76d7df1e32" bpmnElement="sid-d619a790-a898-4dec-bb5f-fd6f3d45b797">
<omgdi:waypoint x="262.5" y="-17.5"/>
<omgdi:waypoint x="285.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-d1e17842-0c3d-4948-ad35-3fdd7954f766" bpmnElement="sid-af5db21f-d883-4309-bdf6-c037495fbcd7">
<omgdc:Bounds x="350.0" y="-35.0" width="60.0" height="35.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-c4eb99db-d270-4179-b661-348da07fb90c" bpmnElement="sid-9bf4f4cb-e555-4344-90a6-45ad53769fe0">
<omgdi:waypoint x="325.0" y="-17.5"/>
<omgdi:waypoint x="350.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-0bb626a3-0730-4443-a34d-de0f35f7e7fd" bpmnElement="sid-34d54902-ab6a-401e-9bd7-515f9dc7c270">
<omgdc:Bounds x="425.0" y="-37.5" width="40.0" height="40.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-00e76dfa-3cfe-46b1-afdd-474b3c21489d" bpmnElement="sid-fcb81dc6-7ac9-4372-8eb1-84cc1377257d">
<omgdi:waypoint x="410.0" y="-17.5"/>
<omgdi:waypoint x="425.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="shape-86261f2f-2d59-4517-8199-66a9b55200d0" bpmnElement="sid-2237e720-869a-4fe2-9f77-ffc99093d373">
<omgdc:Bounds x="485.0" y="-32.5" width="30.0" height="30.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-f7be5a88-3842-4155-b494-55f9952c7817" bpmnElement="sid-305e193f-ec3a-4bd3-ada2-81865cb97774">
<omgdi:waypoint x="465.0" y="-17.5"/>
<omgdi:waypoint x="485.0" y="-17.5"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-32be22aa-dbc5-42f0-b73c-340cb4bb97a7" bpmnElement="sid-53d5f67e-e7dc-4af7-9785-5183b7d85f66">
<omgdi:waypoint x="30.0" y="2.5"/>
<omgdi:waypoint x="30.0" y="31.25"/>
<omgdi:waypoint x="-185.0" y="31.25"/>
<omgdi:waypoint x="-185.0" y="0.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-55ba399a-7e5e-447c-8631-6d444e5c15d1" bpmnElement="sid-b8277378-78f5-450e-9052-62fd016736bb">
<omgdi:waypoint x="165.0" y="2.5"/>
<omgdi:waypoint x="165.0" y="31.25"/>
<omgdi:waypoint x="-185.0" y="31.25"/>
<omgdi:waypoint x="-185.0" y="0.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-50345680-a9ff-42bf-8cad-a253f5926b47" bpmnElement="sid-e7f50f04-fb9d-4be5-b294-4291166c139e">
<omgdi:waypoint x="305.0" y="2.5"/>
<omgdi:waypoint x="305.00003" y="31.25"/>
<omgdi:waypoint x="-185.0" y="31.249998"/>
<omgdi:waypoint x="-184.99998" y="0.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-79bb7ec3-0f2f-47c4-b59f-2689bac18a75" bpmnElement="sid-e3fa4efd-9df3-44d3-9822-8402e8e59a03">
<omgdi:waypoint x="445.0" y="2.5"/>
<omgdi:waypoint x="445.0" y="31.25"/>
<omgdi:waypoint x="-185.0" y="31.249996"/>
<omgdi:waypoint x="-185.0" y="0.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>