Merge remote-tracking branch 'origin/dev_20230808_OTA'

# Conflicts:
#	jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java
#	jero-web/src/common/lang/en-us.js
#	jero-web/src/common/lang/zh-cn.js
This commit is contained in:
高嵩
2023-08-25 17:04:45 +08:00
68 changed files with 9738 additions and 16 deletions
@@ -0,0 +1,40 @@
package com.jero.common.util;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.ArrayList;
import java.util.List;
/**
* @description
* @date 2022/12/7 14:02
* @auth zhn
*/
public class PageUtil {
public static Page getPages(Integer currentPage, Integer pageSize, List<?> entityList){
Page page =new Page();
if(entityList==null){
return null;
}
int size = entityList.size();
if(pageSize > size){
pageSize = size;
}
if(pageSize!=0){
//求出最⼤页数,防⽌currentPage越界
int maxPage = size % pageSize ==0? size / pageSize : size / pageSize +1;
if(currentPage > maxPage){
currentPage = maxPage;
}
}
//当前页第⼀条数据的下标
int curIdx = currentPage >1?(currentPage -1)* pageSize :0;
List pageList =new ArrayList();
//将当前页的数据放进pageList
for(int i =0; i < pageSize && curIdx + i < size; i++){
pageList.add(entityList.get(curIdx + i));
}
page.setCurrent(currentPage).setSize(pageSize).setTotal(entityList.size()).setRecords(pageList);
return page;
}
}
@@ -6,8 +6,10 @@ public enum RoleEnum {
COUNTRU_CARD_MANAGE("countryCard管理员","countryCardManage","countryCardManage","1564916346120916993",4),
ENGINEERING_INTERFACE_PERSON("工程接口人","engineeringInterfacePerson","engineeringInterfacePerson","1534020084667674626",5),
ENGINEER("工程师","engineer","engineer","1534020318437208065",6),
HOMOLOGATION_ENGINEER("认证工程师","homologationEngineer","homologationEngineer","1534019729326239745",8),
REGULATION_OWNER("法规工程师","regulationOwner","regulationOwner","1534021004067500034",7),
HOMOLOGATION_ENGINEER("认证工程师","homologationEngineer","homologationEngineer","1534019729326239745",8),
OTA_MANAGER("OTA Manager","OTA Manager","OTA Manager","1664108901072678913",9),
STUDIO("R&H Studio","R&H Studio","R&H Studio","1534019911296118786",10),
;
String name;
@@ -0,0 +1,348 @@
package com.jero.modules.ota.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.util.PageUtil;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.jero.modules.ota.service.IOtaManageApplyEOService;
import com.jero.modules.ota.vo.VersionVO;
import com.jero.modules.project.entity.ProjectLibraryBase;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 数据对接表
* @Author: jero-boot
* @Date: 2023-08-09
* @Version: V1.0
*/
@Api(tags="数据对接表")
@RestController
@RequestMapping("/ota/otaManageApplyEO")
@Slf4j
public class OtaManageApplyEOController extends JeroController<OtaManageApplyEO, IOtaManageApplyEOService> {
@Autowired
private IOtaManageApplyEOService otaManageApplyEOService;
/**
* OTA管理列表和全车型列表-分页列表查询
*
* @param otaManageApplyEO
* @param pageNo
* @param pageSize
* @return
*/
@AutoLog(value = "OTA管理列表和全车型列表-分页列表查询")
@ApiOperation(value="OTA管理列表和全车型列表-分页列表查询", notes="OTA管理列表和全车型列表-分页列表查询")
@GetMapping(value = "/getOtaPage")
public Result<?> getOtaPage(OtaManageApplyEO otaManageApplyEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
List<OtaManageApplyEO> list = otaManageApplyEOService.getOtaPage(otaManageApplyEO);
Page pages = PageUtil.getPages(pageNo, pageSize, list);
return Result.OK(pages);
}
@AutoLog(value = "全车型列表-分页列表查询")
@ApiOperation(value="全车型列表-分页列表查询", notes="全车型列表-分页列表查询")
@GetMapping(value = "/getAllCarPage")
public Result<?> getAllCarPage(OtaManageApplyEO otaManageApplyEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
List<OtaManageApplyEO> list = otaManageApplyEOService.getAllCarPage(otaManageApplyEO);
Page pages = PageUtil.getPages(pageNo, pageSize, list);
return Result.OK(pages);
}
/**
* 分车型列表-分页列表查询
*
* @param otaManageApplyEO
* @param pageNo
* @param pageSize
* @return
*/
@AutoLog(value = "分车型列表-分页列表查询")
@ApiOperation(value="分车型列表-分页列表查询", notes="分车型列表-分页列表查询")
@GetMapping(value = "/getOtaCarPage")
public Result<?> getOtaCarPage(OtaManageApplyEO otaManageApplyEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
String cut) {
List<OtaManageApplyEO> list = otaManageApplyEOService.getOtaCarPage(otaManageApplyEO, cut);
Page pages = PageUtil.getPages(pageNo, pageSize, list);
return Result.OK(pages);
}
/**
* 下拉数据-软件版本,适用车型,市场
*
* @return
*/
@AutoLog(value = "下拉数据-软件版本,适用车型,市场")
@ApiOperation(value="下拉数据-软件版本,适用车型,市场", notes="下拉数据-软件版本,适用车型,市场")
@GetMapping(value = "/getPullDownList")
public Result<?> getPullDownList() {
Map<String, Object> result = otaManageApplyEOService.getPullDownList();
return Result.OK(result);
}
/**
* 通过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) {
otaManageApplyEOService.deleteById(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.otaManageApplyEOService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过适用车型查询
*
* @param appliedVehicleProject
* @return
*/
@AutoLog(value = "通过适用车型查询")
@ApiOperation(value="通过适用车型查询", notes="通过适用车型查询")
@GetMapping(value = "/getByAppliedVehicleProject")
public Result<?> getByAppliedVehicleProject(@RequestParam(name="appliedVehicleProject",required=true) String appliedVehicleProject) {
List<VersionVO> byAppliedVehicleProject = otaManageApplyEOService.getByAppliedVehicleProject(appliedVehicleProject);
return Result.OK(byAppliedVehicleProject);
}
/**
* 导出excel
*
* @param request
* @param otaManageApplyEO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) {
return super.exportXls(request, otaManageApplyEO, OtaManageApplyEO.class, "数据对接表");
}
@AutoLog(value = "下拉数据-全部和分车型(不含年款)")
@ApiOperation(value="下拉数据-全部和分车型(不含年款)", notes="下拉数据-全部和分车型(不含年款)")
@GetMapping(value = "/getCarList")
public Result<?> getCarList(String cut,String plannedBpLaunchBatch) {
List<String> result = otaManageApplyEOService.getCarList(cut,plannedBpLaunchBatch);
return Result.OK(result);
}
@AutoLog(value = "项目版本下拉数据")
@ApiOperation(value="项目版本下拉数据", notes="项目版本下拉数据")
@GetMapping(value = "/getProjectVersionList")
public Result<?> getProjectVersionList(String carMarket,String cut) {
List<VersionVO> result = otaManageApplyEOService.getProjectVersionList(carMarket,cut);
return Result.OK(result);
}
@AutoLog(value = "全车型和分车型详情")
@ApiOperation(value="分车型详情", notes="分车型详情")
@GetMapping(value = "/getVersionInfo")
public Result<?> getVersionInfo(String vdr,String car,String cut) {
List<VersionVO> result = otaManageApplyEOService.getVersionInfo(vdr,car,cut);
return Result.OK(result);
}
@AutoLog(value = "下发通知")
@ApiOperation(value="下发通知", notes="下发通知")
@GetMapping(value = "/issueNotice")
public Result<?> issueNotice(String id) {
otaManageApplyEOService.issueNotice(id);
return Result.OK("下发通知成功!");
}
@AutoLog(value = "保存")
@ApiOperation(value = "保存", notes = "保存")
@PostMapping(value = "/temporarySave")
public Result<?> temporarySave(@RequestBody JSONObject jsonObject) {
JSONArray array = jsonObject.getJSONArray("list");
String cut = jsonObject.getString("cut");
List<OtaManageApplyEO> list = new ArrayList<>();
OtaManageApplyEO oma = null;
for (Object obj : array) {
oma = JSONObject.parseObject(JSONObject.toJSONString(obj), OtaManageApplyEO.class);
if (ObjectUtils.isNotEmpty(oma)) {
list.add(oma);
}
}
otaManageApplyEOService.temporarySave(list, cut);
return Result.OK("保存成功!");
}
@AutoLog(value = "提交")
@ApiOperation(value = "提交", notes = "提交")
@PostMapping(value = "/submit")
public Result<?> submit(@RequestBody JSONObject jsonObject) {
JSONArray array = jsonObject.getJSONArray("list");
String cut = jsonObject.getString("cut");
List<OtaManageApplyEO> list = new ArrayList<>();
OtaManageApplyEO oma = null;
for (Object obj : array) {
oma = JSONObject.parseObject(JSONObject.toJSONString(obj), OtaManageApplyEO.class);
if (ObjectUtils.isNotEmpty(oma)) {
list.add(oma);
}
}
List<String> msgList = otaManageApplyEOService.submit(list, cut);
Map<String,Object> res = new HashMap<>();
res.put("msgList",msgList);
return Result.OK("操作成功!", res);
}
@AutoLog(value = "批量设置")
@ApiOperation(value = "批量设置", notes = "批量设置")
@PostMapping(value = "/updateVdrBatch")
public Result<?> updateVdrBatch(@RequestBody JSONObject jsonObject) {
JSONArray array = jsonObject.getJSONArray("list");
List<OtaManageApplyEO> list = new ArrayList<>();
OtaManageApplyEO oma = null;
for (Object obj : array) {
oma = JSONObject.parseObject(JSONObject.toJSONString(obj), OtaManageApplyEO.class);
if (ObjectUtils.isNotEmpty(oma)) {
list.add(oma);
}
}
String projectVersion = jsonObject.getString("projectVersion");
String attestationSchedule = jsonObject.getString("attestationSchedule");
String remark = jsonObject.getString("remark");
String cut = jsonObject.getString("cut");
List<String> msgList = otaManageApplyEOService.updateVdrBatch(list, projectVersion, attestationSchedule, remark, cut);
Map<String,Object> res = new HashMap<>();
res.put("msgList",msgList);
return Result.OK("操作成功!", res);
}
@AutoLog(value = "申请重新匹配")
@ApiOperation(value = "申请重新匹配", notes = "申请重新匹配")
@GetMapping(value = "/applyRematch")
public Result<?> applyRematch(String ids,String projectVersion,String cut) {
List<String> msgList = otaManageApplyEOService.applyRematch(ids,projectVersion, cut);
Map<String,Object> res = new HashMap<>();
res.put("msgList",msgList);
return Result.OK("操作成功!", res);
}
@AutoLog(value = "确认")
@ApiOperation(value = "确认", notes = "确认")
@GetMapping(value = "/confirm")
public Result<?> confirm(String ids,String cut) {
List<String> msgList = otaManageApplyEOService.confirm(ids, cut);
Map<String,Object> res = new HashMap<>();
res.put("msgList",msgList);
return Result.OK("操作成功!", res);
}
@AutoLog(value = "退回")
@ApiOperation(value = "退回", notes = "退回")
@GetMapping(value = "/reject")
public Result<?> reject(String ids,String rejectReason,String cut) {
List<String> msgList = otaManageApplyEOService.reject(ids, rejectReason, cut);
Map<String,Object> res = new HashMap<>();
res.put("msgList",msgList);
return Result.OK("操作成功!", res);
}
@AutoLog(value = "查询项目涉及的VDR版本")
@ApiOperation(value = "查询项目涉及的VDR版本", notes = "查询项目涉及的VDR版本")
@GetMapping(value = "/getVdrListByProject")
public Result<?> getVdrListByProject(String projectId, String cut) {
List<OtaManageApplyEO> resList = otaManageApplyEOService.getVdrListByProject(projectId, cut);
return Result.OK("操作成功!", resList);
}
@AutoLog(value = "通过软件版本和项目ID查询状态")
@ApiOperation(value = "通过软件版本和项目ID查询状态", notes = "通过软件版本和项目ID查询状态")
@GetMapping(value = "/getStatisticalStatus")
public Result<?> getStatisticalStatus(String projectId, String plannedBpLaunchBatch, String cut) {
List<ProjectLibraryBase> projectLibraryBaseList = new ArrayList<>();
List<Map<String, Object>> res = otaManageApplyEOService.getStatisticalStatus(projectId, plannedBpLaunchBatch, cut,projectLibraryBaseList);
if(!res.isEmpty()){
return Result.OK("操作成功!", res.get(0));
}else{
return Result.OK("操作成功!", new HashMap<>());
}
}
/**
* OTA管理导出excel
*
* @param request
* @param otaManageApplyEO
*/
@RequestMapping(value = "/otaExportXls")
@ApiOperation(value = "OTA管理导出excel", notes = "OTA管理导出excel")
public ModelAndView otaExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) {
return otaManageApplyEOService.otaExportXls(request, otaManageApplyEO);
}
/**
* 全车型导出excel
*
* @param request
* @param otaManageApplyEO
*/
@RequestMapping(value = "/allCarExportXls")
@ApiOperation(value = "全车型导出excel", notes = "OTA管理导出excel")
public ModelAndView allCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) {
return otaManageApplyEOService.allCarExportXls(request, otaManageApplyEO);
}
/**
* 分车型导出excel
*
* @param request
* @param otaManageApplyEO
*/
@RequestMapping(value = "/oneCarExportXls")
@ApiOperation(value = "分车型导出excel", notes = "OTA管理导出excel")
public ModelAndView oneCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO) {
return otaManageApplyEOService.oneCarExportXls(request, otaManageApplyEO);
}
}
@@ -0,0 +1,180 @@
package com.jero.modules.ota.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.ota.entity.OtaManageHistory;
import com.jero.modules.ota.service.IOtaManageHistoryService;
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 com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: OTA管理列表历史记录
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
@Api(tags="OTA管理列表历史记录")
@RestController
@RequestMapping("/ota/otaManageHistory")
@Slf4j
public class OtaManageHistoryController extends JeroController<OtaManageHistory, IOtaManageHistoryService> {
@Autowired
private IOtaManageHistoryService otaManageHistoryService;
/**
* 分页列表查询
*
* @param otaManageHistory
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-分页列表查询")
@ApiOperation(value="OTA管理列表历史记录-分页列表查询", notes="OTA管理列表历史记录-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(OtaManageHistory otaManageHistory,String cut,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OtaManageHistory> queryWrapper = QueryGenerator.initQueryWrapper(otaManageHistory, req.getParameterMap());
queryWrapper.orderByDesc("create_time");
Page<OtaManageHistory> page = new Page<OtaManageHistory>(pageNo, pageSize);
IPage<OtaManageHistory> pageList = otaManageHistoryService.page(page, queryWrapper);
List<OtaManageHistory> records = pageList.getRecords();
for (OtaManageHistory omh : records) {
if (CutEnum.CN.getValue().equals(cut)) {
omh.setContent(omh.getContentCn());
} else {
omh.setContent(omh.getContentEn());
}
}
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-列表查询")
@ApiOperation(value="OTA管理列表历史记录-列表查询", notes="OTA管理列表历史记录-列表查询")
@GetMapping(value = "/list")
public Result<List<OtaManageHistory>> queryList() {
List<OtaManageHistory> list = otaManageHistoryService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param otaManageHistory
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-添加")
@ApiOperation(value="OTA管理列表历史记录-添加", notes="OTA管理列表历史记录-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody OtaManageHistory otaManageHistory) {
otaManageHistoryService.add(otaManageHistory);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param otaManageHistory
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-编辑")
@ApiOperation(value="OTA管理列表历史记录-编辑", notes="OTA管理列表历史记录-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody OtaManageHistory otaManageHistory) {
otaManageHistoryService.editById(otaManageHistory);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-通过id删除")
@ApiOperation(value="OTA管理列表历史记录-通过id删除", notes="OTA管理列表历史记录-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
otaManageHistoryService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-批量删除")
@ApiOperation(value="OTA管理列表历史记录-批量删除", notes="OTA管理列表历史记录-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.otaManageHistoryService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理列表历史记录-通过id查询")
@ApiOperation(value="OTA管理列表历史记录-通过id查询", notes="OTA管理列表历史记录-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
OtaManageHistory otaManageHistory = otaManageHistoryService.queryById(id);
if(otaManageHistory==null) {
return Result.error("未找到对应数据");
}
return Result.OK(otaManageHistory);
}
/**
* 导出excel
*
* @param request
* @param otaManageHistory
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OtaManageHistory otaManageHistory) {
return super.exportXls(request, otaManageHistory, OtaManageHistory.class, "OTA管理列表历史记录");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OtaManageHistory.class);
}
}
@@ -0,0 +1,170 @@
package com.jero.modules.ota.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.ota.entity.OtaManagePermission;
import com.jero.modules.ota.service.IOtaManagePermissionService;
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 com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: OTA管理权限列表
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
@Api(tags="OTA管理权限列表")
@RestController
@RequestMapping("/ota/otaManagePermission")
@Slf4j
public class OtaManagePermissionController extends JeroController<OtaManagePermission, IOtaManagePermissionService> {
@Autowired
private IOtaManagePermissionService otaManagePermissionService;
/**
* 分页列表查询
*
* @param otaManagePermission
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "OTA管理权限列表-分页列表查询")
@ApiOperation(value="OTA管理权限列表-分页列表查询", notes="OTA管理权限列表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(OtaManagePermission otaManagePermission,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OtaManagePermission> queryWrapper = QueryGenerator.initQueryWrapper(otaManagePermission, req.getParameterMap());
Page<OtaManagePermission> page = new Page<OtaManagePermission>(pageNo, pageSize);
IPage<OtaManagePermission> pageList = otaManagePermissionService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "OTA管理权限列表-列表查询")
@ApiOperation(value="OTA管理权限列表-列表查询", notes="OTA管理权限列表-列表查询")
@GetMapping(value = "/list")
public Result<List<OtaManagePermission>> queryList() {
List<OtaManagePermission> list = otaManagePermissionService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param otaManagePermission
* @return
*/
@AutoLog(value = "OTA管理权限列表-添加")
@ApiOperation(value="OTA管理权限列表-添加", notes="OTA管理权限列表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody OtaManagePermission otaManagePermission) {
otaManagePermissionService.add(otaManagePermission);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param otaManagePermission
* @return
*/
@AutoLog(value = "OTA管理权限列表-编辑")
@ApiOperation(value="OTA管理权限列表-编辑", notes="OTA管理权限列表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody OtaManagePermission otaManagePermission) {
otaManagePermissionService.editById(otaManagePermission);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理权限列表-通过id删除")
@ApiOperation(value="OTA管理权限列表-通过id删除", notes="OTA管理权限列表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
otaManagePermissionService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "OTA管理权限列表-批量删除")
@ApiOperation(value="OTA管理权限列表-批量删除", notes="OTA管理权限列表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.otaManagePermissionService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理权限列表-通过id查询")
@ApiOperation(value="OTA管理权限列表-通过id查询", notes="OTA管理权限列表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
OtaManagePermission otaManagePermission = otaManagePermissionService.queryById(id);
if(otaManagePermission==null) {
return Result.error("未找到对应数据");
}
return Result.OK(otaManagePermission);
}
/**
* 导出excel
*
* @param request
* @param otaManagePermission
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OtaManagePermission otaManagePermission) {
return super.exportXls(request, otaManagePermission, OtaManagePermission.class, "OTA管理权限列表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OtaManagePermission.class);
}
}
@@ -0,0 +1,170 @@
package com.jero.modules.ota.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.ota.entity.OtaManageReceive;
import com.jero.modules.ota.service.IOtaManageReceiveService;
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 com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: OTA管理
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
@Api(tags="OTA管理")
@RestController
@RequestMapping("/ota/otaManageReceive")
@Slf4j
public class OtaManageReceiveController extends JeroController<OtaManageReceive, IOtaManageReceiveService> {
@Autowired
private IOtaManageReceiveService otaManageReceiveService;
/**
* 分页列表查询
*
* @param otaManageReceive
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "OTA管理-分页列表查询")
@ApiOperation(value="OTA管理-分页列表查询", notes="OTA管理-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(OtaManageReceive otaManageReceive,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OtaManageReceive> queryWrapper = QueryGenerator.initQueryWrapper(otaManageReceive, req.getParameterMap());
Page<OtaManageReceive> page = new Page<OtaManageReceive>(pageNo, pageSize);
IPage<OtaManageReceive> pageList = otaManageReceiveService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "OTA管理-列表查询")
@ApiOperation(value="OTA管理-列表查询", notes="OTA管理-列表查询")
@GetMapping(value = "/list")
public Result<List<OtaManageReceive>> queryList() {
List<OtaManageReceive> list = otaManageReceiveService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param otaManageReceive
* @return
*/
@AutoLog(value = "OTA管理-添加")
@ApiOperation(value="OTA管理-添加", notes="OTA管理-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody OtaManageReceive otaManageReceive) {
otaManageReceiveService.add(otaManageReceive);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param otaManageReceive
* @return
*/
@AutoLog(value = "OTA管理-编辑")
@ApiOperation(value="OTA管理-编辑", notes="OTA管理-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody OtaManageReceive otaManageReceive) {
otaManageReceiveService.editById(otaManageReceive);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理-通过id删除")
@ApiOperation(value="OTA管理-通过id删除", notes="OTA管理-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
otaManageReceiveService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "OTA管理-批量删除")
@ApiOperation(value="OTA管理-批量删除", notes="OTA管理-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.otaManageReceiveService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理-通过id查询")
@ApiOperation(value="OTA管理-通过id查询", notes="OTA管理-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
OtaManageReceive otaManageReceive = otaManageReceiveService.queryById(id);
if(otaManageReceive==null) {
return Result.error("未找到对应数据");
}
return Result.OK(otaManageReceive);
}
/**
* 导出excel
*
* @param request
* @param otaManageReceive
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OtaManageReceive otaManageReceive) {
return super.exportXls(request, otaManageReceive, OtaManageReceive.class, "OTA管理");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OtaManageReceive.class);
}
}
@@ -0,0 +1,170 @@
package com.jero.modules.ota.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.api.vo.Result;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.ota.entity.OtaManageReceiveNsdp;
import com.jero.modules.ota.service.IOtaManageReceiveNsdpService;
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 com.jero.common.system.base.controller.JeroController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.jero.common.aspect.annotation.AutoLog;
/**
* @Description: OTA管理NSDP同步表
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
@Api(tags="OTA管理NSDP同步表")
@RestController
@RequestMapping("/ota/otaManageReceiveNsdp")
@Slf4j
public class OtaManageReceiveNsdpController extends JeroController<OtaManageReceiveNsdp, IOtaManageReceiveNsdpService> {
@Autowired
private IOtaManageReceiveNsdpService otaManageReceiveNsdpService;
/**
* 分页列表查询
*
* @param otaManageReceiveNsdp
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-分页列表查询")
@ApiOperation(value="OTA管理NSDP同步表-分页列表查询", notes="OTA管理NSDP同步表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(OtaManageReceiveNsdp otaManageReceiveNsdp,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<OtaManageReceiveNsdp> queryWrapper = QueryGenerator.initQueryWrapper(otaManageReceiveNsdp, req.getParameterMap());
Page<OtaManageReceiveNsdp> page = new Page<OtaManageReceiveNsdp>(pageNo, pageSize);
IPage<OtaManageReceiveNsdp> pageList = otaManageReceiveNsdpService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-列表查询")
@ApiOperation(value="OTA管理NSDP同步表-列表查询", notes="OTA管理NSDP同步表-列表查询")
@GetMapping(value = "/list")
public Result<List<OtaManageReceiveNsdp>> queryList() {
List<OtaManageReceiveNsdp> list = otaManageReceiveNsdpService.queryList();
return Result.OK(list);
}
/**
* 添加
*
* @param otaManageReceiveNsdp
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-添加")
@ApiOperation(value="OTA管理NSDP同步表-添加", notes="OTA管理NSDP同步表-添加")
@PostMapping(value = "/add")
public Result<?> add(@Validated @RequestBody OtaManageReceiveNsdp otaManageReceiveNsdp) {
otaManageReceiveNsdpService.add(otaManageReceiveNsdp);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param otaManageReceiveNsdp
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-编辑")
@ApiOperation(value="OTA管理NSDP同步表-编辑", notes="OTA管理NSDP同步表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody OtaManageReceiveNsdp otaManageReceiveNsdp) {
otaManageReceiveNsdpService.editById(otaManageReceiveNsdp);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-通过id删除")
@ApiOperation(value="OTA管理NSDP同步表-通过id删除", notes="OTA管理NSDP同步表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
otaManageReceiveNsdpService.deleteById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-批量删除")
@ApiOperation(value="OTA管理NSDP同步表-批量删除", notes="OTA管理NSDP同步表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.otaManageReceiveNsdpService.deleteByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "OTA管理NSDP同步表-通过id查询")
@ApiOperation(value="OTA管理NSDP同步表-通过id查询", notes="OTA管理NSDP同步表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
OtaManageReceiveNsdp otaManageReceiveNsdp = otaManageReceiveNsdpService.queryById(id);
if(otaManageReceiveNsdp==null) {
return Result.error("未找到对应数据");
}
return Result.OK(otaManageReceiveNsdp);
}
/**
* 导出excel
*
* @param request
* @param otaManageReceiveNsdp
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, OtaManageReceiveNsdp otaManageReceiveNsdp) {
return super.exportXls(request, otaManageReceiveNsdp, OtaManageReceiveNsdp.class, "OTA管理NSDP同步表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, OtaManageReceiveNsdp.class);
}
}
@@ -0,0 +1,219 @@
package com.jero.modules.ota.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.modules.ota.vo.VersionVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @Description: 数据对接表
* @Author: jero-boot
* @Date: 2023-08-09
* @Version: V1.0
*/
@Data
@TableName("ota_manage_apply")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ota_manage_apply对象", description="数据对接表")
public class OtaManageApplyEO implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
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 = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
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 = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
@ApiModelProperty(value = "VDR")
private java.lang.String vdr;
/**项目版本*/
@Excel(name = "项目版本", width = 15)
@ApiModelProperty(value = "项目版本-id")
private java.lang.String projectVersion;
/**认证进度*/
@Excel(name = "认证进度", width = 15)
@ApiModelProperty(value = "认证进度")
private java.lang.String attestationSchedule;
/**匹配状态*/
@Excel(name = "匹配状态", width = 15)
@ApiModelProperty(value = "匹配状态")
private java.lang.String matchStatus;
@TableField(exist = false)
@ApiModelProperty(value = "匹配状态显示文字")
private java.lang.String matchStatusText;
/**备注*/
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private java.lang.String remark;
/**适用车型*/
@Excel(name = "适用车型", width = 15)
@ApiModelProperty(value = "适用车型")
private java.lang.String vehicleType;
//--------------------------------------------------------
@TableField(exist = false)
@ApiModelProperty(value = "软件版本")
private java.lang.String plannedBpLaunchBatch;
@TableField(exist = false)
@ApiModelProperty(value = "适用车型")
private java.lang.String appliedVehicleProject;
@TableField(exist = false)
@ApiModelProperty(value = "市场")
private java.lang.String market;
@TableField(exist = false)
@ApiModelProperty(value = "软件发布时间")
private String releaseDate;
@TableField(exist = false)
@ApiModelProperty(value = "软件发布时间")
private java.util.Date releaseNameDate;
@TableField(exist = false)
@ApiModelProperty(value = "软件发布时间-开始")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date softwareIssueTimeStart;
@TableField(exist = false)
@ApiModelProperty(value = "软件发布时间-结束")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date softwareIssueTimeEnd;
@TableField(exist = false)
@ApiModelProperty(value = "主题")
private java.lang.String summary;
@TableField(exist = false)
@ApiModelProperty(value = "VDR状态")
private java.lang.String status;
@TableField(exist = false)
@ApiModelProperty(value = "认证影响")
private java.lang.String homologationImpact;
@TableField(exist = false)
@ApiModelProperty(value = "影响描述")
private java.lang.String homologation;
@TableField(exist = false)
@ApiModelProperty(value = "影响法规-CN")
private java.lang.String impactCnHomo;
@TableField(exist = false)
@ApiModelProperty(value = "影响法规-EU")
private java.lang.String impactEuHomo;
@TableField(exist = false)
@ApiModelProperty(value = "影响法规-查询条件")
private java.lang.String impactHomo;
@TableField(exist = false)
@ApiModelProperty(value = "责任部门")
private java.lang.String masterDomain;
@TableField(exist = false)
@ApiModelProperty(value = "R&H Studio")
private java.lang.String studio;
@TableField(exist = false)
@ApiModelProperty(value = "R&H Studio中文名")
private java.lang.String studioText;
@TableField(exist = false)
@ApiModelProperty(value = "认证开始")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date attestationStartTime;
@TableField(exist = false)
@ApiModelProperty(value = "认证申报")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date certificationSubmission;
@TableField(exist = false)
@ApiModelProperty(value = "认证批准")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date attestationEndTime;
@TableField(exist = false)
@ApiModelProperty(value = "项目版本下拉选项")
private List<VersionVO> versionVOList;
@ApiModelProperty(value = "项目版本-中文")
@TableField(exist = false)
private java.lang.String projectVersionText;
@ApiModelProperty(value = "是否禁用版本和进度编辑")
@TableField(exist = false)
private boolean disabled;
@TableField(exist = false)
@ApiModelProperty(value = "表头排序字段")
private java.lang.String orderByField;
@TableField(exist = false)
@ApiModelProperty(value = "排序")
private java.lang.String orderBy;
@TableField(exist = false)
@ApiModelProperty(value = "导出文件名")
private String exportName;
@TableField(exist = false)
@ApiModelProperty(value = "中英文切换")
private String cut;
}
@@ -0,0 +1,85 @@
package com.jero.modules.ota.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* @Description: OTA管理列表历史记录
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
@Data
@TableName("ota_manage_history")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ota_manage_history对象", description="OTA管理列表历史记录")
public class OtaManageHistory implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**关联applyID*/
@Excel(name = "关联applyID", width = 15)
@ApiModelProperty(value = "关联applyID")
private String applyId;
/**操作记录cn*/
@Excel(name = "操作记录cn", width = 15)
@ApiModelProperty(value = "操作记录cn")
private String contentCn;
/**操作记录en*/
@Excel(name = "操作记录en", width = 15)
@ApiModelProperty(value = "操作记录en")
private String contentEn;
@TableField(exist = false)
@ApiModelProperty(value = "操作记录")
private String content;
}
@@ -0,0 +1,74 @@
package com.jero.modules.ota.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* @Description: OTA管理权限列表
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
@Data
@TableName("ota_manage_permission")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ota_manage_permission对象", description="OTA管理权限列表")
public class OtaManagePermission implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**人员ID*/
@Excel(name = "人员ID", width = 15)
@ApiModelProperty(value = "人员ID")
private String userId;
/**对应applyID*/
@Excel(name = "对应applyID", width = 15)
@ApiModelProperty(value = "对应applyID")
private String applyId;
}
@@ -0,0 +1,121 @@
package com.jero.modules.ota.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* @Description: OTA管理
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
@Data
@TableName("ota_manage_receive")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ota_manage_receive对象", description="OTA管理")
public class OtaManageReceive implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**软件版本*/
@Excel(name = "软件版本", width = 15)
@ApiModelProperty(value = "软件版本")
private String plannedBpLaunchBatch;
/**更新时间(yyyyMMdd*/
@Excel(name = "更新时间(yyyyMMdd", width = 15)
@ApiModelProperty(value = "更新时间(yyyyMMdd")
private String updateDate;
/**主题*/
@Excel(name = "主题", width = 15)
@ApiModelProperty(value = "主题")
private String summary;
/**VDR状态*/
@Excel(name = "VDR状态", width = 15)
@ApiModelProperty(value = "VDR状态")
private String status;
/**认证影响*/
@Excel(name = "认证影响", width = 15)
@ApiModelProperty(value = "认证影响")
private String homologationImpact;
/**影响描述*/
@Excel(name = "影响描述", width = 15)
@ApiModelProperty(value = "影响描述")
private String homologation;
/**影响法规-CN*/
@Excel(name = "影响法规-CN", width = 15)
@ApiModelProperty(value = "影响法规-CN")
private String impactCnHomo;
/**影响法规-EU*/
@Excel(name = "影响法规-EU", width = 15)
@ApiModelProperty(value = "影响法规-EU")
private String impactEuHomo;
/**责任部门*/
@Excel(name = "责任部门", width = 15)
@ApiModelProperty(value = "责任部门")
private String masterDomain;
/**适用车型*/
@Excel(name = "适用车型", width = 15)
@ApiModelProperty(value = "适用车型")
private String appliedVehicleProject;
/**发布时间*/
@Excel(name = "发布时间", width = 15)
@ApiModelProperty(value = "发布时间")
private String releaseDate;
}
@@ -0,0 +1,96 @@
package com.jero.modules.ota.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
* @Description: OTA管理NSDP同步表
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
@Data
@TableName("ota_manage_receive_nsdp")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ota_manage_receive_nsdp对象", description="OTA管理NSDP同步表")
public class OtaManageReceiveNsdp implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
/**平台*/
@Excel(name = "平台", width = 15)
@ApiModelProperty(value = "平台")
private String platformName;
/**发布版本*/
@Excel(name = "发布版本", width = 15)
@ApiModelProperty(value = "发布版本")
private String releaseName;
/**发布类型*/
@Excel(name = "发布类型", width = 15)
@ApiModelProperty(value = "发布类型")
private String releaseType;
/**名称*/
@Excel(name = "名称", width = 15)
@ApiModelProperty(value = "名称")
private String dateName;
/**发布时间*/
@Excel(name = "发布时间", width = 15)
@ApiModelProperty(value = "发布时间")
private String releaseDate;
/**创建时间*/
@Excel(name = "创建时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "创建时间")
private java.util.Date createdAt;
}
@@ -0,0 +1,17 @@
package com.jero.modules.ota.entity;
import lombok.Data;
/**
* @description
* @date 2023/8/17 18:38
* @auth zhn
*/
@Data
public class OtaManageReceiveNsdpEO {
//软件版本
private String releaseName;
//发布时间
private String releaseDate;
}
@@ -0,0 +1,47 @@
package com.jero.modules.ota.enums;
import java.util.ArrayList;
import java.util.List;
public enum OtaCarEnum {
ALL("All", "All"),
CN_ALL("CN All", "EU All"),
EU_ALL("EU All", "EU All");
String name;
String value;
OtaCarEnum(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public static List<String> getOtaNameList() {
List<String> nameList = new ArrayList<>();
for (OtaCarEnum e : values()) {
nameList.add(e.getName());
}
return nameList;
}
}
@@ -0,0 +1,39 @@
package com.jero.modules.ota.enums;
import java.util.ArrayList;
import java.util.List;
public enum OtaHomoImpactEnum {
YES("Yes", "Yes"),
INTER_VALID("Internal Validation", "Internal Validation"),
HOMOEX_RETEST("Homo Extension - Retest", "Homo Extension - Retest"),
HOMOEX_PAPERWORK("Homo Extension - Paperwork", "Homo Extension - Paperwork");
String name;
String value;
OtaHomoImpactEnum(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
@@ -0,0 +1,60 @@
package com.jero.modules.ota.enums;
import org.apache.commons.lang3.StringUtils;
public enum OtaStatusEnum {
//待匹配、待审批、锁定、退回、待重新匹配
TO_BE_MATCHED("to_be_matched", "待匹配","To be matched"),
TO_BE_APPROVED("to_be_approved", "待审批","To be approved"),
LOCKED("locked", "锁定","Locked"),
REJECTED("rejected", "退回","Rejected"),
TO_BE_REMATCHED("to_be_rematched", "待重新匹配","To be rematched"),
NA("--", "--","--");
String key;
String nameCN;
String nameEN;
OtaStatusEnum(String key, String nameCN,String nameEN) {
this.key = key;
this.nameCN = nameCN;
this.nameEN = nameEN;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getNameCN() {
return nameCN;
}
public void setNameCN(String nameCN) {
this.nameCN = nameCN;
}
public String getNameEN() {
return nameEN;
}
public void setNameEN(String nameEN) {
this.nameEN = nameEN;
}
public static OtaStatusEnum getByKey(String key){
String result = "";
for (OtaStatusEnum enu : OtaStatusEnum.values()) {
if(StringUtils.equals(enu.key,key)){
return enu;
}
}
return OtaStatusEnum.NA;
}
}
@@ -0,0 +1,211 @@
package com.jero.modules.ota.job;
import com.jero.modules.ota.entity.OtaManageReceive;
import com.jero.modules.ota.entity.OtaManageReceiveNsdp;
import com.jero.modules.ota.service.IOtaManageReceiveNsdpService;
import com.jero.modules.ota.service.IOtaManageReceiveService;
import com.jero.modules.system.util.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
public class OtaDataUpdate implements Job {
@Autowired
private IOtaManageReceiveService otaManageReceiveService;
@Autowired
private IOtaManageReceiveNsdpService otaManageReceiveNsdpService;
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* OTA数据更新
*
* @param jobExecutionContext
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
List<OtaManageReceive> omrSyncList = otaManageReceiveService.getReceiveSync();
List<OtaManageReceive> omrList = otaManageReceiveService.queryList();
List<OtaManageReceive> addList = new ArrayList<>();
List<String> delList = new ArrayList<>();
List<OtaManageReceive> updateList = new ArrayList<>();
for (OtaManageReceive omr : omrList) {
boolean delFlag = true;
for (OtaManageReceive omrSync : omrSyncList) {
if (omr.getId().equals(omrSync.getId())) {
delFlag = false;
if (!compareReceive(omr, omrSync)) {
updateList.add(omrSync);
}
}
}
if (delFlag) {
//同步数据中被删除
delList.add(omr.getId());
}
}
for (OtaManageReceive omrSync : omrSyncList) {
boolean addFlag = true;
for (OtaManageReceive omr : omrList) {
if (omr.getId().equals(omrSync.getId())) {
addFlag = false;
}
}
if (addFlag) {
//同步数据中新增
addList.add(omrSync);
}
}
if (CollectionUtils.isNotEmpty(addList)) {
otaManageReceiveService.saveBatch(addList);
}
if (CollectionUtils.isNotEmpty(addList)) {
otaManageReceiveService.deleteByIds(delList);
}
if (CollectionUtils.isNotEmpty(updateList)) {
otaManageReceiveService.updateBatchById(updateList);
}
List<OtaManageReceiveNsdp> omrnSyncList = otaManageReceiveNsdpService.getOtaManageReceiveNsdpSync();
List<OtaManageReceiveNsdp> omrnList = otaManageReceiveNsdpService.queryList();
List<OtaManageReceiveNsdp> addNsdpList = new ArrayList<>();
List<String> delNsdpList = new ArrayList<>();
List<OtaManageReceiveNsdp> updateNsdpList = new ArrayList<>();
for (OtaManageReceiveNsdp omrn : omrnList) {
boolean delFlag = true;
for (OtaManageReceiveNsdp omrnSync : omrnSyncList) {
if (omrn.getId().equals(omrnSync.getId())) {
delFlag = false;
if (!compareReceive(omrn, omrnSync)) {
updateNsdpList.add(omrnSync);
}
}
}
if (delFlag) {
//同步数据中被删除
delNsdpList.add(omrn.getId());
}
}
Map<String, Date> releaceDateMap = new HashMap<>();
Date today = new Date();
for (OtaManageReceiveNsdp omrnSync : omrnSyncList) {
boolean addFlag = true;
for (OtaManageReceiveNsdp omrn : omrnList) {
if (omrn.getId().equals(omrnSync.getId())) {
addFlag = false;
}
}
if (addFlag) {
//同步数据中新增
addNsdpList.add(omrnSync);
}
//找到最快来临的发布时间
Date releaceDate = releaceDateMap.get(omrnSync.getReleaseName());
try {
Date syncDate = sdf.parse(omrnSync.getReleaseDate());
if (null == releaceDate) {
releaceDateMap.put(omrnSync.getReleaseName(), syncDate);
} else {
if (syncDate.after(today) && syncDate.before(releaceDate)) {
releaceDateMap.put(omrnSync.getReleaseName(), syncDate);
}
}
} catch (ParseException e) {
e.printStackTrace();
}
}
if (CollectionUtils.isNotEmpty(addNsdpList)) {
otaManageReceiveNsdpService.saveBatch(addNsdpList);
}
if (CollectionUtils.isNotEmpty(delNsdpList)) {
otaManageReceiveNsdpService.deleteByIds(delNsdpList);
}
if (CollectionUtils.isNotEmpty(updateNsdpList)) {
otaManageReceiveNsdpService.updateBatchById(updateNsdpList);
}
List<OtaManageReceive> dateUpdateList = new ArrayList<>();
List<OtaManageReceive> omrListForDate = otaManageReceiveService.queryList();
for (OtaManageReceive omr : omrListForDate) {
if(releaceDateMap.containsKey(omr.getPlannedBpLaunchBatch())){
omr.setReleaseDate(sdf.format(releaceDateMap.get(omr.getPlannedBpLaunchBatch())));
dateUpdateList.add(omr);
}
}
if (CollectionUtils.isNotEmpty(dateUpdateList)) {
otaManageReceiveService.updateBatchById(dateUpdateList);
}
}
private boolean compareReceive(OtaManageReceiveNsdp omrn, OtaManageReceiveNsdp omrnSync) {
if (!StringUtils.equals(omrn.getPlatformName(), omrnSync.getPlatformName())) {
return false;
}
if (!StringUtils.equals(omrn.getReleaseName(), omrnSync.getReleaseName())) {
return false;
}
if (!StringUtils.equals(omrn.getReleaseType(), omrnSync.getReleaseType())) {
return false;
}
if (!StringUtils.equals(omrn.getDateName(), omrnSync.getDateName())) {
return false;
}
if (!StringUtils.equals(omrn.getReleaseDate(), omrnSync.getReleaseDate())) {
return false;
}
return true;
}
private boolean compareReceive(OtaManageReceive omr, OtaManageReceive omrSync) {
if (!StringUtils.equals(omr.getPlannedBpLaunchBatch(), omrSync.getPlannedBpLaunchBatch())) {
return false;
}
if (!StringUtils.equals(omr.getSummary(), omrSync.getSummary())) {
return false;
}
if (!StringUtils.equals(omr.getStatus(), omrSync.getStatus())) {
return false;
}
if (!StringUtils.equals(omr.getHomologationImpact(), omrSync.getHomologationImpact())) {
return false;
}
if (!StringUtils.equals(omr.getHomologation(), omrSync.getHomologation())) {
return false;
}
if (!StringUtils.equals(omr.getImpactCnHomo(), omrSync.getImpactCnHomo())) {
return false;
}
if (!StringUtils.equals(omr.getImpactEuHomo(), omrSync.getImpactEuHomo())) {
return false;
}
if (!StringUtils.equals(omr.getMasterDomain(), omrSync.getMasterDomain())) {
return false;
}
if (!StringUtils.equals(omr.getAppliedVehicleProject(), omrSync.getAppliedVehicleProject())) {
return false;
}
return true;
}
}
@@ -0,0 +1,43 @@
package com.jero.modules.ota.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.modules.ota.entity.OtaManageReceiveNsdpEO;
import com.jero.modules.ota.vo.VersionVO;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.pptx4j.pml.STTLTriggerRuntimeNode;
import java.util.List;
/**
* @Description: 数据对接表
* @Author: jero-boot
* @Date: 2023-08-09
* @Version: V1.0
*/
public interface OtaManageApplyEOMapper extends BaseMapper<OtaManageApplyEO> {
// Page<OtaManageApplyEO> getOtaPage(Page<OtaManageApplyEO> page, @Param("otaManageApplyEO") OtaManageApplyEO otaManageApplyEO);
List<OtaManageApplyEO> getOtaList(@Param("otaManageApplyEO") OtaManageApplyEO otaManageApplyEO);
/**
* 分车型列表-分页列表查询
* @param otaManageApplyEO
* @return
*/
List<OtaManageApplyEO> getOtaCarPage(@Param("otaManageApplyEO") OtaManageApplyEO otaManageApplyEO);
List<VersionVO> getByAppliedVehicleProject(@Param("appliedVehicleProject") String appliedVehicleProject);
List<OtaManageApplyEO> getOtaCarList(@Param("plannedBpLaunchBatch") String plannedBpLaunchBatch);
List<OtaManageReceiveNsdpEO> getReleaseDate(@Param("plannedBpLaunchBatchList") List<String> plannedBpLaunchBatchList);
List<VersionVO> getProjectVersion(@Param("car") String car, @Param("market") String market);
List<VersionVO> getVersionInfo(@Param("vdr") String vdr);
List<OtaManageApplyEO> getListByProjectId(@Param("projectId") String projectId,@Param("plannedBpLaunchBatch") String plannedBpLaunchBatch);
}
@@ -0,0 +1,17 @@
package com.jero.modules.ota.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.ota.entity.OtaManageHistory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: OTA管理列表历史记录
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
public interface OtaManageHistoryMapper extends BaseMapper<OtaManageHistory> {
}
@@ -0,0 +1,17 @@
package com.jero.modules.ota.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.ota.entity.OtaManagePermission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: OTA管理权限列表
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
public interface OtaManagePermissionMapper extends BaseMapper<OtaManagePermission> {
}
@@ -0,0 +1,21 @@
package com.jero.modules.ota.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.ota.entity.OtaManageReceive;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: OTA管理
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
public interface OtaManageReceiveMapper extends BaseMapper<OtaManageReceive> {
List<OtaManageReceive> getReceiveByVdr(@Param("vdrList") List<String> vdrList);
List<OtaManageReceive> getReceiveList();
List<OtaManageReceive> getReceiveSync();
}
@@ -0,0 +1,19 @@
package com.jero.modules.ota.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.modules.ota.entity.OtaManageReceiveNsdp;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: OTA管理NSDP同步表
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
public interface OtaManageReceiveNsdpMapper extends BaseMapper<OtaManageReceiveNsdp> {
List<OtaManageReceiveNsdp> getOtaManageReceiveNsdpSync();
}
@@ -0,0 +1,155 @@
<?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.ota.mapper.OtaManageApplyEOMapper">
<resultMap id="OtaManageApplyEOResultMap" type="com.jero.modules.ota.entity.OtaManageApplyEO">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="vdr" property="vdr" />
<result column="project_version" property="projectVersion" />
<result column="attestation_schedule" property="attestationSchedule" />
<result column="match_status" property="matchStatus" />
<result column="remark" property="remark" />
</resultMap>
<select id="getListByProjectId" resultType="com.jero.modules.ota.entity.OtaManageApplyEO">
select * from ota_manage_apply
JOIN ota_manage_receive ON ota_manage_apply.vdr = ota_manage_receive.id
<where>
<if test="projectId != null and projectId != ''">
ota_manage_apply.project_version in
<foreach collection="projectId.split(',')" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="plannedBpLaunchBatch != null and plannedBpLaunchBatch != ''">
and ota_manage_receive.planned_bp_launch_batch =#{plannedBpLaunchBatch}
</if>
</where>
</select>
<select id="getOtaList" resultType="com.jero.modules.ota.entity.OtaManageApplyEO">
select * from ota_manage_receive
<where>
<if test="otaManageApplyEO.plannedBpLaunchBatch != null and otaManageApplyEO.plannedBpLaunchBatch != ''">
planned_bp_launch_batch =#{otaManageApplyEO.plannedBpLaunchBatch}
</if>
<if test="otaManageApplyEO.appliedVehicleProject != null and otaManageApplyEO.appliedVehicleProject != ''">
and applied_vehicle_project LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.appliedVehicleProject}),'%')
</if>
<if test="otaManageApplyEO.market != null and otaManageApplyEO.market != ''">
and applied_vehicle_project LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.market}),'%')
</if>
<if test="otaManageApplyEO.vdr != null and otaManageApplyEO.vdr != ''">
and id LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.vdr}),'%')
</if>
<if test="otaManageApplyEO.summary != null and otaManageApplyEO.summary != ''">
and summary LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.summary}),'%')
</if>
<if test="otaManageApplyEO.impactHomo != null and otaManageApplyEO.impactHomo != ''">
and (impact_cn_homo LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.impactHomo}),'%')
and impact_eu_homo LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.impactHomo}),'%'))
</if>
</where>
order by create_time desc
</select>
<select id="getOtaCarPage" resultType="com.jero.modules.ota.entity.OtaManageApplyEO">
select omr.id as vdr,omr.planned_bp_launch_batch,omr.update_date,
omr.summary,omr.status,
omr.homologation_impact,omr.homologation,
omr.impact_cn_homo,omr.impact_eu_homo,
omr.master_domain,omr.applied_vehicle_project,
oma.id,oma.project_version,oma.attestation_schedule,oma.match_status,oma.remark,oma.vehicle_type
from ota_manage_receive omr
left join ota_manage_apply oma on oma.vdr = omr.id
<where>
1=1
<if test="otaManageApplyEO.plannedBpLaunchBatch != null and otaManageApplyEO.plannedBpLaunchBatch != ''">
and omr.planned_bp_launch_batch =#{otaManageApplyEO.plannedBpLaunchBatch}
</if>
<if test="otaManageApplyEO.vdr != null and otaManageApplyEO.vdr != ''">
and omr.id LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.vdr}),'%')
</if>
<if test="otaManageApplyEO.summary != null and otaManageApplyEO.summary != ''">
and omr.summary LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.summary}),'%')
</if>
<if test="otaManageApplyEO.impactHomo != null and otaManageApplyEO.impactHomo != ''">
and (omr.impact_cn_homo LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.impactHomo}),'%')
and omr.impact_eu_homo LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.impactHomo}),'%'))
</if>
<if test="otaManageApplyEO.appliedVehicleProject != null and otaManageApplyEO.appliedVehicleProject != ''">
and omr.applied_vehicle_project LIKE CONCAT(CONCAT('%',#{otaManageApplyEO.appliedVehicleProject}),'%')
</if>
</where>
order by omr.id desc
</select>
<select id="getByAppliedVehicleProject" resultType="com.jero.modules.ota.vo.VersionVO">
</select>
<select id="getOtaCarList" resultType="com.jero.modules.ota.entity.OtaManageApplyEO">
select * from ota_manage_receive
<if test="plannedBpLaunchBatch != null and plannedBpLaunchBatch != ''">
where planned_bp_launch_batch =#{plannedBpLaunchBatch}
</if>
</select>
<select id="getReleaseDate" resultType="com.jero.modules.ota.entity.OtaManageReceiveNsdpEO">
select * from ota_manage_receive_nsdp
where release_name in
<foreach collection="plannedBpLaunchBatchList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="getProjectVersion" resultType="com.jero.modules.ota.vo.VersionVO">
SELECT
plb.id projectId,
plb.parent_id parentId,
plb.target_market market,
plb.studio_engineer studio,
plb.project_version versionNumber,
pni.project_name car,
pyni.year_name yearName from project_library_base plb
join project_name_info pni on pni.id = plb.project_name_id
join project_year_name_info pyni on pyni.project_name_id = pni.id
where plb.target_market LIKE CONCAT(CONCAT('%',#{market}),'%')
and pni.project_name =#{car}
GROUP BY plb.id
ORDER BY project_version asc
</select>
<select id="getVersionInfo" resultType="com.jero.modules.ota.vo.VersionVO">
SELECT
plb.id projectId,
plb.parent_id parentId,
plb.target_market market,
plb.project_version versionNumber,
ptp.attestation_start_time,
ptp.attestation_end_time,
ptp.certification_submission,
oma.attestation_schedule,
oma.project_version,
pni.project_name car,
pyni.year_name
FROM
project_library_base plb
LEFT JOIN project_task_planning ptp ON plb.id = ptp.project_id
LEFT JOIN ota_manage_apply oma ON oma.project_version = plb.id
LEFT JOIN project_name_info pni ON pni.id = plb.project_name_id
LEFT JOIN project_year_name_info pyni ON pyni.project_name_id = pni.id
WHERE oma.vdr = #{vdr}
GROUP BY plb.id
</select>
</mapper>
@@ -0,0 +1,14 @@
<?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.ota.mapper.OtaManageHistoryMapper">
<resultMap id="OtaManageHistoryResultMap" type="com.jero.modules.ota.entity.OtaManageHistory">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="apply_id" property="applyId" />
<result column="content" property="content" />
</resultMap>
</mapper>
@@ -0,0 +1,14 @@
<?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.ota.mapper.OtaManagePermissionMapper">
<resultMap id="OtaManagePermissionResultMap" type="com.jero.modules.ota.entity.OtaManagePermission">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="user_id" property="userId" />
<result column="apply_id" property="applyId" />
</resultMap>
</mapper>
@@ -0,0 +1,39 @@
<?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.ota.mapper.OtaManageReceiveMapper">
<resultMap id="OtaManageReceiveResultMap" type="com.jero.modules.ota.entity.OtaManageReceive">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="planned_bp_launch_batch" property="plannedBpLaunchBatch" />
<result column="update_date" property="updateDate" />
<result column="summary" property="summary" />
<result column="status" property="status" />
<result column="homologation_impact" property="homologationImpact" />
<result column="homologation" property="homologation" />
<result column="impact_cn_homo" property="impactCnHomo" />
<result column="impact_eu_homo" property="impactEuHomo" />
<result column="master_domain" property="masterDomain" />
<result column="applied_vehicle_project" property="appliedVehicleProject" />
<result column="release_date" property="releaseDate" />
</resultMap>
<select id="getReceiveByVdr" resultType="com.jero.modules.ota.entity.OtaManageReceive">
select * from ota_manage_receive
where id in
<foreach collection="vdrList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="getReceiveList" resultType="com.jero.modules.ota.entity.OtaManageReceive">
select * from ota_manage_receive
</select>
<select id="getReceiveSync" resultType="com.jero.modules.ota.entity.OtaManageReceive">
select * from ota_manage_receive_sync
</select>
</mapper>
@@ -0,0 +1,21 @@
<?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.ota.mapper.OtaManageReceiveNsdpMapper">
<resultMap id="OtaManageReceiveNsdpResultMap" type="com.jero.modules.ota.entity.OtaManageReceiveNsdp">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="sys_org_code" property="sysOrgCode" />
<result column="platform_name" property="platformName" />
<result column="release_name" property="releaseName" />
<result column="release_type" property="releaseType" />
<result column="date_name" property="dateName" />
<result column="release_date" property="releaseDate" />
<result column="created_at" property="createdAt" />
</resultMap>
<select id="getOtaManageReceiveNsdpSync" resultType="com.jero.modules.ota.entity.OtaManageReceiveNsdp">
select * from ota_manage_receive_nsdp_sync
</select>
</mapper>
@@ -0,0 +1,137 @@
package com.jero.modules.ota.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.jero.modules.ota.vo.VersionVO;
import com.jero.modules.project.entity.ProjectLibraryBase;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
* @Description: 数据对接表
* @Author: jero-boot
* @Date: 2023-08-09
* @Version: V1.0
*/
public interface IOtaManageApplyEOService extends IService<OtaManageApplyEO> {
/**
* 保存
*
* @param otaManageApplyEO
* @return
*/
void add(OtaManageApplyEO otaManageApplyEO);
/**
* 更新
*
* @param otaManageApplyEO
* @return
*/
void editById(OtaManageApplyEO otaManageApplyEO);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过适用车型查询
*
* @param appliedVehicleProject
* @return
*/
List<VersionVO> getByAppliedVehicleProject(String appliedVehicleProject);
/**
* 列表查询
*
* @return
*/
List<OtaManageApplyEO> queryList();
/**
* OTA管理列表
* @param otaManageApplyEO
* @return
*/
List<OtaManageApplyEO> getOtaPage(OtaManageApplyEO otaManageApplyEO);
/**
* 全车型列表-分页列表查询
* @param otaManageApplyEO
* @return
*/
List<OtaManageApplyEO> getAllCarPage(OtaManageApplyEO otaManageApplyEO);
/**
* 分车型列表-分页列表查询
* @param otaManageApplyEO
* @return
*/
List<OtaManageApplyEO> getOtaCarPage(OtaManageApplyEO otaManageApplyEO,String cut);
/**
* 下拉数据-软件版本,适用车型,市场
* @return
*/
Map<String,Object> getPullDownList();
/**
下拉数据-全部和分车型(不含年款)
* @return
*/
List<String> getCarList(String cut,String plannedBpLaunchBatch);
/**
*
* @param carMarket
* @return
*/
List<VersionVO> getProjectVersionList(String carMarket,String cut);
/**
* 全车型和分车型详情
* @param vdr
* @return
*/
List<VersionVO> getVersionInfo(String vdr,String car,String cut);
void issueNotice(String id);
List<String> submit(List<OtaManageApplyEO> list, String cut);
void temporarySave(List<OtaManageApplyEO> list, String cut);
List<String> updateVdrBatch(List<OtaManageApplyEO> list, String projectVersion, String attestationSchedule, String remark, String cut);
List<String> applyRematch(String ids, String projectVersion,String cut);
List<String> confirm(String ids, String cut);
List<String> reject(String ids, String rejectReason,String cut);
List<OtaManageApplyEO> getVdrListByProject(String projectId, String cut);
List<Map<String, Object>> getStatisticalStatus(String projectId, String plannedBpLaunchBatch, String cut,List<ProjectLibraryBase> projectLibraryBaseList);
ModelAndView otaExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO);
ModelAndView allCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO);
ModelAndView oneCarExportXls(HttpServletRequest request, OtaManageApplyEO otaManageApplyEO);
}
@@ -0,0 +1,64 @@
package com.jero.modules.ota.service;
import com.jero.modules.ota.entity.OtaManageHistory;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: OTA管理列表历史记录
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
public interface IOtaManageHistoryService extends IService<OtaManageHistory> {
/**
* 保存
*
* @param otaManageHistory
* @return
*/
void add(OtaManageHistory otaManageHistory);
void add(String appId,String contentCn, String contentEn);
/**
* 更新
*
* @param otaManageHistory
* @return
*/
void editById(OtaManageHistory otaManageHistory);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
OtaManageHistory queryById(String id);
/**
* 列表查询
*
* @return
*/
List<OtaManageHistory> queryList();
}
@@ -0,0 +1,61 @@
package com.jero.modules.ota.service;
import com.jero.modules.ota.entity.OtaManagePermission;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: OTA管理权限列表
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
public interface IOtaManagePermissionService extends IService<OtaManagePermission> {
/**
* 保存
*
* @param otaManagePermission
* @return
*/
void add(OtaManagePermission otaManagePermission);
/**
* 更新
*
* @param otaManagePermission
* @return
*/
void editById(OtaManagePermission otaManagePermission);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
OtaManagePermission queryById(String id);
/**
* 列表查询
*
* @return
*/
List<OtaManagePermission> queryList();
}
@@ -0,0 +1,64 @@
package com.jero.modules.ota.service;
import com.jero.modules.ota.entity.OtaManageReceiveNsdp;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: OTA管理NSDP同步表
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
public interface IOtaManageReceiveNsdpService extends IService<OtaManageReceiveNsdp> {
/**
* 保存
*
* @param otaManageReceiveNsdp
* @return
*/
void add(OtaManageReceiveNsdp otaManageReceiveNsdp);
/**
* 更新
*
* @param otaManageReceiveNsdp
* @return
*/
void editById(OtaManageReceiveNsdp otaManageReceiveNsdp);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
OtaManageReceiveNsdp queryById(String id);
/**
* 列表查询
*
* @return
*/
List<OtaManageReceiveNsdp> queryList();
List<OtaManageReceiveNsdp> getOtaManageReceiveNsdpSync();
}
@@ -0,0 +1,70 @@
package com.jero.modules.ota.service;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.jero.modules.ota.entity.OtaManageReceive;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: OTA管理
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
public interface IOtaManageReceiveService extends IService<OtaManageReceive> {
/**
* 保存
*
* @param otaManageReceive
* @return
*/
void add(OtaManageReceive otaManageReceive);
/**
* 更新
*
* @param otaManageReceive
* @return
*/
void editById(OtaManageReceive otaManageReceive);
/**
* 通过id删除
*
* @param id
* @return
*/
void deleteById(String id);
/**
* 批量删除
*
* @param ids
* @return
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*
* @param id
* @return
*/
OtaManageReceive queryById(String id);
/**
* 列表查询
*
* @return
*/
List<OtaManageReceive> queryList();
List<OtaManageReceive> getReceiveByVdr(List<String> vdrList);
List<OtaManageReceive> getReceiveByplanned(String plannedBpLaunchBatch);
List<OtaManageReceive> getReceiveSync();
}
@@ -0,0 +1,99 @@
package com.jero.modules.ota.service.impl;
import com.jero.modules.ota.entity.OtaManageHistory;
import com.jero.modules.ota.mapper.OtaManageHistoryMapper;
import com.jero.modules.ota.service.IOtaManageHistoryService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: OTA管理列表历史记录
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
@Service
public class OtaManageHistoryServiceImpl extends ServiceImpl<OtaManageHistoryMapper, OtaManageHistory> implements IOtaManageHistoryService {
/**
* 保存
*
* @param otaManageHistory
* @return
*/
@Override
public void add(OtaManageHistory otaManageHistory) {
Date now = new Date();
otaManageHistory.setCreateTime(now);
otaManageHistory.setUpdateTime(now);
save(otaManageHistory);
}
@Override
public void add(String appId, String contentCn, String contentEn) {
OtaManageHistory his = new OtaManageHistory();
his.setApplyId(appId);
his.setContentCn(contentCn);
his.setContentEn(contentEn);
this.add(his);
}
/**
* 更新
*
* @param otaManageHistory
* @return
*/
@Override
public void editById(OtaManageHistory otaManageHistory) {
Date now = new Date();
otaManageHistory.setUpdateTime(now);
saveOrUpdate(otaManageHistory);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public OtaManageHistory queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<OtaManageHistory> queryList() {
return list();
}
}
@@ -0,0 +1,89 @@
package com.jero.modules.ota.service.impl;
import com.jero.modules.ota.entity.OtaManagePermission;
import com.jero.modules.ota.mapper.OtaManagePermissionMapper;
import com.jero.modules.ota.service.IOtaManagePermissionService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: OTA管理权限列表
* @Author: jero-boot
* @Date: 2023-08-20
* @Version: V1.0
*/
@Service
public class OtaManagePermissionServiceImpl extends ServiceImpl<OtaManagePermissionMapper, OtaManagePermission> implements IOtaManagePermissionService {
/**
* 保存
*
* @param otaManagePermission
* @return
*/
@Override
public void add(OtaManagePermission otaManagePermission) {
Date now = new Date();
otaManagePermission.setCreateTime(now);
otaManagePermission.setUpdateTime(now);
save(otaManagePermission);
}
/**
* 更新
*
* @param otaManagePermission
* @return
*/
@Override
public void editById(OtaManagePermission otaManagePermission) {
Date now = new Date();
otaManagePermission.setUpdateTime(now);
saveOrUpdate(otaManagePermission);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public OtaManagePermission queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<OtaManagePermission> queryList() {
return list();
}
}
@@ -0,0 +1,94 @@
package com.jero.modules.ota.service.impl;
import com.jero.modules.ota.entity.OtaManageReceiveNsdp;
import com.jero.modules.ota.mapper.OtaManageReceiveNsdpMapper;
import com.jero.modules.ota.service.IOtaManageReceiveNsdpService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: OTA管理NSDP同步表
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
@Service
public class OtaManageReceiveNsdpServiceImpl extends ServiceImpl<OtaManageReceiveNsdpMapper, OtaManageReceiveNsdp> implements IOtaManageReceiveNsdpService {
/**
* 保存
*
* @param otaManageReceiveNsdp
* @return
*/
@Override
public void add(OtaManageReceiveNsdp otaManageReceiveNsdp) {
Date now = new Date();
otaManageReceiveNsdp.setCreateTime(now);
otaManageReceiveNsdp.setUpdateTime(now);
save(otaManageReceiveNsdp);
}
/**
* 更新
*
* @param otaManageReceiveNsdp
* @return
*/
@Override
public void editById(OtaManageReceiveNsdp otaManageReceiveNsdp) {
Date now = new Date();
otaManageReceiveNsdp.setUpdateTime(now);
saveOrUpdate(otaManageReceiveNsdp);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public OtaManageReceiveNsdp queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<OtaManageReceiveNsdp> queryList() {
return list();
}
@Override
public List<OtaManageReceiveNsdp> getOtaManageReceiveNsdpSync() {
return this.getBaseMapper().getOtaManageReceiveNsdpSync();
}
}
@@ -0,0 +1,108 @@
package com.jero.modules.ota.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.modules.ota.entity.OtaManageReceive;
import com.jero.modules.ota.mapper.OtaManageReceiveMapper;
import com.jero.modules.ota.service.IOtaManageReceiveService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Date;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: OTA管理
* @Author: jero-boot
* @Date: 2023-08-21
* @Version: V1.0
*/
@Service
public class OtaManageReceiveServiceImpl extends ServiceImpl<OtaManageReceiveMapper, OtaManageReceive> implements IOtaManageReceiveService {
/**
* 保存
*
* @param otaManageReceive
* @return
*/
@Override
public void add(OtaManageReceive otaManageReceive) {
Date now = new Date();
otaManageReceive.setCreateTime(now);
otaManageReceive.setUpdateTime(now);
save(otaManageReceive);
}
/**
* 更新
*
* @param otaManageReceive
* @return
*/
@Override
public void editById(OtaManageReceive otaManageReceive) {
Date now = new Date();
otaManageReceive.setUpdateTime(now);
saveOrUpdate(otaManageReceive);
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Override
public OtaManageReceive queryById(String id) {
return getById(id);
}
/**
* 列表查询
*
* @return
*/
@Override
public List<OtaManageReceive> queryList() {
return this.getBaseMapper().getReceiveList();
}
@Override
public List<OtaManageReceive> getReceiveByVdr(List<String> vdrList) {
return this.getBaseMapper().getReceiveByVdr(vdrList);
}
@Override
public List<OtaManageReceive> getReceiveByplanned(String plannedBpLaunchBatch) {
QueryWrapper<OtaManageReceive> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(OtaManageReceive::getPlannedBpLaunchBatch, plannedBpLaunchBatch);
return this.list(queryWrapper);
}
@Override
public List<OtaManageReceive> getReceiveSync() {
return this.getBaseMapper().getReceiveSync();
}
}
@@ -0,0 +1,52 @@
package com.jero.modules.ota.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class AllCarExportCnVO {
@Excel(name = "VDR", width = 15)
@ApiModelProperty(value = "VDR")
private java.lang.String vdr;
@Excel(name = "主题", width = 15)
@ApiModelProperty(value = "主题")
private java.lang.String summary;
@Excel(name = "VDR状态", width = 15)
@ApiModelProperty(value = "VDR状态")
private java.lang.String status;
@Excel(name = "认证影响", width = 15)
@ApiModelProperty(value = "认证影响")
private java.lang.String homologationImpact;
@Excel(name = "影响描述", width = 30)
@ApiModelProperty(value = "影响描述")
private java.lang.String homologation;
@Excel(name = "影响法规-CN", width = 15)
@ApiModelProperty(value = "影响法规-CN")
private java.lang.String impactCnHomo;
@Excel(name = "影响法规-EU", width = 15)
@ApiModelProperty(value = "影响法规-EU")
private java.lang.String impactEuHomo;
@Excel(name = "责任部门", width = 15)
@ApiModelProperty(value = "责任部门")
private java.lang.String masterDomain;
@Excel(name = "适用车型", width = 50)
@ApiModelProperty(value = "适用车型")
private java.lang.String appliedVehicleProject;
}
@@ -0,0 +1,51 @@
package com.jero.modules.ota.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class AllCarExportEnVO {
@Excel(name = "VDR", width = 15)
@ApiModelProperty(value = "VDR")
private String vdr;
@Excel(name = "theme", width = 15)
@ApiModelProperty(value = "主题")
private String summary;
@Excel(name = "VDR status", width = 15)
@ApiModelProperty(value = "VDR状态")
private String status;
@Excel(name = "Authentication impact", width = 15)
@ApiModelProperty(value = "认证影响")
private String homologationImpact;
@Excel(name = "Impact statement", width = 30)
@ApiModelProperty(value = "影响描述")
private String homologation;
@Excel(name = "Influence statute-CN", width = 15)
@ApiModelProperty(value = "影响法规-CN")
private String impactCnHomo;
@Excel(name = "Influence statute-EU", width = 15)
@ApiModelProperty(value = "影响法规-EU")
private String impactEuHomo;
@Excel(name = "Duty Department", width = 15)
@ApiModelProperty(value = "责任部门")
private String masterDomain;
@Excel(name = "Vehicle Type", width = 50)
@ApiModelProperty(value = "适用车型")
private String appliedVehicleProject;
}
@@ -0,0 +1,91 @@
package com.jero.modules.ota.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
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;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class OneCarExportCnVO {
@Excel(name = "VDR", width = 15)
@ApiModelProperty(value = "VDR")
private java.lang.String vdr;
@Excel(name = "主题", width = 15)
@ApiModelProperty(value = "主题")
private java.lang.String summary;
@Excel(name = "VDR状态", width = 15)
@ApiModelProperty(value = "VDR状态")
private java.lang.String status;
@Excel(name = "认证影响", width = 15)
@ApiModelProperty(value = "认证影响")
private java.lang.String homologationImpact;
@Excel(name = "影响说明", width = 30)
@ApiModelProperty(value = "影响说明")
private java.lang.String homologation;
@Excel(name = "影响法规-CN", width = 15)
@ApiModelProperty(value = "影响法规-CN")
private java.lang.String impactCnHomo;
@Excel(name = "影响法规-EU", width = 15)
@ApiModelProperty(value = "影响法规-EU")
private java.lang.String impactEuHomo;
@Excel(name = "责任部门", width = 15)
@ApiModelProperty(value = "责任部门")
private java.lang.String masterDomain;
@Excel(name = "R&H Studio", width = 15)
@ApiModelProperty(value = "R&H Studio")
private java.lang.String studioText;
@Excel(name = "项目版本", width = 15)
@ApiModelProperty(value = "项目版本")
private java.lang.String projectVersionText;
@Excel(name = "认证开始", width = 15)
@ApiModelProperty(value = "认证开始")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date attestationStartTime;
@Excel(name = "认证申报", width = 15)
@ApiModelProperty(value = "认证申报")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date certificationSubmission;
@Excel(name = "认证批准", width = 15)
@ApiModelProperty(value = "认证批准")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date attestationEndTime;
@Excel(name = "认证进度", width = 15)
@ApiModelProperty(value = "认证进度")
private java.lang.String attestationSchedule;
@Excel(name = "匹配状态", width = 15)
@ApiModelProperty(value = "匹配状态")
private java.lang.String matchStatusText;
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private java.lang.String remark;
}
@@ -0,0 +1,90 @@
package com.jero.modules.ota.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
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;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class OneCarExportEnVO {
@Excel(name = "VDR", width = 15)
@ApiModelProperty(value = "VDR")
private String vdr;
@Excel(name = "theme", width = 15)
@ApiModelProperty(value = "主题")
private String summary;
@Excel(name = "VDR status", width = 15)
@ApiModelProperty(value = "VDR状态")
private String status;
@Excel(name = "Authentication impact", width = 15)
@ApiModelProperty(value = "认证影响")
private String homologationImpact;
@Excel(name = "Impact statement", width = 30)
@ApiModelProperty(value = "影响说明")
private String homologation;
@Excel(name = "Influence statute-CN", width = 15)
@ApiModelProperty(value = "影响法规-CN")
private String impactCnHomo;
@Excel(name = "Influence statute-EU", width = 15)
@ApiModelProperty(value = "影响法规-EU")
private String impactEuHomo;
@Excel(name = "Duty Department", width = 15)
@ApiModelProperty(value = "责任部门")
private String masterDomain;
@Excel(name = "R&H Studio", width = 15)
@ApiModelProperty(value = "R&H Studio")
private String studioText;
@Excel(name = "Project Version", width = 15)
@ApiModelProperty(value = "项目版本")
private String projectVersionText;
@Excel(name = "Homo Starts", width = 15)
@ApiModelProperty(value = "认证开始")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date attestationStartTime;
@Excel(name = "Certification declaration", width = 15)
@ApiModelProperty(value = "认证申报")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date certificationSubmission;
@Excel(name = "Homo Approved", width = 15)
@ApiModelProperty(value = "认证批准")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date attestationEndTime;
@Excel(name = "Homologation Progress", width = 15)
@ApiModelProperty(value = "认证进度")
private String attestationSchedule;
@Excel(name = "Matching state", width = 15)
@ApiModelProperty(value = "匹配状态")
private String matchStatusText;
@Excel(name = "remarks", width = 15)
@ApiModelProperty(value = "备注")
private String remark;
}
@@ -0,0 +1,34 @@
package com.jero.modules.ota.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class OtaExportCnVO {
@Excel(name = "软件版本", width = 15)
@ApiModelProperty(value = "软件版本")
private java.lang.String plannedBpLaunchBatch;
@Excel(name = "市场", width = 15)
@ApiModelProperty(value = "市场")
private java.lang.String market;
@Excel(name = "适用车型", width = 50)
@ApiModelProperty(value = "适用车型")
private java.lang.String appliedVehicleProject;
@Excel(name = "软件发布时间", width = 15)
@ApiModelProperty(value = "软件发布时间")
private String releaseDate;
}
@@ -0,0 +1,31 @@
package com.jero.modules.ota.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class OtaExportEnVO {
@Excel(name = "Software version", width = 15)
@ApiModelProperty(value = "软件版本")
private String plannedBpLaunchBatch;
@Excel(name = "Market", width = 15)
@ApiModelProperty(value = "市场")
private String market;
@Excel(name = "Vehicle Type", width = 50)
@ApiModelProperty(value = "适用车型")
private String appliedVehicleProject;
@Excel(name = "Software release time", width = 15)
@ApiModelProperty(value = "软件发布时间")
private String releaseDate;
}
@@ -0,0 +1,67 @@
package com.jero.modules.ota.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @description
* @date 2023/8/9 11:28
* @auth zhn
*/
@Data
public class VersionVO {
@ApiModelProperty(value = "项目id")
private String projectId;
@ApiModelProperty(value = "父id")
private String parentId;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "认证开始")
private Date attestationStartTime;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "认证申报")
private Date certificationSubmission;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "认证批准")
private Date attestationEndTime;
@ApiModelProperty(value = "认证进度")
private String attestationSchedule;
@ApiModelProperty(value = "认证进度")
private String attestationScheduleText;
@ApiModelProperty(value = "车型")
private String car;
@ApiModelProperty(value = "年款")
private String yearName;
@ApiModelProperty(value = "市场")
private String market;
@ApiModelProperty(value = "版本号")
private String versionNumber;
@ApiModelProperty(value = "studio")
private String studio;
@ApiModelProperty(value = "项目版本名称")
private String versionName;
@ApiModelProperty(value = "项目版本-id")
private java.lang.String projectVersion;
}
@@ -23,7 +23,9 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -103,8 +105,10 @@ public class ProjectTaskPlanningController extends JeroController<ProjectTaskPla
@ApiOperation(value="法规,认证任务计划 (各阶段确认进度) 表-编辑", notes="法规,认证任务计划 (各阶段确认进度) 表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@Validated @RequestBody ProjectTaskPlanning projectTaskPlanning) {
projectTaskPlanningService.editById(projectTaskPlanning);
return Result.OK("编辑成功!");
boolean matchVdr = projectTaskPlanningService.editById(projectTaskPlanning);
Map<String,Object> res = new HashMap<>();
res.put("matchVdr",matchVdr);
return Result.OK("编辑成功!",res);
}
/**
@@ -15,6 +15,8 @@ public enum CertificationProgressEnum {
COMPONENT_REPORT_NOT_SUBMITTED("部件报告未提交","Component report not submitted","5"),
COMPONENT_REPORT_SUBMITTED("部件报告已提交","Component report submitted","6"),
COMPONENT_REPORT_HAS_BEEN_STORED("部件报告已入库","Component report has been stored","7"),
NA("null","null","8"),
;
String name;
@@ -74,4 +76,14 @@ public enum CertificationProgressEnum {
}
return null;
}
public static CertificationProgressEnum getByValue(String value) {
CertificationProgressEnum[] values = values();
for (CertificationProgressEnum certificationProgressEnum : values) {
if (certificationProgressEnum.value.equals(value)) {
return certificationProgressEnum;
}
}
return NA;
}
}
@@ -26,4 +26,8 @@ public interface ProjectLibraryBaseMapper extends BaseMapper<ProjectLibraryBase>
List<ProjectLibraryBase> queryById(String id);
ProjectLibraryBase selectProjectName(@Param("projectLibraryId") String projectLibraryId);
List<ProjectLibraryBase> getListByIds(@Param("idList") List<String> idList);
}
@@ -290,4 +290,14 @@
WHERE
plb.id = #{projectLibraryId}
</select>
<select id="getListByIds" resultType="com.jero.modules.project.entity.ProjectLibraryBase">
<include refid="select_item"/>
where plb.id in
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
order by plb.create_time desc
</select>
</mapper>
@@ -184,4 +184,8 @@ public interface IProjectLibraryBaseService extends IService<ProjectLibraryBase>
* @return
*/
Result<?> overallReplacementUser(JSONObject json);
List<ProjectLibraryBase> queryList(List<String> projectIdList);
List<ProjectLibraryBase> getListByIds(List<String> projectIdList);
}
@@ -28,7 +28,7 @@ public interface IProjectTaskPlanningService extends IService<ProjectTaskPlannin
* @param projectTaskPlanning
* @return
*/
void editById(ProjectTaskPlanning projectTaskPlanning);
boolean editById(ProjectTaskPlanning projectTaskPlanning);
/**
* 通过id删除
@@ -22,6 +22,8 @@ import com.jero.modules.cert.template.enums.ControlTypeEnum;
import com.jero.modules.dummy.enums.OrderEnum;
import com.jero.modules.enums.DictCodeEnum;
import com.jero.modules.feishu.enums.TemplateInfoEnum2;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.jero.modules.ota.service.impl.OtaManageApplyEOServiceImpl;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.*;
import com.jero.modules.project.mapper.ProjectLawsInventoryEOMapper;
@@ -48,6 +50,7 @@ import com.jero.modules.todoCenter.service.IProcessInfoDetailEOService;
import com.jero.modules.top.entity.TopProjectEO;
import com.jero.modules.top.service.ITopProjectEOService;
import com.jero.modules.wkflow.enums.FlowTypeEnum;
import javafx.beans.binding.ObjectBinding;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
@@ -173,6 +176,8 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
@Autowired
private IProjectLibraryStatisticsService projectLibraryStatisticsService;
@Autowired
private OtaManageApplyEOServiceImpl otaManageApplyEOService;
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static DecimalFormat df = new DecimalFormat("#.00");
@@ -2576,6 +2581,7 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
this.exportRegulatoryManagement(workbook,params);
this.exportCertificationManagement(workbook,params);
this.exportParameterCollecting(workbook,params);
this.exportOtaCollecting(workbook,params);
try {
response.setHeader("Content-Disposition",
"attachment; filename=" + fileName);
@@ -3107,6 +3113,93 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
}
}
}
private void exportOtaCollecting(HSSFWorkbook workbook, Map<String, Object> params) {
String cut = (String) params.get("cut");
String sheetName = "OTA状态";
String firstTitle = "匹配状态统计,OTA认证进度统计";
String secondTitle = "软件版本,待匹配,待审批,锁定,退回,未开始,进行中,实验通过,实验失败,部件报告未提交,部件报告已提交,部件报告已入库";
if(StringUtils.equals(cut,CutEnum.EN.getValue())){
sheetName = "OTA status";
firstTitle = "Matching state statistics,OTA authentication progress statistics";
secondTitle = "Software version," +
"To be matched," +
"To be approved," +
"lock," +
"Reject,"+
"Not started," +
"Ongoing," +
"Test Passed," +
"Test Failed," +
"Component report not submitted," +
"Component report submitted," +
"Component report has been stored";
}
HSSFSheet sheet = workbook.createSheet(sheetName);
//合并单元格 起始行,结束行,起始列,结束列
CellRangeAddress region1 = new CellRangeAddress(0, 0, 1, 4);
sheet.addMergedRegion(region1);
CellRangeAddress region2 = new CellRangeAddress(0, 0, 5, 11);
sheet.addMergedRegion(region2);
String[] firstTitleArr = firstTitle.split(",");
String[] secondTitleArr = secondTitle.split(",");
Row firstRow = sheet.createRow(0);
Row secondRow = sheet.createRow(1);
CellStyle cellStyleTitle = workbook.createCellStyle();
cellStyleTitle.setAlignment(HorizontalAlignment.CENTER);
for (int i = 0; i <= 11; i++){
sheet.setColumnWidth(i, 3500);
Cell firstRowCell = firstRow.createCell(i);
firstRowCell.setCellStyle(cellStyleTitle);
if(i == 1){
firstRowCell.setCellValue(firstTitleArr[0]);
}else if(i==5){
firstRowCell.setCellValue(firstTitleArr[1]);
}
Cell secondRowCell = secondRow.createCell(i);
secondRowCell.setCellValue(secondTitleArr[i]);
}
String projectLibraryId = (String) params.get("projectLibraryId");
List<Map<String, Object>> mapList = otaManageApplyEOService.getStatisticalStatus(projectLibraryId, null, cut,null);
if(ObjectUtils.isNotEmpty(mapList)){
int dataIndex = 2;
for (Map<String, Object> map : mapList) {
String plannedBpLaunchBatch = (String) map.get("plannedBpLaunchBatch");
Map<String, Object> matchStatusMap = (Map<String, Object>)map.get("matchStatusMap");
Map<String, Object> attestationScheduleMap = (Map<String, Object>)map.get("attestationScheduleMap");
String.valueOf(matchStatusMap.get("locked"));
String locked = String.valueOf(matchStatusMap.get("locked"));
String rejected = String.valueOf(matchStatusMap.get("rejected"));
String to_be_approved = String.valueOf(matchStatusMap.get("to_be_approved"));
String to_be_matched = String.valueOf(matchStatusMap.get("to_be_matched"));
String Component_report_has_been_stored = String.valueOf(attestationScheduleMap.get("Component_report_has_been_stored"));
String Component_report_not_submitted = String.valueOf(attestationScheduleMap.get("Component_report_not_submitted"));
String Component_report_submitted = String.valueOf(attestationScheduleMap.get("Component_report_submitted"));
String In_progress = String.valueOf(attestationScheduleMap.get("In_progress"));
String Not_start =String.valueOf(attestationScheduleMap.get("Not_start"));
String Test_failed = String.valueOf(attestationScheduleMap.get("Test_failed"));
String Test_passed = String.valueOf(attestationScheduleMap.get("Test_passed"));
Row dataRow = sheet.createRow(dataIndex);
dataRow.createCell(0).setCellValue(plannedBpLaunchBatch);
dataRow.createCell(1).setCellValue(to_be_matched);
dataRow.createCell(2).setCellValue(to_be_approved);
dataRow.createCell(3).setCellValue(locked);
dataRow.createCell(4).setCellValue(rejected);
dataRow.createCell(5).setCellValue(Not_start);
dataRow.createCell(6).setCellValue(In_progress);
dataRow.createCell(7).setCellValue(Test_passed);
dataRow.createCell(8).setCellValue(Test_failed);
dataRow.createCell(9).setCellValue(Component_report_not_submitted);
dataRow.createCell(10).setCellValue(Component_report_submitted);
dataRow.createCell(11).setCellValue(Component_report_has_been_stored);
dataIndex ++;
}
}
}
/**
* 导出认证参数收集-设置数据
@@ -3423,6 +3516,24 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl<ProjectLibraryBas
return result != 0 ? df.format(result) : "0";
}
@Override
public List<ProjectLibraryBase> queryList(List<String> projectIdList) {
QueryWrapper<ProjectLibraryBase> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id",projectIdList);
List<ProjectLibraryBase> res = this.list(queryWrapper);
return res;
}
@Override
public List<ProjectLibraryBase> getListByIds(List<String> projectIdList) {
List<ProjectLibraryBase> res = new ArrayList<>();
if(CollectionUtils.isNotEmpty(projectIdList)){
res = this.getBaseMapper().getListByIds(projectIdList);
}
return res;
}
}
@@ -1,13 +1,10 @@
package com.jero.modules.project.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.utils.IOUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.DictModel;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.DateUtils;
import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO;
@@ -20,8 +17,21 @@ import com.jero.modules.cert.collect.service.IParamsManifestEOService;
import com.jero.modules.cert.collect.service.IParamsManifestHistoryEOService;
import com.jero.modules.cert.report.entity.ParamsReportConfigDataEO;
import com.jero.modules.cert.template.enums.ControlTypeEnum;
import com.jero.modules.project.entity.*;
import com.jero.modules.project.enums.*;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.jero.modules.ota.service.impl.OtaManageApplyEOServiceImpl;
import com.jero.modules.project.entity.ConditionAssessmentEO;
import com.jero.modules.project.entity.ProjectCertificationInventoryEO;
import com.jero.modules.project.entity.ProjectLawsInventoryEO;
import com.jero.modules.project.entity.ProjectLibraryBase;
import com.jero.modules.project.entity.ProjectTaskInventoryEO;
import com.jero.modules.project.entity.ProjectTaskPlanning;
import com.jero.modules.project.enums.CertificationProgressEnum;
import com.jero.modules.project.enums.CurrentProjectStatusEnum;
import com.jero.modules.project.enums.InventoryAffirmStatusEnum;
import com.jero.modules.project.enums.ProjectRoleEnum;
import com.jero.modules.project.enums.ProjectTaskPlanningNameEnum;
import com.jero.modules.project.enums.ReviewResultEnum;
import com.jero.modules.project.enums.TaskAffirmStatusEnum;
import com.jero.modules.project.mapper.ProjectUserPermissionMapper;
import com.jero.modules.project.service.IConditionAssessmentEOService;
import com.jero.modules.project.service.IProjectCertificationInventoryEOService;
@@ -29,7 +39,6 @@ import com.jero.modules.project.service.IProjectLibraryStatisticsService;
import com.jero.modules.project.service.IProjectStatusBoardService;
import com.jero.modules.project.vo.TimeNodeVO;
import com.jero.modules.system.entity.SysDictItem;
import com.jero.modules.system.enums.DicCodeEnum;
import com.jero.modules.system.mapper.SysRoleMapper;
import com.jero.modules.system.service.IProjectUserBrandService;
import com.jero.modules.system.service.ISysUserService;
@@ -41,7 +50,12 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
@@ -56,8 +70,17 @@ import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -103,6 +126,8 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
private IParamsCollectManifestHistoryEOService paramsCollectManifestHistoryEOService;
@Autowired
private IProjectLibraryStatisticsService projectLibraryStatisticsService;
@Autowired
private OtaManageApplyEOServiceImpl otaManageApplyEOService;
/**
@@ -650,6 +675,24 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
List<ProjectTaskPlanning> ptpEoList = this.projectTaskPlanningService.list();
List<ParamsManifestEO> pmEoList = this.paramsManifestEOService.list();
pmEoList.addAll(this.paramsManifestHistoryEOService.list());
LambdaQueryWrapper<OtaManageApplyEO> wrapper = new LambdaQueryWrapper<>();
wrapper.isNotNull(OtaManageApplyEO::getProjectVersion);
List<String> projectIdList = otaManageApplyEOService.list(wrapper).stream().map(OtaManageApplyEO::getProjectVersion).distinct().collect(Collectors.toList());
List<Map<String, Object>> mapList = new ArrayList<>();
if(!projectIdList.isEmpty()){
List<String> projectIdListTemp = plbEoList.stream()
.filter(e -> projectIdList.contains(e.getId())).map(ProjectLibraryBase::getId).distinct().collect(Collectors.toList());
if(!projectIdListTemp.isEmpty()){
for (String projectId : projectIdListTemp) {
List<Map<String, Object>> statisticalStatus = otaManageApplyEOService.getStatisticalStatus(projectId,
"",
projectLibraryBase.getCut(),plbEoList);
mapList.addAll(statisticalStatus);
}
}
}
log.info("一阶段消耗时间:" + (System.currentTimeMillis() - startTime));
List<ParamsCollectManifestEO> pcmEoList = this.paramsCollectManifestEOService.getList(null);
List<ParamsCollectManifestHistoryEO> pcmHisEoList = this.paramsCollectManifestHistoryEOService.list();
@@ -667,6 +710,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
HSSFSheet corssProjectProgressSheet = createCorssProjectProgressSheet(workbook, projectLibraryBase);
HSSFSheet overviewCrossProjectProgressSheet = this.createOverviewCrossProjectProgressSheet(workbook, projectLibraryBase);
HSSFSheet otaSheet = createOtaSheet(workbook, projectLibraryBase);
CellStyle cellStyleTitle = workbook.createCellStyle();
cellStyleTitle.setAlignment(HorizontalAlignment.CENTER);
cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -690,14 +734,24 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
}
});
// 创建线程三
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
exportOtaSetData(mapList, otaSheet, finalPlbEoList);
}
});
// 启动线程一和线程二
thread1.start();
thread2.start();
thread3.start();
// 等待线程一和线程二执行完毕
try {
thread1.join();
thread2.join();
thread3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
@@ -721,6 +775,45 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
log.info("总消耗时间:" + (System.currentTimeMillis() - startTime));
}
private void exportOtaSetData(List<Map<String, Object>> finalStatisticalStatus, HSSFSheet otaSheet,List<ProjectLibraryBase> plbEoList) {
if(ObjectUtils.isNotEmpty(finalStatisticalStatus)){
int dataIndex = 2;
for (Map<String, Object> map : finalStatisticalStatus) {
String plannedBpLaunchBatch = (String) map.get("plannedBpLaunchBatch");
Map<String, Object> matchStatusMap = (Map<String, Object>)map.get("matchStatusMap");
Map<String, Object> attestationScheduleMap = (Map<String, Object>)map.get("attestationScheduleMap");
String showName = String.valueOf(map.get("showName"));
String locked = String.valueOf(matchStatusMap.get("locked"));
String rejected = String.valueOf(matchStatusMap.get("rejected"));
String to_be_approved = String.valueOf(matchStatusMap.get("to_be_approved"));
String to_be_matched = String.valueOf(matchStatusMap.get("to_be_matched"));
String Component_report_has_been_stored = String.valueOf(attestationScheduleMap.get("Component_report_has_been_stored"));
String Component_report_not_submitted = String.valueOf(attestationScheduleMap.get("Component_report_not_submitted"));
String Component_report_submitted = String.valueOf(attestationScheduleMap.get("Component_report_submitted"));
String In_progress = String.valueOf(attestationScheduleMap.get("In_progress"));
String Not_start =String.valueOf(attestationScheduleMap.get("Not_start"));
String Test_failed = String.valueOf(attestationScheduleMap.get("Test_failed"));
String Test_passed = String.valueOf(attestationScheduleMap.get("Test_passed"));
Row dataRow = otaSheet.createRow(dataIndex);
dataRow.createCell(0).setCellValue(showName);
dataRow.createCell(1).setCellValue(plannedBpLaunchBatch);
dataRow.createCell(2).setCellValue(to_be_matched);
dataRow.createCell(3).setCellValue(to_be_approved);
dataRow.createCell(4).setCellValue(locked);
dataRow.createCell(5).setCellValue(rejected);
dataRow.createCell(6).setCellValue(Not_start);
dataRow.createCell(7).setCellValue(In_progress);
dataRow.createCell(8).setCellValue(Test_passed);
dataRow.createCell(9).setCellValue(Test_failed);
dataRow.createCell(10).setCellValue(Component_report_not_submitted);
dataRow.createCell(11).setCellValue(Component_report_submitted);
dataRow.createCell(12).setCellValue(Component_report_has_been_stored);
dataIndex ++;
}
}
}
/**
* 导出跨项目进度
* @param workbook
@@ -1165,6 +1258,66 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService
}
return sheet;
}
public HSSFSheet createOtaSheet(HSSFWorkbook workbook, ProjectLibraryBase projectLibraryBase){
String cut = projectLibraryBase.getCut();
String sheetName = "OTA状态";
String firstTitle = "项目,软件版本,匹配状态统计,OTA认证进度统计";
String secondTitle = ",,待匹配,待审批,锁定,退回,未开始,进行中,实验通过,实验失败,部件报告未提交,部件报告已提交,部件报告已入库";
if(com.jero.modules.system.util.StringUtils.equals(cut,CutEnum.EN.getValue())){
sheetName = "OTA status";
firstTitle = "Project,Software version,Matching state statistics,OTA authentication progress statistics";
secondTitle = ",,To be matched," +
"To be approved," +
"lock," +
"Reject,"+
"Not started," +
"Ongoing," +
"Test Passed," +
"Test Failed," +
"Component report not submitted," +
"Component report submitted," +
"Component report has been stored";
}
HSSFSheet sheet = workbook.createSheet(sheetName);
CellRangeAddress region1 = new CellRangeAddress(0, 1, 0, 0);
sheet.addMergedRegion(region1);
CellRangeAddress region2 = new CellRangeAddress(0, 1, 1, 1);
sheet.addMergedRegion(region2);
CellRangeAddress region3 = new CellRangeAddress(0, 0, 2, 5);
sheet.addMergedRegion(region3);
CellRangeAddress region4 = new CellRangeAddress(0, 0, 6, 12);
sheet.addMergedRegion(region4);
String[] firstTitleArr = firstTitle.split(",");
String[] secondTitleArr = secondTitle.split(",");
Row firstRow = sheet.createRow(0);
Row secondRow = sheet.createRow(1);
CellStyle cellStyleTitle = workbook.createCellStyle();
cellStyleTitle.setAlignment(HorizontalAlignment.CENTER);
cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER);
for (int i = 0; i <= 8; i++){
sheet.setColumnWidth(i, 4000);
Cell firstRowCell = firstRow.createCell(i);
firstRowCell.setCellStyle(cellStyleTitle);
if(i == 0){
firstRowCell.setCellValue(firstTitleArr[0]);
}else if(i == 1){
firstRowCell.setCellValue(firstTitleArr[1]);
}else if(i == 2){
firstRowCell.setCellValue(firstTitleArr[2]);
}else if(i == 6){
firstRowCell.setCellValue(firstTitleArr[3]);
}
if(i >= 2){
Cell secondRowCell = secondRow.createCell(i);
secondRowCell.setCellStyle(cellStyleTitle);
secondRowCell.setCellValue(secondTitleArr[i]);
}
}
return sheet;
}
/**
* 导出跨项目进度概览-设置数据
@@ -4,12 +4,15 @@ package com.jero.modules.project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.ota.entity.OtaManageApplyEO;
import com.jero.modules.ota.service.IOtaManageApplyEOService;
import com.jero.modules.project.entity.ProjectTaskPlanning;
import com.jero.modules.project.enums.PlanStatusEnum;
import com.jero.modules.project.enums.ProjectTaskPlanningNameEnum;
import com.jero.modules.project.mapper.ProjectTaskPlanningMapper;
import com.jero.modules.project.service.IProjectTaskPlanningService;
import com.jero.modules.project.vo.TimeNodeVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
@@ -31,6 +34,8 @@ public class ProjectTaskPlanningServiceImpl extends ServiceImpl<ProjectTaskPlann
@Autowired
private ProjectTaskPlanningMapper projectTaskPlanningMapper;
@Autowired
private IOtaManageApplyEOService otaManageApplyEOService;
/**
* 保存
*
@@ -52,14 +57,40 @@ public class ProjectTaskPlanningServiceImpl extends ServiceImpl<ProjectTaskPlann
* 更新
*
* @param projectTaskPlanning
* @return
* @return 是否需要跳转VDR
*/
@Override
public void editById(ProjectTaskPlanning projectTaskPlanning) {
public boolean editById(ProjectTaskPlanning projectTaskPlanning) {
boolean matchVdr = false;
if (null != projectTaskPlanning && StringUtils.isNotEmpty(projectTaskPlanning.getId())) {
ProjectTaskPlanning oldPlanning = this.getById(projectTaskPlanning.getId());
if (compareDate(oldPlanning.getAttestationStartTime(), projectTaskPlanning.getAttestationStartTime())
|| compareDate(oldPlanning.getCertificationSubmission(), projectTaskPlanning.getCertificationSubmission())
|| compareDate(oldPlanning.getAttestationEndTime(), projectTaskPlanning.getAttestationEndTime())
) {
//studio修改认证计划中认证开始、认证申报、认证批准时间是进行弹窗提示
List<OtaManageApplyEO> vdrList = otaManageApplyEOService.getVdrListByProject(projectTaskPlanning.getProjectId(),"");
if(CollectionUtils.isNotEmpty(vdrList)){
matchVdr = true;
}
}
deleteById(projectTaskPlanning.getId());
add(projectTaskPlanning);
}
return matchVdr;
}
private boolean compareDate(Date oldDate, Date newDate) {
if (oldDate == null) {
if (newDate != null) {
return true;
}
} else {
if (newDate == null || (newDate != null && !oldDate.equals(newDate))) {
return true;
}
}
return false;
}
/**
+27
View File
@@ -1926,5 +1926,32 @@ module.exports = {
processInitiationOne:'Process Initiation',
taskHandlingOne:'Task Handling',
taskReview:'Task Review',
softwareversion:'Software version',
softwareplatform:'Software platform',
softwarereleasetime:'Software release time',
theme:'theme',
influencestatute:'Influence statute',
vdrste:'VDR status',
impactdescription:'Impact description',
authenticationimpact:'Authentication impact',
impactstatement:'Impact statement',
certificationdeclaration:'Certification declaration',
matchingstate:'Matching state',
issuenotice:'Issue notice',
applyforrematch:'Apply for rematch',
notificationsent:'Is a notification sent?',
VDRDetails:'VDR Details',
applicationprojectversion:'Application project version',
selectlocked:'You can select only the data whose matching status is locked',
otastatus:'OTA status',
Matchingstatestatistics:'Matching state statistics',
OTaauthenticationprogressstatistics:'OTA authentication progress statistics',
tobematched:'To be matched',
Pendingapproval:'To be approved',
lock:'lock',
datacannotbeedited:'This data cannot be edited',
Rematchornot:'Rematch or not',
Modifyremarks:'Modify remarks',
Reasonforreturn:'Reason for return',
maintenanceTemplate:'Maintenance template',
}
+27
View File
@@ -3883,4 +3883,31 @@ module.exports = {
taskHandlingOne:'任务办理',
taskReview:'任务审查',
maintenanceTemplate:'维护模板',
softwareversion:'软件版本',
softwareplatform:'软件平台',
softwarereleasetime:'软件发布时间',
theme:'主题',
influencestatute:'影响法规',
vdrste:'VDR状态',
impactdescription:'影响描述',
authenticationimpact:'认证影响',
impactstatement:'影响说明',
certificationdeclaration:'认证申报',
matchingstate:'匹配状态',
issuenotice:'下发通知',
applyforrematch:'申请重新匹配',
notificationsent:'是否下发通知',
VDRDetails:'VDR详情',
applicationprojectversion:'应用项目版本',
selectlocked:'只能选择匹配状态为锁定的数据',
otastatus:'OTA状态',
Matchingstatestatistics:'匹配状态统计',
OTaauthenticationprogressstatistics:'OTA认证进度统计',
tobematched:'待匹配',
Pendingapproval:'待审批',
lock:'锁定',
datacannotbeedited:'该数据不能进行编辑',
Rematchornot:'是否重新匹配',
Modifyremarks:'修改备注',
Reasonforreturn:'退回原因'
}
@@ -11,6 +11,7 @@
<a-select v-else-if="tagType=='select'" allowClear :getPopupContainer="getPopupContainer"
show-search
optionFilterProp="label"
:autoClearSearchValue="false"
:placeholder="placeholder" :disabled="disabled" :value="getValueSting" @change="handleInput">
<!-- <a-select-option :value="null">{{$t('pleaseSelect')}}</a-select-option>-->
<a-select-option v-for="(item, key) in dictOptionsValue"
@@ -0,0 +1,249 @@
<!--重新匹配-->
<template>
<a-modal
:title="$t('applyforrematch')"
:width="600"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('projectVersion')">
{{$t('projectVersion')}}</span>
</div>
<a-form-model-item class="itemModel" prop="projectVersion">
<a-select
class="box-input propbox"
style="width: 90%"
v-model='formInline.projectVersion'
showSearch
optionFilterProp="label"
:autoClearSearchValue="false"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
allowClear
:placeholder="$t('PleaseSelect')+$t('projectVersion')">
<!-- <a-select-option :value="null">{{$t('pleaseSelect')}}</a-select-option>-->
<a-select-option v-for="(item, key) in projectVersionList"
:label='item.versionName'
:key="key"
:value="item.projectId">
<span style="display: inline-block;width: 100%" :title=" item.versionName">
{{ item.versionName }}
</span>
</a-select-option>
</a-select>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</template>
<script>
import { getAction, postAction, putAction } from '@/api/manage'
import moment from 'moment'
export default {
name: 'settingList',
props: ['url'],
data() {
return {
visible: false,
confirmLoading: false,
transittime:false,
returntime:false,
propflag: false,
projectVersionList:[],
formInline: {
bazt:undefined,
batjsj:'',
tgthsj:'',
bz:'',
},
rules: {
projectVersion: [
{
required: true,
message: this.$t('projectVersion') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// batjsj: [
// {
// required: true,
// message: this.$t('filingtime') + this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
// bz: [
// { min: 1, max: 500, message: this.$t('cantExeed') + '500' + this.$t('characters'), trigger: 'blur' }
// ],
// tgthsj: [
// {
// required: true,
// message: this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
},
ids: []
}
},
mounted() {
},
methods: {
edit(row,vehicleTypeCode) {
this.ids = row
this.vehicleTypeCode = vehicleTypeCode
this.getprojectList()
this.visible = true
this.$nextTick(() => {
this.formInline = {}
this.$refs.ruleForm.clearValidate()
})
},
getprojectList(){
getAction('/ota/otaManageApplyEO/getProjectVersionList', {carMarket:this.vehicleTypeCode}).then((res) => {
if (res.success) {
this.projectVersionList = res.result
} else {
}
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
let query = {
...this.formInline,
ids:this.ids.join(',')
}
this.confirmLoading = true
getAction('/ota/otaManageApplyEO/applyRematch', query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
this.confirmLoading = false
this.ids = []
this.$emit('getList')
} else {
this.$message.warning(this.$t('operationFailed'))
this.confirmLoading = false
}
})
}
})
},
handleCancel() {
this.formInline = {}
this.ids = []
this.visible = false
},
// dateChange(item) {
// this.formInline[item.db_field_name] = this.formInline[item.db_field_name] ? moment(this.formInline[item.db_field_name]).format('YYYY-MM-DD') : ''
// }
}
}
</script>
<style>
.formAdd .ant-form-item-label {
width: 130px;
}
.formAdd .ant-form-item-control-wrapper {
display: inline-block;
width: 100%;
}
/*.formAdd .ant-form-item {*/
/* margin-bottom: 20px;*/
/*}*/
.itemModel .ant-form-item-control-wrapper {
width: 90%;
}
.box-input .ant-select-selection--single {
height: 38px;
}
.box-input .ant-select-selection--multiple {
height: 38px;
}
.box-input .ant-select-selection__rendered {
line-height: 38px;
height: 38px;
}
.box-input .ant-select-selection--multiple .ant-select-selection__rendered > ul > li {
margin-top: 6px;
}
.box-input .ant-calendar-picker {
line-height: 38px;
height: 38px;
}
.box-input .ant-calendar-picker-input {
height: 38px;
}
.box-input .ant-input-number-input-wrap {
line-height: 38px;
height: 38px;
}
</style>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.title-text {
width: 144px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 42px;
}
.box-input {
display: inline-block;
height: 38px;
width: 90%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.title-text-text {
margin-top: 9px;
}
.formAdd {
margin-bottom: 40px;
}
.Required {
color: red;
margin-right: 3px;
}
</style>
@@ -0,0 +1,286 @@
<!--批量设置-->
<template>
<a-modal
:title="$t('BatchSetting')"
:width="600"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('projectVersion')">
{{$t('projectVersion')}}</span>
</div>
<a-form-model-item class="itemModel" prop="projectVersion">
<a-select
class="box-input propbox"
style="width: 90%"
v-model='formInline.projectVersion'
showSearch
optionFilterProp="label"
:autoClearSearchValue="false"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
allowClear
:placeholder="$t('PleaseSelect')+$t('projectVersion')">
<!-- <a-select-option :value="null">{{$t('pleaseSelect')}}</a-select-option>-->
<a-select-option v-for="(item, key) in projectVersionList"
:label='item.versionName'
:key="key"
:value="item.projectId">
<span style="display: inline-block;width: 100%" :title=" item.versionName">
{{ item.versionName }}
</span>
</a-select-option>
</a-select>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('CertificationProgress')">
{{$t('CertificationProgress')}}</span>
</div>
<a-form-model-item class="itemModel" prop="bazt">
<j-dict-select-tag class="box-input" v-model="formInline.attestationSchedule"
:placeholder="$t('PleaseSelect')+$t('CertificationProgress')"
:type="'select'"
style="width: 90%"
:triggerChange="false" :dictCode="'certification_progress'"/>
</a-form-model-item>
</div>
</a-col>
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('remarks')">
{{$t('remarks')}}</span>
</div>
<a-form-model-item class="itemModel" prop="bz">
<a-textarea :placeholder="$t('pleaseEnter')+$t('remarks')"
v-model="formInline.remark"
style="width: 90%"
:maxLength="200"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</template>
<script>
import { getAction, postAction, putAction } from '@/api/manage'
import moment from 'moment'
export default {
name: 'settingList',
props: ['url'],
data() {
return {
visible: false,
confirmLoading: false,
transittime:false,
returntime:false,
propflag: false,
formInline: {
bazt:undefined,
batjsj:'',
tgthsj:'',
bz:'',
},
projectVersionList:[],
rules: {
// bazt: [
// {
// required: true,
// message: this.$t('recordstatus') + this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
// batjsj: [
// {
// required: true,
// message: this.$t('filingtime') + this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
// bz: [
// { min: 1, max: 500, message: this.$t('cantExeed') + '500' + this.$t('characters'), trigger: 'blur' }
// ],
// tgthsj: [
// {
// required: true,
// message: this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
},
ids: '',
vehicleTypeCode:'',
}
},
mounted() {
},
methods: {
edit(row,vehicleTypeCode) {
this.ids = row
this.vehicleTypeCode = vehicleTypeCode
this.getprojectList()
this.visible = true
this.$nextTick(() => {
this.formInline = {}
this.$refs.ruleForm.clearValidate()
})
},
getprojectList(){
getAction('/ota/otaManageApplyEO/getProjectVersionList', {carMarket:this.vehicleTypeCode}).then((res) => {
if (res.success) {
this.projectVersionList = res.result
} else {
}
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
let OtaManageApplyEO = JSON.parse(JSON.stringify(this.ids))
let query = {
list: OtaManageApplyEO,
...this.formInline,
}
this.confirmLoading = true
postAction('/ota/otaManageApplyEO/updateVdrBatch', query).then((res) => {
if (res.success) {
// this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
this.confirmLoading = false
this.ids = []
this.$emit('msgForm',res.result.msgList)
// this.$emit('getList')
} else {
this.$message.warning(this.$t('operationFailed'))
this.confirmLoading = false
}
})
}
})
},
handleCancel() {
this.formInline = {}
this.ids = []
this.visible = false
},
// dateChange(item) {
// this.formInline[item.db_field_name] = this.formInline[item.db_field_name] ? moment(this.formInline[item.db_field_name]).format('YYYY-MM-DD') : ''
// }
}
}
</script>
<style>
.formAdd .ant-form-item-label {
width: 130px;
}
.formAdd .ant-form-item-control-wrapper {
display: inline-block;
width: 100%;
}
/*.formAdd .ant-form-item {*/
/* margin-bottom: 20px;*/
/*}*/
.itemModel .ant-form-item-control-wrapper {
width: 90%;
}
.box-input .ant-select-selection--single {
height: 38px;
}
.box-input .ant-select-selection--multiple {
height: 38px;
}
.box-input .ant-select-selection__rendered {
line-height: 38px;
height: 38px;
}
.box-input .ant-select-selection--multiple .ant-select-selection__rendered > ul > li {
margin-top: 6px;
}
.box-input .ant-calendar-picker {
line-height: 38px;
height: 38px;
}
.box-input .ant-calendar-picker-input {
height: 38px;
}
.box-input .ant-input-number-input-wrap {
line-height: 38px;
height: 38px;
}
</style>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.title-text {
width: 144px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 42px;
}
.box-input {
display: inline-block;
height: 38px;
width: 90%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.title-text-text {
margin-top: 9px;
}
.formAdd {
margin-bottom: 40px;
}
.Required {
color: red;
margin-right: 3px;
}
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,38 @@
<template>
<a-table
:components="drag(columnshistory,'columnshistory')"
class="table"
:columns="columnshistory"
:pagination="false"
:scroll="{x: '100%',y: 400}"
:data-source="dataSourcehistory"
>
<span slot="content" slot-scope="text,record">
<a-tooltip placement="topLeft">
<template slot="title">
<span v-html="text"></span>
</template>
<span v-html="text"></span>
</a-tooltip>
</span>
<span slot="detailText" slot-scope="text,record">
<span class="text" :title="text">
{{text && text.length > 38?text.slice(0,37)+'...':text}}
</span>
</span>
</a-table>
</template>
<script>
import { ResizeHeader, ResizeColumnProvide } from '@/mixins/header'
export default {
name: 'historyTable.vue',
props:['columnshistory','dataSourcehistory'],
mixins:[ResizeHeader, ResizeColumnProvide],
}
</script>
<style scoped>
</style>
@@ -0,0 +1,223 @@
<!--拒绝原因-->
<template>
<a-modal
:title="$t('Reasonforreturn')"
:width="600"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('Reasonforreturn')">
{{$t('Reasonforreturn')}}</span>
</div>
<a-form-model-item class="itemModel" prop="rejectReason">
<a-textarea :placeholder="$t('pleaseEnter')+$t('Reasonforreturn')"
v-model="formInline.rejectReason"
style="width: 90%"
:maxLength="200"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</template>
<script>
import { getAction, postAction, putAction } from '@/api/manage'
import moment from 'moment'
export default {
name: 'settingList',
props: ['url'],
data() {
return {
visible: false,
confirmLoading: false,
transittime:false,
returntime:false,
propflag: false,
formInline: {
bazt:undefined,
batjsj:'',
tgthsj:'',
bz:'',
},
rules: {
rejectReason: [
{
required: true,
message: this.$t('Reasonforreturn') + this.$t('cannotEmpty'),
trigger: 'blur'
}
],
// batjsj: [
// {
// required: true,
// message: this.$t('filingtime') + this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
// bz: [
// { min: 1, max: 500, message: this.$t('cantExeed') + '500' + this.$t('characters'), trigger: 'blur' }
// ],
// tgthsj: [
// {
// required: true,
// message: this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
},
ids: []
}
},
mounted() {
},
methods: {
edit(row) {
this.ids = row
this.visible = true
this.$nextTick(() => {
this.formInline = {}
this.$refs.ruleForm.clearValidate()
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
let query = {
...this.formInline,
ids:this.ids.join(',')
}
this.confirmLoading = true
getAction('/ota/otaManageApplyEO/reject', query).then((res) => {
if (res.success) {
this.visible = false
this.confirmLoading = false
this.ids = []
this.$emit('msgForm',res.result.msgList)
// this.$emit('getList')
} else {
this.$message.warning(this.$t('operationFailed'))
this.confirmLoading = false
}
})
}
})
},
handleCancel() {
this.formInline = {}
this.ids = []
this.visible = false
},
// dateChange(item) {
// this.formInline[item.db_field_name] = this.formInline[item.db_field_name] ? moment(this.formInline[item.db_field_name]).format('YYYY-MM-DD') : ''
// }
}
}
</script>
<style>
.formAdd .ant-form-item-label {
width: 130px;
}
.formAdd .ant-form-item-control-wrapper {
display: inline-block;
width: 100%;
}
/*.formAdd .ant-form-item {*/
/* margin-bottom: 20px;*/
/*}*/
.itemModel .ant-form-item-control-wrapper {
width: 90%;
}
.box-input .ant-select-selection--single {
height: 38px;
}
.box-input .ant-select-selection--multiple {
height: 38px;
}
.box-input .ant-select-selection__rendered {
line-height: 38px;
height: 38px;
}
.box-input .ant-select-selection--multiple .ant-select-selection__rendered > ul > li {
margin-top: 6px;
}
.box-input .ant-calendar-picker {
line-height: 38px;
height: 38px;
}
.box-input .ant-calendar-picker-input {
height: 38px;
}
.box-input .ant-input-number-input-wrap {
line-height: 38px;
height: 38px;
}
</style>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.title-text {
width: 144px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 42px;
}
.box-input {
display: inline-block;
height: 38px;
width: 90%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.title-text-text {
margin-top: 9px;
}
.formAdd {
margin-bottom: 40px;
}
.Required {
color: red;
margin-right: 3px;
}
</style>
@@ -0,0 +1,220 @@
<!--批量设置-->
<template>
<a-modal
:title="$t('Modifyremarks')"
:width="600"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('remarks')">
{{$t('remarks')}}</span>
</div>
<a-form-model-item class="itemModel" prop="bz">
<a-textarea :placeholder="$t('pleaseEnter')+$t('remarks')"
v-model="formInline.remark"
style="width: 90%"
:maxLength="200"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</template>
<script>
import { getAction, postAction, putAction } from '@/api/manage'
import moment from 'moment'
export default {
name: 'settingList',
props: ['url'],
data() {
return {
visible: false,
confirmLoading: false,
transittime:false,
returntime:false,
propflag: false,
formInline: {
},
projectVersionList:[],
rules: {
// bazt: [
// {
// required: true,
// message: this.$t('recordstatus') + this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
// batjsj: [
// {
// required: true,
// message: this.$t('filingtime') + this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
// bz: [
// { min: 1, max: 500, message: this.$t('cantExeed') + '500' + this.$t('characters'), trigger: 'blur' }
// ],
// tgthsj: [
// {
// required: true,
// message: this.$t('cannotEmpty'),
// trigger: 'change'
// }
// ],
},
row: {}
}
},
mounted() {
},
methods: {
edit(row) {
this.row = row
this.formInline.remark = row.remark == '-'?'':row.remark
this.visible = true
this.$nextTick(() => {
this.$refs.ruleForm.clearValidate()
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
// let query = {
// ...this.formInline,
// }
this.confirmLoading = true
// postAction('ota/otaBaSjList/batchRecord', query).then((res) => {
// if (res.success) {
// this.$message.success(this.$t('OperationSuccessful'))
// this.visible = false
// this.confirmLoading = false
// this.$emit('remarkForm',this.formInline,this.ids)
// } else {
// this.$message.warning(this.$t('operationFailed'))
// this.confirmLoading = false
// }
// })
this.$emit('remarkForm',this.formInline.remark,this.row.id)
}
})
},
handleCancel() {
this.formInline = {}
this.ids = ''
this.visible = false
},
// dateChange(item) {
// this.formInline[item.db_field_name] = this.formInline[item.db_field_name] ? moment(this.formInline[item.db_field_name]).format('YYYY-MM-DD') : ''
// }
}
}
</script>
<style>
.formAdd .ant-form-item-label {
width: 130px;
}
.formAdd .ant-form-item-control-wrapper {
display: inline-block;
width: 100%;
}
/*.formAdd .ant-form-item {*/
/* margin-bottom: 20px;*/
/*}*/
.itemModel .ant-form-item-control-wrapper {
width: 90%;
}
.box-input .ant-select-selection--single {
height: 38px;
}
.box-input .ant-select-selection--multiple {
height: 38px;
}
.box-input .ant-select-selection__rendered {
line-height: 38px;
height: 38px;
}
.box-input .ant-select-selection--multiple .ant-select-selection__rendered > ul > li {
margin-top: 6px;
}
.box-input .ant-calendar-picker {
line-height: 38px;
height: 38px;
}
.box-input .ant-calendar-picker-input {
height: 38px;
}
.box-input .ant-input-number-input-wrap {
line-height: 38px;
height: 38px;
}
</style>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.title-text {
width: 144px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 42px;
}
.box-input {
display: inline-block;
height: 38px;
width: 90%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.title-text-text {
margin-top: 9px;
}
.formAdd {
margin-bottom: 40px;
}
.Required {
color: red;
margin-right: 3px;
}
</style>
@@ -0,0 +1,262 @@
<!--VDR详情-->
<template>
<div>
<a-drawer
:title="$t('VDRDetails')"
:maskClosable="false"
:width="800"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
style="height: 100%;overflow: auto;padding-bottom: 53px;">
<a-spin :spinning="confirmLoading">
<a-row :gutter="24">
<a-col :span="24">
<div class='detail-box'>
<span class='detail-text'>{{'VDR'}}</span>
<span class="title-text-text" :title="form.vdr">
{{form.vdr}}</span>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class='detail-box'>
<span class='detail-text'>{{$t('theme')}}</span>
<span class="title-text-text" :title="form.summary">
{{form.summary}}</span>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class='detail-box'>
<span class='detail-text' style='width:300px'>{{$t('authenticationimpact')}}</span>
<span class="title-text-text" :title="form.homologationImpact">
{{form.homologationImpact}}</span>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class='detail-box'>
<span class='detail-text'>{{$t('influencestatute') + '-CN'}}</span>
<span class="title-text-text" :title="form.impactCnHomo">
{{form.impactCnHomo}}</span>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class='detail-box'>
<span class='detail-text'>{{$t('influencestatute') + '-EU'}}</span>
<span class="title-text-text" :title="form.impactEuHomo">
{{form.impactEuHomo}}</span>
</div>
</a-col>
</a-row>
<div style='margin-bottom: 10px;font-weight: bold;'>{{$t('applicationprojectversion')}}</div>
<div v-for='(item,index) in vdrList' :key='index'>
<a-row :gutter="24">
<a-col :span="24">
<div class='detail-box'>
<span class='detail-text' style="width: 300px">{{item.versionName}}</span>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<div class='detail-box'>
<span class='detail-text'>{{$t('certificationStartOne')}}</span>
<span class="title-text-text" :title="item.attestationStartTime?item.attestationStartTime:'--'">
{{item.attestationStartTime?item.attestationStartTime:'--'}}</span>
</div>
</a-col>
<a-col :span="12">
<div class='detail-box'>
<span class='detail-text'>{{$t('certificationdeclaration')}}</span>
<span class="title-text-text" :title="item.certificationSubmission?item.certificationSubmission:'--'">
{{item.certificationSubmission?item.certificationSubmission:'--'}}</span>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<div class='detail-box'>
<span class='detail-text'>{{$t('certificationEnd')}}</span>
<span class="title-text-text" :title="item.attestationEndTime?item.attestationEndTime:'--'">
{{item.attestationEndTime?item.attestationEndTime:'--'}}</span>
</div>
</a-col>
<a-col :span="12">
<div class='detail-box'>
<span class='detail-text'>{{$t('CertificationProgress')}}</span>
<span class="title-text-text" :title="item.attestationSchedule?item.attestationSchedule:'--'">
{{item.attestationSchedule?item.attestationSchedule:'--'}}</span>
</div>
</a-col>
</a-row>
</div>
</a-spin>
<div class="drawer-bootom-button">
<a-button style="margin-right: 8px" @click="handleCancel">{{$t('close')}}</a-button>
<!-- <a-button type="primary" @click="handleSubmit" :loading="confirmLoading">{{$t('submit')}}</a-button>-->
</div>
</a-drawer>
<uploadFile ref="uploadFile" :acceptcode="acceptcode" @uploadSuccess="uploadSuccess"/>
</div>
</template>
<script>
import { getAction, postAction } from '@/api/manage'
import uploadFile from '@/components/uploadFile/file'
import { mapGetters } from 'vuex'
export default {
name:"addModel",
components:{
uploadFile
},
data() {
return {
visible: false,
disabled: false,
showButton:false,
confirmLoading: false,
acceptcode:'',
projectNameList: [],
DeliverableTreeList: [],
form:{
VDR:'',
theme:'',
authenticationimpact:'',
influencestatuteCn:'',
influencestatuteEu:'',
},
vdrList:[],
url:{
addModel:''
},
record:{},
car:'',
}
},
mounted() {
},
methods: {
...mapGetters(['userInfo']),
addModel(record,val) {
this.form=record
this.car = val
getAction('/ota/otaManageApplyEO/getVersionInfo', {vdr:this.form.vdr,car:this.car}).then((res) => {
if (res.success) {
this.vdrList = res.result
} else {
}
})
this.visible = true
this.confirmLoading = false
console.log('555',record);
},
handleCancel() {
this.visible = false
},
/** 上传文件的回调 */
uploadSuccess(data) {
let attIdList = []
if (data && data.length > 0) {
data.map(item => {
attIdList.push(item.id || data.name)
})
}
/** 赋值给当前对应的表单文件 */
this.formInline[this.uploadName] = attIdList.join(',')
this.formInline = { ...this.formInline }
},
isEdit(){
this.disabled=false
}
}
}
</script>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
/*align-items: center;*/
}
.detail-box{
width: 100%;
margin-bottom: 20px;
}
.detail-text{
display: inline-block;
width: 95px;
font-weight: bold;
}
.title-text {
width: 250px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 48px;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
min-height: 40px;
margin-bottom: 24px;
}
.Required {
color: red;
margin-right: 4px;
}
.header-text {
font-size: 16px;
font-weight: 500;
}
.drawer-bootom-button {
position: absolute;
bottom: 0;
width: 100%;
z-index: 100;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
.icon-text {
font-size: 16px;
margin-right: 4px;
}
</style>
@@ -0,0 +1,448 @@
<!--ota管理-->
<template>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('softwareversion')">
<span>{{ $t('softwareversion') }}</span>
</div>
<a-select :placeholder="$t('PleaseSelect')+$t('softwareplatform')"
class="box-input"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
allowClear
showSearch
optionFilterProp="label"
:autoClearSearchValue="false"
v-model="queryParam.plannedBpLaunchBatch">
<a-select-option v-for="(item, key) in softwareversionList"
:label='item'
:key="key"
:value="item">
<span style="display: inline-block;width: 100%" :title=" item">
{{ item }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
<!-- <a-col :md="6" :sm="8">-->
<!-- <div class="box-title-text">-->
<!-- <div class="title-text" :title="$t('softwareplatform')">-->
<!-- <span>{{ $t('softwareplatform') }}</span>-->
<!-- </div>-->
<!-- <a-select :placeholder="$t('PleaseSelect')+$t('softwareplatform')"-->
<!-- class="box-input"-->
<!-- :getPopupContainer="triggerNode=> triggerNode.parentNode"-->
<!-- allowClear-->
<!-- showSearch-->
<!-- optionFilterProp="children"-->
<!-- :autoClearSearchValue="false"-->
<!-- v-model="queryParam.softwareplatform">-->
<!-- <a-select-option v-for="(item, key) in softwareplatformList"-->
<!-- :key="key"-->
<!-- :value="item.value">-->
<!-- <span style="display: inline-block;width: 100%" :title=" item.name">-->
<!-- {{ item.name }}-->
<!-- </span>-->
<!-- </a-select-option>-->
<!-- </a-select>-->
<!-- </div>-->
<!-- </a-col>-->
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('vehicleType')">
<span>{{ $t('vehicleType') }}</span>
</div>
<a-select :placeholder="$t('PleaseSelect')+$t('vehicleType')"
class="box-input"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
allowClear
showSearch
optionFilterProp="label"
:autoClearSearchValue="false"
v-model="queryParam.appliedVehicleProject">
<a-select-option v-for="(item, key) in vehicleTypeList"
:label='item'
:key="key"
:value="item">
<span style="display: inline-block;width: 100%" :title=" item">
{{ item }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('market')">
<span>{{ $t('market') }}</span>
</div>
<a-select :placeholder="$t('PleaseSelect')+$t('market')"
class="box-input"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
allowClear
showSearch
optionFilterProp="label"
:autoClearSearchValue="false"
v-model="queryParam.market">
<a-select-option v-for="(item, key) in marketList"
:label='item'
:key="key"
:value="item">
<span style="display: inline-block;width: 100%" :title=" item">
{{ item }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
<template v-if="toggleSearchStatus">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('softwarereleasetime')">
<span>{{ $t('softwarereleasetime') }}</span>
</div>
<a-range-picker
class="box-input"
@change="onChange"
style='margin-left: -1px'
v-model="queryParam.releaseDate"
:disabled="false"/>
</div>
</a-col>
</template>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a @click="handleToggleSearch">
{{ !toggleSearchStatus ? $t('open') : $t('away') }}
<a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
</a>
<a-button class="box-button" style="margin-left: 8px" @click="searchReset">{{ $t('reset') }}</a-button>
<a-button class="box-button" style="margin-left: 8px" type="primary" @click="searchQuery">{{ $t('query') }}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<div class="table-operator">
<div class="operator-text" @click="handleExportManage"
v-has="'ota:export'">
<a-icon type="export" :rotate="-90" />
{{ $t('export') }}
</div>
</div>
<div>
<a-table ref="table" size="middle" :components="drag(columns, 'columns')" :loading="loading" :pagination="false"
:scroll="{ x: '100%', y: 'calc(100vh - 140px)' }" rowKey="id" :data-source="dataSource"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :columns="columns">
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation" @click="detailclick(record)">{{ $t('See') }}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination :show-total="total => $t('total') + ` ${total} ` + $t('strip')" show-quick-jumper show-size-changer
:page-size.sync="pageSize" :total="total" :current="pageNo" @change="pageOnChange"
@showSizeChange="SizeChange" />
</div>
</div>
</a-card>
</template>
<script>
import { getAction, postAction, deleteAction,downloadFile } from '@/api/manage'
import { mapGetters } from 'vuex'
import { ResizeHeader, ResizeColumnProvide } from '@/mixins/header'
import ImportFile from '@/components/ImportFileData/index'
import moment from 'moment'
export default {
name: 'index',
components: {
ImportFile
},
mixins: [ResizeHeader, ResizeColumnProvide],
data() {
return {
//url传参严格按照当前命名
url: {
list: '/lawsTechnologyEvaluation/lawsTechnologyEvaluationEO/page',
deleteBatch: '/lawsTechnologyEvaluation/lawsTechnologyEvaluationEO/deleteBatch',
exportData: '/ota/otaBaCxList/exportData',
importZipUrl: '/ota/otaBaCxList/importData',//导入
},
number:'',
visible: false,
loading: false,
toggleSearchStatus: false,
dataSource: [],
selectedRowKeys: [],
selectedRowKeysRecord: [],
serialNumber: '',
total: 0,
pageSize: 10,
pageNo: 1,
CategoryTreeList: [],
softwareversionList: [],
softwareplatformList: [],
vehicleTypeList: [],
marketList: [],
queryParam: {
},
formInline: {},
rules: {
whetherTobring: [
{
required: true,
message: this.$t('standardDecompositionDocument') + this.$t('cannotEmpty'),
trigger: 'change'
}
]
},
columns: [
{
title: this.$t('softwareversion'),
align: 'left',
dataIndex: 'plannedBpLaunchBatch',
ellipsis: true,
width: 170
},
// {
// title: this.$t('softwareplatform'),
// align: 'left',
// dataIndex: 'ggpc',
// ellipsis: true,
// width: 170
// },
{
title: this.$t('market'),
align: 'left',
width: 170,
ellipsis: true,
dataIndex: 'market'
},
{
title: this.$t('vehicleType'),
align: 'left',
width: 320,
ellipsis: true,
dataIndex: 'appliedVehicleProject'
},
{
title: this.$t('softwarereleasetime'),
align: 'left',
width: 170,
ellipsis: true,
dataIndex: 'releaseDate'
},
{
title: this.$t('operation'),
align: 'left',
fixed: 'right',
width: 100,
scopedSlots: { customRender: 'operation' }
}
],
userInfoQuery: {},
administrators: false
}
},
mounted() {
this.getSelectData()
this.getList()
this.administrators = false
},
methods: {
...mapGetters(['userInfo']),
getSelectData(){
getAction('/ota/otaManageApplyEO/getPullDownList', {}).then((res) => {
if (res.success) {
this.softwareversionList = res.result.plannedBpLaunchBatchList
this.vehicleTypeList = res.result.carSet
this.marketList = res.result.marketSet
} else {
}
})
},
handleToggleSearch() {
this.toggleSearchStatus = !this.toggleSearchStatus
},
searchQuery() {
this.pageNo = 1
this.getList()
},
searchReset() {
this.queryParam = {}
this.$route.query.serialNumber = ''
this.$route.query.flowStatus = ''
this.pageNo = 1
this.getList()
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList() {
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction('/ota/otaManageApplyEO/getOtaPage', query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
onSelectChange(value, record) {
this.selectedRowKeys = value
this.selectedRowKeysRecord = record
},
//导出
handleExportManage() {
// console.log('menuId',this.menuId)
let dateName = moment(new Date()).format('YYYYMMDD')
let name = 'OTA' + this.$t('softwareversion') + ' ' + dateName + '.xlsx'
let long = localStorage.getItem('language')
let cut = ''
if (long && long == 'zh-cn') {
this.cut = 'cn'
} else if (long && long == 'en-us') {
this.cut = 'en'
}
let query = {
exportName: name,
selections: this.selectedRowKeys.join(','),
...this.queryParam,
cut:this.cut
}
downloadFile('ota/otaManageApplyEO/otaExportXls', name, query, this.selectClear)
},
// 查看
detailclick(item){
this.$router.push({
path: '/components/detil',
query: item
})
},
onChange(value, dateString) {
if (this.queryParam.releaseDate && this.queryParam.releaseDate.length > 0) {
let dateOne = moment(dateString[0]).format('YYYY-MM-DD')
let dateTwo = moment(dateString[1]).format('YYYY-MM-DD')
this.queryParam.softwareIssueTimeStart = dateOne
this.queryParam.softwareIssueTimeEnd = dateTwo
} else {
this.queryParam.releaseDate = []
// this.queryParamOne[item + '_name'] = []
}
},
}
}
</script>
<style>
.tree-select .ant-select-tree-dropdown {
height: 298px !important;
}
</style>
<style scoped>
@import '~@assets/less/common.less';
.page {
text-align: right;
margin-top: 20px;
}
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text {
width: 20%;
min-width: 110px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.box-button {
height: 38px;
/*margin-top: 2px;*/
}
.text-operation {
margin-right: 8px;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.Required {
color: red;
margin-right: 4px;
}
::v-deep .ant-table-row:first-child {
background: #fff !important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent !important;
}
::v-deep .ant-table-placeholder {
margin-top: 8px !important;
}
/deep/ .ant-calendar-range-picker-input{
margin-left: -2px !important;
}
</style>
@@ -474,6 +474,7 @@
this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
this.$emit('addModelList')
// this.vdrClick()
} else {
this.$message.warning(res.message)
this.confirmLoading = false
@@ -482,6 +483,19 @@
}
})
},
// 跳转vdr
// vdrClick(){
// let _this = this
// this.$confirm({
// content: _this.$t('Rematchornot') + 'VDR',
// onOk() {
// let newUrl = _this.$router.resolve({
// path:'otaAuthentication',
// })
// window.open(newUrl.href, '_blank')
// }
// })
// },
handleInput(value) {
this.$nextTick(() => {
this.formInline = { ...this.formInline }
@@ -0,0 +1,506 @@
<template>
<div>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="10">
<div class="box-title-text">
<div class="title-text" :title="$t('softwareversion')">
<span>{{ $t('softwareversion') }}</span>
</div>
<a-select v-model="queryParam.plannedBpLaunchBatch"
class="box-input"
@change="getonChange"
showSearch
optionFilterProp="label"
:autoClearSearchValue="false"
:getPopupContainer="triggerNode => triggerNode.parentNode" :popper-append-to-body="false">
<a-select-option v-for="d in options" :key="d.plannedBpLaunchBatch" :label='d.plannedBpLaunchBatch' :value="d.plannedBpLaunchBatch">
<span style="display: inline-block;width: 80%" :title=" d.plannedBpLaunchBatch">
{{ d.plannedBpLaunchBatch }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
<a-col :md="6" :sm="10">
<div class="box-title-text" v-if="this.options.length && this.options.length !== 0">
<a-button class="box-button"
style="line-height: 32px;margin-top: 5px;"
@click="vdrcheckClick">{{ 'VDR' + $t('view')}}
</a-button>
</div>
</a-col>
</a-row>
</a-form>
</div>
<div class="box-content">
<div class="box-content-left">
<div id="main-top-Collect"></div>
<div id="main-end-Collect"></div>
<!-- <div class='main-table'>-->
<!-- <table border="1" cellspacing="0" class="table">-->
<!-- <tr>-->
<!-- <td width="150px" height="50px" align="center">{{$t('tobematched')}}</td>-->
<!-- <td width="150px" height="50px" align="center">{{$t('Pendingapproval')}}</td>-->
<!-- <td width="150px" height="50px" align="center">{{$t('lock')}}</td>-->
<!-- <td width="150px" height="50px" align="center">{{$t('sendBack')}}</td>-->
<!--&lt;!&ndash; <td width="150px" height="50px" align="center">{{$t('notInvolved')}}</td>&ndash;&gt;-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td height="80px" align="center"><span style='color: #5087EC'>{{matchForm.to_be_matched}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #68BBC4'>{{matchForm.to_be_approved}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #58A55C'>{{matchForm.locked}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #F2BD42'>{{matchForm.rejected}}</span></td>-->
<!--&lt;!&ndash;/* <td height="80px" align="center"><span style='color: #BBBBBB'>{{matchForm.a}}</span></td>*/&ndash;&gt;-->
<!-- </tr>-->
<!-- </table>-->
<!-- </div>-->
</div>
</div>
<!-- <div class="box-content">-->
<!-- <div class="box-content-left">-->
<!-- <div class='main-table' style='padding:10% 0;margin-left: -61px;'>-->
<!-- <table border="1" cellspacing="0" class="table">-->
<!-- <tr>-->
<!-- <td width="150px" height="50px" align="center">{{$t('Notatthe')}}</td>-->
<!-- <td width="150px" height="50px" align="center">{{$t('inProgress')}}</td>-->
<!-- <td width="150px" height="50px" align="center">{{$t('experimentPassed')}}</td>-->
<!-- <td width="150px" height="50px" align="center">{{$t('experimentFailed')}}</td>-->
<!-- <td width="190px" height="50px" align="center">{{$t('componentReportNotSubmitted')}}</td>-->
<!-- <td width="190px" height="50px" align="center">{{$t('componentReportSubmitted')}}</td>-->
<!-- <td width="190px" height="50px" align="center">{{$t('componentReportHasBeenStored')}}</td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td height="80px" align="center"><span style='color: #BBBBBB'>{{authenticationForm.Not_start}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #F2BD42'>{{authenticationForm.In_progress}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #68BBC4'>{{authenticationForm.Test_passed}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #D95040'>{{authenticationForm.Test_failed}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #BBBBBB'>{{authenticationForm.Component_report_not_submitted}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #68BBC4'>{{authenticationForm.Component_report_submitted}}</span></td>-->
<!-- <td height="80px" align="center"><span style='color: #58A55C'>{{authenticationForm.Component_report_has_been_stored}}</span></td>-->
<!-- </tr>-->
<!-- </table>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- <responsibilityList @responsibility="responsibility" ref="responsibilityListRef"/>-->
</div>
</template>
<script>
import * as echarts from 'echarts'
import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage'
// import responsibilityList from './responsibilityList'
import 'echarts/lib/component/dataZoom'
export default {
name: 'DeliverableStatusEchart',
components: {
// responsibilityList
},
props: {
idList: {
type: Array,
default: []
}
},
data() {
return {
queryParam: {
plannedBpLaunchBatch: ''
},
options: [],
collecting: [],
notStart: [],
submit: [],
syncReport: [],
collectingdata: [],
notStartdata: [],
submitdata: [],
syncReportdata: [],
dutyTerritory: [],
collectingpercentage: [],
collectingquantity: [],
notStartpercentage: [],
notStartquantity: [],
submitpercentage: [],
submitquantity: [],
syncReportpercentage: [],
syncReportquantity: [],
vehicleTypeCode:'',
softwareversion:'',
releaseName:'',
matchForm:{},
authenticationForm:{},
url: {
getProjectDetailsStatistics: '/project/projectLibraryBase/getProjectDetailsStatistics'
},
}
},
mounted() {
this.getoptions()
// this.getData()
},
methods: {
vdrcheckClick(){
},
getData() {
let query = {
...this.queryParam,
projectId:this.$route.query.id
}
getAction('ota/otaManageApplyEO/getStatisticalStatus', query).then((res) => {
if (res.success) {
if (res.result) {
let mainTopDataSource = res.result.matchStatusMapList ? res.result.matchStatusMapList : []
let mainEndDataSource = res.result.attestationScheduleMapList ? res.result.attestationScheduleMapList : []
this.matchForm = res.result.matchStatusMap
this.authenticationForm = res.result.attestationScheduleMap
this.mainTopEcharts(mainTopDataSource)
this.mainEndEcharts(mainEndDataSource)
// this.mainRightEcharts(mainRightDataSource)
}
}
})
},
getoptions() {
let id = ''
id = this.$route.query.id
getAction('ota/otaManageApplyEO/getVdrListByProject', { projectId: id }).then((res) => {
if (res.success) {
this.options = res.result
this.queryParam.plannedBpLaunchBatch = this.options[0].plannedBpLaunchBatch
this.getData()
// this.getData(this.queryParam.ctype)
} else {
}
})
},
getonChange(value) {
this.getData(value)
},
getEcharts(chart, title, color, data) {
var myChart = echarts.init(document.getElementById(chart))
myChart.setOption({
title: {
text: title
},
tooltip: {
trigger: 'item',
textStyle: {
fontWeight: 'normal',
fontSize: 14,
color: '#040B29',
fontFamily: 'BlueSkyNoto'
},
formatter: function(parms) {
let str = parms.marker + ' ' + parms.data.name + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + parms.data.value + ' (' + parms.percent + '%)'
return str
}
},
legend: {
itemWidth: 12,
itemHeight: 12,
bottom: '0',
left: 'center',
itemGap: 30,
icon: 'circle'
},
series: [
{
name: title,
type: 'pie',
radius: ['40%', '54%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
color: color,
data: data
}
]
})
myChart.on('click', (params) => {
let query = {}
if (params.seriesName == this.$t('regulatoryTaskConfirmation')) {
query = {
title: params.seriesName+'-'+params.name,
projectLibraryId: this.$route.query.id,
operatorType: 'queryFGTaskToConfirmStatistics',
status: params.data.status
}
} else if (params.seriesName == this.$t('designCompliance')) {
query = {
title: params.seriesName+'-'+params.name,
projectLibraryId: this.$route.query.id,
operatorType: 'queryDesignStatistics',
status: params.data.status
}
} else if (params.seriesName == this.$t('verifyCompliance')) {
query = {
title: params.seriesName+'-'+params.name,
projectLibraryId: this.$route.query.id,
operatorType: 'queryVerifyStatistics',
status: params.data.status
}
}
this.$refs.responsibilityListRef.getData(query)
})
},
mainTopEcharts(dataSource) {
let data = []
let color = []
this.mainTopNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
dataSource.forEach(res => {
if (res.matchStatus == 'to_be_matched') {
data.push({
value: res.matchStatusCount,
name: this.$t('tobematched'),
color: '#5087EC',
status: res.matchStatus
})
color.push('#5087EC')
} else if (res.matchStatus == 'to_be_approved') {
data.push({
value: res.matchStatusCount,
name: this.$t('Pendingapproval'),
color: '#68BBC4',
status: res.matchStatus
})
color.push('#68BBC4')
} else if (res.matchStatus == 'locked') {
data.push({
value: res.matchStatusCount,
name: this.$t('lock'),
color: '#58A55C',
status: res.matchStatus
})
color.push('#58A55C')
} else if (res.matchStatus == 'rejected') {
data.push({
value: res.matchStatusCount,
name: this.$t('sendBack'),
color: '#F2BD42',
status: res.matchStatus
})
color.push('#F2BD42')
}
this.mainTopNum += res.matchStatusCount
})
}
this.getEcharts('main-top-Collect', this.$t('Matchingstatestatistics'), color, data)
},
mainEndEcharts(dataSource) {
let data = []
let color = []
this.mainTopNum = 0
if (dataSource && dataSource.length > 0) {
this.dataSource = [{}]
console.log(dataSource)
dataSource.forEach(res => {
if (res.attestationSchedule == 'Not start') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('Notatthe'),
color: '#BBBBBB',
status: res.attestationSchedule
})
color.push('#BBBBBB')
} else if (res.attestationSchedule == 'In progress') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('inProgress'),
color: '#F2BD42',
status: res.attestationSchedule
})
color.push('#F2BD42')
} else if (res.attestationSchedule == 'Test failed') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('experimentFailed'),
color: '#D95040',
status: res.attestationSchedule
})
color.push('#D95040')
} else if (res.attestationSchedule == 'Component report not submitted') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('componentReportNotSubmitted'),
color: '#BBBBBB',
status: res.attestationSchedule
})
color.push('#BBBBBB')
} else if (res.attestationSchedule == 'Component report submitted') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('componentReportSubmitted'),
color: '#68BBC4',
status: res.attestationSchedule
})
color.push('#68BBC4')
} else if (res.attestationSchedule == 'Component report has been stored') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('componentReportHasBeenStored'),
color: '#58A55C',
status: res.attestationSchedule
})
color.push('#58A55C')
}else if (res.attestationSchedule == 'Test passed') {
data.push({
value: res.attestationScheduleCount,
name: this.$t('experimentPassed'),
color: '#68BBC4',
status: res.attestationSchedule
})
color.push('#68BBC4')
}
this.mainTopNum += res.attestationScheduleCount
})
}
this.getEcharts('main-end-Collect', this.$t('OTaauthenticationprogressstatistics'), color, data)
},
responsibility(item) {
this.$emit('currentStatus', item)
},
vdrcheckClick(){
this.options.forEach(item => {
if(item.plannedBpLaunchBatch == this.queryParam.plannedBpLaunchBatch){
this.vehicleTypeCode = item.appliedVehicleProject
this.softwareversion = item.plannedBpLaunchBatch
this.releaseName = item.updateDate
}
})
let newUrl = this.$router.resolve({
path:'/components/detil',
query:{
vehicleTypeCode:this.vehicleTypeCode,
plannedBpLaunchBatch:this.softwareversion,
releaseDate:this.releaseName
},
})
window.open(newUrl.href, '_blank')
}
}
}
</script>
<style scoped lang="less">
.box-content {
width: 100%;
height: 450px;
display: flex;
justify-content: space-between;
margin-bottom: 20px;
.box-content-left {
width: calc(100% - 12px);
height: 450px;
border: 2px #eff1f3 solid;
border-radius: 6px;
display: flex;
#main-top-Collect {
width: 60%;
height: 100%;
padding: 24px 20px;
box-sizing: border-box;
}
#main-left-content {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
#main-end-Collect {
width: 60%;
height: 100%;
padding: 24px 20px;
box-sizing: border-box;
}
#main-bottom {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
.main-table{
width: 40%;
padding: 10% 4%;
}
}
.box-input {
display: inline-block;
width: calc(70% - 100px);
height: 38px;
margin-top: 2px;
}
.box-content-right {
width: calc(50% - 12px);
height: 398px;
border: 2px #eff1f3 solid;
#main-right {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
#main-right-content {
width: 100%;
height: 100%;
padding: 24px;
box-sizing: border-box;
}
}
}
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 16px;
}
.title-text {
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: calc(100% - 126px);
height: 38px;
margin-top: 2px;
line-height: 38px;
}
</style>
@@ -28,6 +28,9 @@
<a-tab-pane :key="$t('nonConformance')" :tab="$t('nonConformance')">
<nonConformance @currentStatus="currentStatus" v-if="activeKey == $t('nonConformance')"/>
</a-tab-pane>
<a-tab-pane :key="$t('otastatus')" :tab="$t('otastatus')">
<otastatus @currentStatus="currentStatus" :idList="idList" v-if="activeKey == $t('otastatus')"/>
</a-tab-pane>
</a-tabs>
</a-card>
</template>
@@ -37,6 +40,7 @@
import certificationActivity from './certificationActivity'
import parameterCollectionProgress from './parameterCollectionProgress'
import nonConformance from './nonConformance'
import otastatus from './otastatus'
import { getAction, postAction } from '@/api/manage'
export default {
@@ -45,7 +49,8 @@
parameterCollectionProgress,
regulatoryCompliance,
certificationActivity,
nonConformance
nonConformance,
otastatus
},
data() {
return {
@@ -515,6 +515,9 @@
this.visible = false
this.confirmLoading = false
this.$emit('settingListForm')
if(res.result.matchVdr == true){
this.vdrClick()
}
} else {
this.$message.warning(this.$t('operationFailed'))
this.confirmLoading = false
@@ -523,6 +526,19 @@
}
})
},
// 跳转vdr
vdrClick(){
let _this = this
this.$confirm({
content: _this.$t('Rematchornot') + 'VDR',
onOk() {
let newUrl = _this.$router.resolve({
path:'otaAuthentication',
})
window.open(newUrl.href, '_blank')
}
})
},
handleCancel() {
this.formInline = {}
this.visible = false