Merge remote-tracking branch 'origin/master'

This commit is contained in:
wangzhijiang
2022-04-14 18:09:53 +08:00
18 changed files with 676 additions and 317 deletions
@@ -46,7 +46,7 @@ public class DictAspect {
@Around("excudeService()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
long time1=System.currentTimeMillis();
long time1=System.currentTimeMillis();
Object result = pjp.proceed();
long time2=System.currentTimeMillis();
log.debug("获取JSON数据 耗时:"+(time2-time1)+"ms");
@@ -84,46 +84,57 @@ public class DictAspect {
if (((Result) result).getResult() instanceof IPage) {
List<JSONObject> items = new ArrayList<>();
for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) {
ObjectMapper mapper = new ObjectMapper();
String json="{}";
try {
//解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
json = mapper.writeValueAsString(record);
} catch (JsonProcessingException e) {
log.error("json解析失败"+e.getMessage(),e);
}
JSONObject item = JSONObject.parseObject(json);
//update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
//for (Field field : record.getClass().getDeclaredFields()) {
for (Field field : oConvertUtils.getAllFields(record)) {
//update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
if (field.getAnnotation(Dict.class) != null) {
String code = field.getAnnotation(Dict.class).dicCode();
String text = field.getAnnotation(Dict.class).dicText();
String table = field.getAnnotation(Dict.class).dictTable();
String key = String.valueOf(item.get(field.getName()));
//翻译字典值对应的txt
String textValue = translateDictValue(code, text, table, key);
log.debug(" 字典Val : "+ textValue);
log.debug(" __翻译字典字段__ "+field.getName() + CommonConstant.DICT_TEXT_SUFFIX+" "+ textValue);
item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
}
//date类型默认转换string格式化日期
if (field.getType().getName().equals("java.util.Date")&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){
SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
}
}
JSONObject item = getJsonObject(record);
items.add(item);
}
((IPage) ((Result) result).getResult()).setRecords(items);
}else if(((Result) result).getResult() instanceof List){
List<JSONObject> items = new ArrayList<>();
for (Object record : (List)((Result) result).getResult()) {
JSONObject item = getJsonObject(record);
items.add(item);
}
((Result) result).setResult(items);
}
}
}
private JSONObject getJsonObject(Object record) {
ObjectMapper mapper = new ObjectMapper();
String json = "{}";
try {
//解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
json = mapper.writeValueAsString(record);
} catch (JsonProcessingException e) {
log.error("json解析失败" + e.getMessage(), e);
}
JSONObject item = JSONObject.parseObject(json);
//update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
//for (Field field : record.getClass().getDeclaredFields()) {
for (Field field : oConvertUtils.getAllFields(record)) {
//update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
if (field.getAnnotation(Dict.class) != null) {
String code = field.getAnnotation(Dict.class).dicCode();
String text = field.getAnnotation(Dict.class).dicText();
String table = field.getAnnotation(Dict.class).dictTable();
String key = String.valueOf(item.get(field.getName()));
//翻译字典值对应的txt
String textValue = translateDictValue(code, text, table, key);
log.debug(" 字典Val : " + textValue);
log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + " " + textValue);
item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
}
//date类型默认转换string格式化日期
if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
}
}
return item;
}
/**
* 翻译字典文本
* @param code
@@ -142,7 +142,7 @@ public class BussDocumentLibraryEOController extends JeroController<BussDocument
@AutoLog(value = "文档库信息表-通过id查询")
@ApiOperation(value="文档库信息表-通过id查询", notes="文档库信息表-通过id查询")
@GetMapping(value = "/queryById")
// @RequiresPermissions("document:queryById")
@RequiresPermissions("document:queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
BussDocumentLibraryEO bussDocumentLibraryEO = bussDocumentLibraryEOService.queryById(id);
if(bussDocumentLibraryEO==null) {
@@ -48,21 +48,14 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
* 分页列表查询
*
* @param dummyInventoryInfoEO
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "虚拟清单详情表-分页列表查询")
@ApiOperation(value="虚拟清单详情表-分页列表查询", notes="虚拟清单详情表-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(DummyInventoryInfoEO dummyInventoryInfoEO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<DummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryInfoEO, req.getParameterMap());
Page<DummyInventoryInfoEO> page = new Page<DummyInventoryInfoEO>(pageNo, pageSize);
IPage<DummyInventoryInfoEO> pageList = dummyInventoryInfoEOService.page(page, queryWrapper);
public Result<?> queryPageList(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req) {
IPage<DummyInventoryInfoEO> pageList = dummyInventoryInfoEOService.getPageInfo(dummyInventoryInfoEO,req);
return Result.OK(pageList);
}
@@ -74,8 +67,8 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
@AutoLog(value = "虚拟清单详情表-列表查询")
@ApiOperation(value="虚拟清单详情表-列表查询", notes="虚拟清单详情表-列表查询")
@GetMapping(value = "/list")
public Result<List<DummyInventoryInfoEO>> queryList() {
List<DummyInventoryInfoEO> list = dummyInventoryInfoEOService.queryList();
public Result<List<DummyInventoryInfoEO>> queryList(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req) {
List<DummyInventoryInfoEO> list = dummyInventoryInfoEOService.queryList(dummyInventoryInfoEO,req);
return Result.OK(list);
}
@@ -213,8 +206,8 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
@AutoLog(value = "复制")
@ApiOperation(value="复制", notes="复制")
@GetMapping(value = "/copyInfoByIds")
public Result<?> copyInfoByIds(@RequestParam(name="id",required=true) String ids,
@RequestParam(name="id",required=true) String cut) {
public Result<?> copyInfoByIds(@RequestParam(name="ids",required=true) String ids,
@RequestParam(name="cut",required=true) String cut) {
try {
dummyInventoryInfoEOService.copyInfoByIds(ids);
} catch (Exception e) {
@@ -235,20 +228,16 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
/**
* 批量设置
*
* @param dummyInventoryInfoEOList
* @param dummyInventoryInfoEO
* @return
*/
@AutoLog(value = "虚拟清单详情表-添加")
@ApiOperation(value="虚拟清单详情表-添加", notes="虚拟清单详情表-添加")
@PostMapping(value = "/setBatch")
public Result<?> setBatch(@Validated @RequestBody List<DummyInventoryInfoEO> dummyInventoryInfoEOList) {
String cut = "";
if(dummyInventoryInfoEOList.size() != 0){
cut = dummyInventoryInfoEOList.get(0).getCut();
}
public Result<?> setBatch(@RequestBody DummyInventoryInfoEO dummyInventoryInfoEO) {
String cut = dummyInventoryInfoEO.getCut();
try {
dummyInventoryInfoEOService.setBatch(dummyInventoryInfoEOList);
dummyInventoryInfoEOService.setBatch(dummyInventoryInfoEO);
} catch (Exception e) {
if(CutEnum.CN.getValue().equals(cut)){
return Result.error("批量设置失败!");
@@ -93,6 +93,9 @@ public class DummyInventoryInfoEO implements Serializable {
@ApiModelProperty(value = "技术领域")
private java.lang.String technologyTerritory;
@TableField(exist = false)
private java.lang.String technologyTerritoryName;
/**新车型实施日期*/
@Excel(name = "新车型实施日期", width = 15)
@ApiModelProperty(value = "新车型实施日期")
@@ -125,21 +128,25 @@ public class DummyInventoryInfoEO implements Serializable {
/**实施类别*/
@Excel(name = "实施类别", width = 15)
@ApiModelProperty(value = "实施类别")
@Dict(dicCode ="implement_type")
private java.lang.String implementType;
/**认证类型*/
@Excel(name = "认证类型", width = 15)
@ApiModelProperty(value = "认证类型")
@Dict(dicCode ="attestation_type")
private java.lang.String attestationType;
/**认证级别*/
@Excel(name = "认证级别", width = 15)
@ApiModelProperty(value = "认证级别")
@Dict(dicCode ="attestation_rank")
private java.lang.String attestationRank;
/**责任领域*/
@Excel(name = "责任领域", width = 15)
@ApiModelProperty(value = "责任领域")
@Dict(dicCode ="duty_territory")
private java.lang.String dutyTerritory;
/**备注*/
@@ -150,6 +157,7 @@ public class DummyInventoryInfoEO implements Serializable {
/**设计符合性确认-交付物类型*/
@Excel(name = "设计符合性确认-交付物类型", width = 15)
@ApiModelProperty(value = "设计符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private java.lang.String designDeliverableType;
/**设计符合性确认-交付物模板*/
@@ -157,6 +165,9 @@ public class DummyInventoryInfoEO implements Serializable {
@ApiModelProperty(value = "设计符合性确认-交付物模板")
private java.lang.String designDeliverableTemplate;
@TableField(exist = false)
private java.lang.String designDeliverableTemplateName;
/**设计符合性确认-发起人*/
@Excel(name = "设计符合性确认-发起人", width = 15)
@ApiModelProperty(value = "设计符合性确认-发起人")
@@ -177,6 +188,9 @@ public class DummyInventoryInfoEO implements Serializable {
@ApiModelProperty(value = "prehomo确认-交付物模板")
private java.lang.String prehomoDeliverableTemplate;
@TableField(exist = false)
private java.lang.String prehomoDeliverableTemplateName;
/**prehomo确认-发起人*/
@Excel(name = "prehomo确认-发起人", width = 15)
@ApiModelProperty(value = "prehomo确认-发起人")
@@ -197,6 +211,9 @@ public class DummyInventoryInfoEO implements Serializable {
@ApiModelProperty(value = "验证符合性确认-交付物模板")
private java.lang.String verifyDeliverableTemplate;
@TableField(exist = false)
private java.lang.String verifyDeliverableTemplateName;
/**验证符合性确认-发起人*/
@Excel(name = "验证符合性确认-发起人", width = 15)
@ApiModelProperty(value = "验证符合性确认-发起人")
@@ -214,4 +231,10 @@ public class DummyInventoryInfoEO implements Serializable {
@TableField(exist = false)
private String ids;
@TableField(exist = false)
private Integer pageNo;
@TableField(exist = false)
private Integer pageSize;
}
@@ -1,5 +1,6 @@
package com.jero.modules.dummy.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -62,14 +63,16 @@ public interface IDummyInventoryInfoEOService extends IService<DummyInventoryInf
*
* @return
*/
List<DummyInventoryInfoEO> queryList();
List<DummyInventoryInfoEO> queryList(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req);
IPage<DummyInventoryInfoEO> getPageInfo(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req);
/**
* 批量设置
* @param dummyInventoryInfoEOList
* @param dummyInventoryInfoEO
*/
void setBatch(List<DummyInventoryInfoEO> dummyInventoryInfoEOList);
void setBatch(DummyInventoryInfoEO dummyInventoryInfoEO);
/**
* 模板下载
@@ -1,12 +1,21 @@
package com.jero.modules.dummy.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.document.entity.BussDocumentLibraryEO;
import com.jero.modules.document.service.IBussDocumentLibraryEOService;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
import com.jero.modules.dummy.mapper.DummyInventoryInfoEOMapper;
import com.jero.modules.dummy.service.IDummyInventoryInfoEOService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.system.entity.SysCategory;
import com.jero.modules.system.service.impl.SysCategoryServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,8 +26,11 @@ import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* @Description: 虚拟清单详情表
@@ -32,6 +44,25 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
@Autowired
private IBussDocumentLibraryEOService iBussDocumentLibraryEOService;
@Autowired
private SysCategoryServiceImpl sysCategoryService;
@Autowired
private IOSSFileService iOSSFileService;
@Override
public IPage<DummyInventoryInfoEO> getPageInfo(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req) {
QueryWrapper<DummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryInfoEO, req.getParameterMap());
queryWrapper.orderByDesc("create_time");
Page<DummyInventoryInfoEO> page = new Page<DummyInventoryInfoEO>(dummyInventoryInfoEO.getPageNo(), dummyInventoryInfoEO.getPageSize());
IPage<DummyInventoryInfoEO> pageInfo = this.page(page, queryWrapper);
//技术领域处理
// treeDict(dummyInventoryInfoEO, pageInfo);
return pageInfo;
}
/**
* 保存
*
@@ -40,6 +71,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
*/
@Override
public void add(DummyInventoryInfoEO dummyInventoryInfoEO) {
//需要验重(验重--已添加过的不能再添加,提示该标准已存在清单中,不可添加)
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getIds())){
LambdaQueryWrapper<BussDocumentLibraryEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(BussDocumentLibraryEO::getId, Arrays.asList(dummyInventoryInfoEO.getIds().split(",")));
@@ -91,8 +123,25 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
//文件同步删除
LambdaQueryWrapper<DummyInventoryInfoEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(DummyInventoryInfoEO::getId,ids);
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = this.list(wrapper);
List<String> fileIdList = new ArrayList<>();
for (DummyInventoryInfoEO dummyInventoryInfoEO : dummyInventoryInfoEOList) {
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getDesignDeliverableTemplate())){
fileIdList.addAll(Arrays.asList(dummyInventoryInfoEO.getDesignDeliverableTemplate().split(",")));
}
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getPrehomoDeliverableTemplate())){
fileIdList.addAll(Arrays.asList(dummyInventoryInfoEO.getPrehomoDeliverableTemplate().split(",")));
}
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getVerifyDeliverableTemplate())){
fileIdList.addAll(Arrays.asList(dummyInventoryInfoEO.getVerifyDeliverableTemplate().split(",")));
}
}
iOSSFileService.removeByIds(fileIdList);
removeByIds(ids);
}
/**
* 通过id查询
@@ -111,8 +160,13 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
* @return
*/
@Override
public List<DummyInventoryInfoEO> queryList() {
return list();
public List<DummyInventoryInfoEO> queryList(DummyInventoryInfoEO dummyInventoryInfoEO,HttpServletRequest req) {
QueryWrapper<DummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryInfoEO,req.getParameterMap());
queryWrapper.orderByDesc("create_time");
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = this.list(queryWrapper);
//技术领域处理
treeDict(dummyInventoryInfoEO, dummyInventoryInfoEOList);
return dummyInventoryInfoEOList;
}
@@ -122,17 +176,49 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
*/
@Override
public void copyInfoByIds(String ids) {
if(StringUtils.isNotBlank(ids)){
LambdaQueryWrapper<DummyInventoryInfoEO> wrapper = new LambdaQueryWrapper<>();
wrapper.in(DummyInventoryInfoEO::getId,Arrays.asList(ids.split(",")));
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = this.list(wrapper);
for (DummyInventoryInfoEO dummyInventoryInfoEO : dummyInventoryInfoEOList) {
dummyInventoryInfoEO.setId(UUID.randomUUID().toString().replace("-", ""));
}
this.saveBatch(dummyInventoryInfoEOList);
}
}
/**
* 批量设置
* @param dummyInventoryInfoEOList
* @param dummyInventoryInfoEO
*/
@Override
public void setBatch(List<DummyInventoryInfoEO> dummyInventoryInfoEOList) {
public void setBatch(DummyInventoryInfoEO dummyInventoryInfoEO) {
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getIds())){
List<DummyInventoryInfoEO> dummyInventoryInfoEOList = new ArrayList<>();
for (String id : dummyInventoryInfoEO.getIds().split(",")) {
DummyInventoryInfoEO dummyInventoryInfoEOTemp = new DummyInventoryInfoEO();
dummyInventoryInfoEOTemp.setId(id);
//实施类别 implementType
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getImplementType())){
dummyInventoryInfoEOTemp.setImplementType(dummyInventoryInfoEO.getImplementType());
}
//认证类型 attestationType
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getAttestationType())){
dummyInventoryInfoEOTemp.setAttestationType(dummyInventoryInfoEO.getAttestationType());
}
//认证级别 attestationRank
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getAttestationRank())){
dummyInventoryInfoEOTemp.setAttestationRank(dummyInventoryInfoEO.getAttestationRank());
}
//责任领域 dutyTerritory
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getDutyTerritory())){
dummyInventoryInfoEOTemp.setDutyTerritory(dummyInventoryInfoEO.getDutyTerritory());
}
dummyInventoryInfoEOList.add(dummyInventoryInfoEOTemp);
}
this.updateBatchById(dummyInventoryInfoEOList);
}
}
/**
@@ -145,4 +231,100 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
public void exportTemplate(DummyInventoryInfoEO dummyInventoryInfoEO, HttpServletResponse response, HttpServletRequest request) {
}
/**
* 技术领域数据字典处理
* @param dummyInventoryInfoEO
* @param dummyInventoryInfoEOList
*/
private void treeDict(DummyInventoryInfoEO dummyInventoryInfoEO, List<DummyInventoryInfoEO> dummyInventoryInfoEOList) {
Set<String> technologyTerritorySet = new HashSet<>();
List<String> deliverableList = new ArrayList<>();
for (DummyInventoryInfoEO record : dummyInventoryInfoEOList) {
//技术领域
if(StringUtils.isNotBlank(record.getTechnologyTerritory())){
List<String> list = Arrays.asList(record.getTechnologyTerritory().split(","));
technologyTerritorySet.addAll(list);
}
//设计符合性确认交付物模板
if(StringUtils.isNotBlank(record.getDesignDeliverableTemplate())){
deliverableList.addAll(Arrays.asList(record.getDesignDeliverableTemplate().split(",")));
}
// Prehomo确认交付物模板
if(StringUtils.isNotBlank(record.getPrehomoDeliverableTemplate())){
deliverableList.addAll(Arrays.asList(record.getPrehomoDeliverableTemplate().split(",")));
}
// 验证符合性确认交付物模板
if(StringUtils.isNotBlank(record.getVerifyDeliverableTemplate())){
deliverableList.addAll(Arrays.asList(record.getVerifyDeliverableTemplate().split(",")));
}
}
//文件
List<OSSFile> fileInfos = new ArrayList<>();
if(deliverableList.size() != 0){
fileInfos = iOSSFileService.getFileInfos(StringUtils.join(deliverableList, ","));
}
//树形结构数据字典(技术领域)
LambdaQueryWrapper<SysCategory> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SysCategory::getId, technologyTerritorySet);
List<SysCategory> categoryList = sysCategoryService.list(wrapper);
for (DummyInventoryInfoEO record : dummyInventoryInfoEOList) {
//技术领域
if (categoryList.size() != 0 && StringUtils.isNotBlank(record.getTechnologyTerritory())) {
List<String> technologyTerritoryList = Arrays.asList(record.getTechnologyTerritory().split(","));
StringBuilder sb = new StringBuilder();
for (String technologyTerritory : technologyTerritoryList) {
List<SysCategory> collect = categoryList.stream().filter(e -> technologyTerritory.equals(e.getId())).collect(Collectors.toList());
if (CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())) {
sb.append(collect.get(0).getName() + ",");
} else {
sb.append(collect.get(0).getEnName());
}
}
String technologyTerritoryName = "";
if (StringUtils.isNotBlank(sb)) {
technologyTerritoryName = sb.substring(0, sb.length() - 1);
}
record.setTechnologyTerritoryName(technologyTerritoryName);
}
//交付物类型模板
if(fileInfos.size() != 0){
if(StringUtils.isNotBlank(record.getDesignDeliverableTemplate())){
String fileName = getFileName(record, fileInfos,record.getDesignDeliverableTemplate());
if(StringUtils.isNotBlank(fileName)){
record.setDesignDeliverableTemplateName(fileName);
}
}
if(StringUtils.isNotBlank(record.getPrehomoDeliverableTemplate())){
String fileName = getFileName(record, fileInfos,record.getPrehomoDeliverableTemplate());
if(StringUtils.isNotBlank(fileName)){
record.setPrehomoDeliverableTemplateName(fileName);
}
}
if(StringUtils.isNotBlank(record.getVerifyDeliverableTemplate())){
String fileName = getFileName(record, fileInfos,record.getVerifyDeliverableTemplate());
if(StringUtils.isNotBlank(fileName)){
record.setVerifyDeliverableTemplateName(fileName);
}
}
}
}
}
private String getFileName(DummyInventoryInfoEO dummyInventoryInfoEO,List<OSSFile> fileInfos,String deliverableTemplate){
StringBuilder sb = new StringBuilder();
for (String s : deliverableTemplate.split(",")) {
List<OSSFile> collect = fileInfos.stream().filter(e -> s.equals(e.getId())).collect(Collectors.toList());
sb.append(collect.get(0).getFileName() + ",");
}
String sbStr = "";
if(StringUtils.isNotBlank(sb)){
sbStr = sb.substring(0, sb.length() - 1);
}
return sbStr;
}
}
@@ -1,19 +1,27 @@
package com.jero.modules.ocr.controller;
import cn.hutool.core.util.ObjectUtil;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.ocr.entity.OcrRecordEO;
import com.jero.modules.ocr.enums.CheckFlagEnum;
import com.jero.modules.ocr.helpers.ConfigManager;
import com.jero.modules.ocr.helpers.DocumentManager;
import com.jero.modules.ocr.helpers.FileUtility;
import com.jero.modules.ocr.helpers.ServiceConverter;
import com.jero.modules.ocr.service.IOcrRecordEOService;
import com.jero.modules.ocr.service.WebSocketServer;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@@ -40,6 +48,11 @@ import java.util.Scanner;
@Slf4j
public class OcrCheckController {
@Autowired
private IOcrRecordEOService ocrRecordService;
@Autowired
private WebSocketServer webSocketServer;
@Value("${OCR.ocrDownPath}")
private String ocrDownPath;
@@ -78,14 +91,37 @@ public class OcrCheckController {
}
}
@ApiOperation(value = "验证文档是否被锁定")
@GetMapping("/verifyCheckFlag")
public Result<?> verifyCheckFlag(String id) {
if(StringUtils.isBlank(id)){
return Result.error("参数不能为空");
}
OcrRecordEO ocrRecordEO = ocrRecordService.getById(id);
if (CheckFlagEnum.LOCK.getValue().equals(ocrRecordEO.getCheckFlag())) {
return Result.error("该文档当前正在被校核,请稍后重试!");
} else if (CheckFlagEnum.UNLOCK.getValue().equals(ocrRecordEO.getCheckFlag())) {
return Result.OK();
}
// 文档没被校核过
return Result.OK();
}
@ApiOperation(value = "编辑文件")
@RequestMapping("/editorFile")
public ModelAndView index(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
String fileName = "";
if (request.getParameterMap().containsKey("fileName")) {
fileName = request.getParameter("fileName");
}
String id = "";
try {
if (request.getParameterMap().containsKey("fileName")) {
fileName = request.getParameter("fileName");
}
if (request.getParameterMap().containsKey("id")) {
id = request.getParameter("id");
}
// String fileExt = null;
// if (request.getParameterMap().containsKey("fileExt")) {
// fileExt = request.getParameter("fileExt");
@@ -111,37 +147,48 @@ public class OcrCheckController {
// file.SetTypeDesktop(desktopMode);
// file.SetFileName(fileName);
log.info("==========EditorFile==========");
DocumentManager.Init(request, response);
//要编辑的文件名
model.addAttribute("fileName", fileName) ;
//要编辑的文件类型
model.addAttribute("fileType", FileUtility.GetFileExtension(fileName).replace(".", "")) ;
//要编辑的文档类型
model.addAttribute("documentType",FileUtility.GetFileType(fileName).toString().toLowerCase()) ;
//要编辑的文档访问url
log.info("==========EditorFile==========");
DocumentManager.Init(request, response);
//要编辑的文件名
model.addAttribute("fileName", fileName);
//要编辑的文件类型
model.addAttribute("fileType", FileUtility.GetFileExtension(fileName).replace(".", ""));
//要编辑的文档类型
model.addAttribute("documentType", FileUtility.GetFileType(fileName).toString().toLowerCase());
//要编辑的文档访问url
// model.addAttribute("fileUri",DocumentManager.GetFileUri(fileName, true)) ;
// model.addAttribute("callbackUrl", DocumentManager.GetCallback(fileName)) ;
// model.addAttribute("serverUrl", DocumentManager.GetServerUrl(true)) ;
model.addAttribute("fileUri", ocrDownPath + "?fileName=" + fileName) ;
model.addAttribute("callbackUrl", ocrSavePath + "?fileName=" + fileName) ;
model.addAttribute("serverUrl", serverUrl) ;
model.addAttribute("fileKey", ServiceConverter.GenerateRevisionId(DocumentManager.CurUserHostAddress(null) + ocrDownPath + "?fileName=" + fileName)) ;
model.addAttribute("editorMode", DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName)) && !"view".equals(request.getAttribute("mode")) ? "edit" : "view") ;
model.addAttribute("editorUserId",DocumentManager.CurUserHostAddress(null)) ;
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("editorUserName", loginUser.getUsername()) ;
model.addAttribute("fileUri", ocrDownPath + "?fileName=" + fileName);
model.addAttribute("callbackUrl", ocrSavePath + "?id=" + id);
model.addAttribute("serverUrl", serverUrl);
model.addAttribute("fileKey", ServiceConverter.GenerateRevisionId(DocumentManager.CurUserHostAddress(null) + ocrDownPath + "?fileName=" + fileName));
model.addAttribute("editorMode", DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName)) && !"view".equals(request.getAttribute("mode")) ? "edit" : "view");
model.addAttribute("editorUserId", DocumentManager.CurUserHostAddress(null));
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("editorUserName", loginUser.getUsername());
// model.addAttribute("type", desktopMode ? "desktop" : "embedded");
model.addAttribute("type", true ? "desktop" : "embedded");
model.addAttribute("docserviceApiUrl", ConfigManager.GetProperty("files.docservice.url.api"));
model.addAttribute("docServiceUrlPreloader", ConfigManager.GetProperty("files.docservice.url.preloader")) ;
model.addAttribute("currentYear", "2022") ;
model.addAttribute("convertExts", String.join(",", DocumentManager.GetConvertExts())) ;
model.addAttribute("editedExts", String.join(",", DocumentManager.GetEditedExts())) ;
model.addAttribute("documentCreated", new SimpleDateFormat("MM/dd/yyyy").format(new Date())) ;
model.addAttribute("permissionsEdit", Boolean.toString(DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName))).toLowerCase()) ;
return new ModelAndView("editor") ;
model.addAttribute("type", true ? "desktop" : "embedded");
model.addAttribute("docserviceApiUrl", ConfigManager.GetProperty("files.docservice.url.api"));
model.addAttribute("docServiceUrlPreloader", ConfigManager.GetProperty("files.docservice.url.preloader"));
model.addAttribute("currentYear", "2022");
model.addAttribute("convertExts", String.join(",", DocumentManager.GetConvertExts()));
model.addAttribute("editedExts", String.join(",", DocumentManager.GetEditedExts()));
model.addAttribute("documentCreated", new SimpleDateFormat("MM/dd/yyyy").format(new Date()));
model.addAttribute("permissionsEdit", Boolean.toString(DocumentManager.GetEditedExts().contains(FileUtility.GetFileExtension(fileName))).toLowerCase());
return new ModelAndView("editor");
} finally {
// 校核锁定
if (StringUtils.isNotBlank(id)) {
OcrRecordEO ocrRecordEO = new OcrRecordEO();
ocrRecordEO.setId(id);
ocrRecordEO.setCheckFlag(CheckFlagEnum.LOCK.getValue());
// 校核锁定
ocrRecordService.updateById(ocrRecordEO);
}
}
}
/**
@@ -164,17 +211,25 @@ public class OcrCheckController {
@ApiOperation(value = "保存文件")
@RequestMapping("/saveFile")
public void saveFile(HttpServletRequest request, HttpServletResponse response) {
String id = "";
String fileName = "";
if (request.getParameterMap().containsKey("fileName")) {
fileName = request.getParameter("fileName");
}
PrintWriter writer = null;
log.info("==========SaveEditedFile==========");
try {
if (request.getParameterMap().containsKey("id")) {
id = request.getParameter("id");
OcrRecordEO ocrRecordEO = ocrRecordService.getById(id);
if(ObjectUtil.isNotEmpty(ocrRecordEO)){
fileName = ocrRecordEO.getDocRealName();
}
}
log.info("==========SaveEditedFile==========");
writer = response.getWriter();
Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
String body = scanner.hasNext() ? scanner.next() : "";
JSONObject jsonObj = (JSONObject) new JSONParser().parse(body);
log.info("返回结果:" + jsonObj.toString());
log.info("status:" + jsonObj.get("status"));
/*
0 - no document with the key identifier could be found,
@@ -185,7 +240,16 @@ public class OcrCheckController {
6 - document is being edited, but the current document state is saved,
7 - error has occurred while force saving the document.
* */
if ((long) jsonObj.get("status") == 2) {
if ((long) jsonObj.get("status") == 4) {
// status=4 没有编辑内容,直接关闭编辑窗口
// 校核解锁
if(StringUtils.isNotBlank(id)){
OcrRecordEO ocrRecordEO = new OcrRecordEO();
ocrRecordEO.setId(id);
ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
ocrRecordService.updateById(ocrRecordEO);
}
} else if ((long) jsonObj.get("status") == 2) {
/*
* 当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,,此时status = 2,通过request发给我们,我们需要做的就是接收到文件然后回写该文件。
* */
@@ -213,17 +277,40 @@ public class OcrCheckController {
out.flush();
}
connection.disconnect();
// 校核解锁
if(StringUtils.isNotBlank(id)){
OcrRecordEO ocrRecordEO = new OcrRecordEO();
ocrRecordEO.setId(id);
ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
// 校核解锁
ocrRecordService.updateById(ocrRecordEO);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error(e.getMessage());
// 校核解锁
if(StringUtils.isNotBlank(id)){
OcrRecordEO ocrRecordEO = new OcrRecordEO();
ocrRecordEO.setId(id);
ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
ocrRecordService.updateById(ocrRecordEO);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error(e.getMessage());
// 校核解锁
if(StringUtils.isNotBlank(id)){
OcrRecordEO ocrRecordEO = new OcrRecordEO();
ocrRecordEO.setId(id);
ocrRecordEO.setCheckFlag(CheckFlagEnum.UNLOCK.getValue());
ocrRecordService.updateById(ocrRecordEO);
}
}
/*
* status = 1,我们给onlyoffice的服务返回{"error":"0"}的信息,这样onlyoffice会认为回调接口是没问题的,这样就可以在线编辑文档了,否则的话会弹出窗口说明
* */
writer.write("{\"error\":0}");
}
}
@@ -129,6 +129,10 @@ public class OcrRecordEO implements Serializable {
/**文档库关联文件id*/
@ApiModelProperty(value = "文档库关联文件id")
private String connectId;
/**校核锁定标识*/
@ApiModelProperty(value = "校核锁定标识")
private String checkFlag;
@TableField(exist = false)
private String docRealFile;
@@ -0,0 +1,35 @@
package com.jero.modules.ocr.enums;
/**
* @Author: liyawei
* @Description:
* @Date: Created in 11:20 2022/4/14
*/
public enum CheckFlagEnum {
LOCK("锁定","1"),
UNLOCK("解锁","0");
String name;
String value;
CheckFlagEnum(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;
}
}
@@ -22,5 +22,6 @@
<result column="att_id" property="attId" />
<result column="sync_state" property="syncState" />
<result column="connect_id" property="connectId" />
<result column="check_flag" property="checkFlag" />
</resultMap>
</mapper>
@@ -138,14 +138,14 @@ spring:
# url: jdbc:mysql://10.0.3.44:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
url: jdbc:mysql://10.10.10.44:3306/laws_weilai_test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://121.36.69.172:3307/laws_weilai?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
# url: jdbc:mysql://121.36.69.172:3307/laws_weilai_zhn?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
# url: jdbc:mysql://10.10.10.44:3306/laws_weilai_test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
# username: root
# password: hzwlsoft.com
# password: 123456
# driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://121.36.69.172:3307/laws_weilai?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
# url: jdbc:mysql://121.36.69.172:3307/laws_weilai_zhn?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: hzwlsoft.com
driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置
#multi-datasource1:
@@ -54,8 +54,9 @@
populateIframe(iframe, headers) {
var xhr = new XMLHttpRequest();
let fileName= this.$route.query.fileName
let id=this.$route.query.id
// xhr.open("GET", 'http://10.0.1.31:8080/jero-boot/ocr/pageOffice/word');
xhr.open("GET", '/jero-boot/ocr/ocrCheck/editorFile?fileName='+fileName);
xhr.open("GET", '/jero-boot/ocr/ocrCheck/editorFile?fileName='+fileName+'&id='+id);
xhr.responseType = "blob";
headers.forEach((header) => {
xhr.setRequestHeader(header[0], header[1]);
+104 -81
View File
@@ -1,83 +1,85 @@
<template>
<div class="ocr">
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<search :flag="'2'" :url="url"/>
</div>
<div class="table-operator">
<div class="operator-text" @click="handleUpload" v-has="'ocr:ocrRestful:addOcrRecord'">
<a-icon type="plus" />
{{ $t('upload1') }}
<a-spin :spinning="loading">
<div class="table-page-search-wrapper">
<search :flag="'2'" :url="url"/>
</div>
<div class="operator-text" @click="handleFileExport" v-has="'document:ocrPageInfo'">
<a-icon type="export" />
{{ $t('RetrieveFiles') }}
<div class="table-operator">
<div class="operator-text" @click="handleUpload" v-has="'ocr:ocrRestful:addOcrRecord'">
<a-icon type="plus" />
{{ $t('upload1') }}
</div>
<div class="operator-text" @click="handleFileExport" v-has="'document:ocrPageInfo'">
<a-icon type="export" />
{{ $t('RetrieveFiles') }}
</div>
<div class="operator-text" @click="handleDel" v-has="'ocr:ocrRecord:deleteBatch'">
<a-icon type="delete" />
{{ $t('BatchDelete') }}
</div>
</div>
<div class="operator-text" @click="handleDel" v-has="'ocr:ocrRecord:deleteBatch'">
<a-icon type="delete" />
{{ $t('BatchDelete') }}
<!-- 上传弹框-->
<a-modal
class="show-content"
:title="$t('UploadFile')"
:visible="fileVisible"
:confirm-loading="confirmLoading"
@ok="modalOk"
@cancel="handleCancel"
>
<addForm
ref="fileForm"
@addFormClick="addFormClick"
:flag="'2'"
v-if="fileVisible"
:url="url">
</addForm>
</a-modal>
<!-- 同步弹框-->
<a-modal
class="show-content"
:title="$t('SyncLibrary')"
v-if="toVisible"
:visible="toVisible"
:confirm-loading="confirmLoading"
@ok="handleOkTo"
@cancel="handleCancelTo"
>
<p style="text-align: center">{{$t('sureSynchronize')}}</p>
</a-modal>
<!-- 校核弹框-->
<a-modal
class="show-content"
:title="$t('check')"
v-if="checkVisible"
:visible="checkVisible"
:confirm-loading="confirmLoading"
@ok="handleOkCheck"
@cancel="handleCancelCheck"
>
<p style="text-align: center">{{$t('sureVerified')}}</p>
</a-modal>
<div class="table-detail">
<tableData
:flag="'2'"
:OperationList="OperationList"
@actionSynchron="actionSynchron"
:url="url"
showAction
@actionCheck="actionCheck"
@actionDown="actionDown"
@onSelectChange="onSelectChange"
@actionDelete="actionDelete"
@detailClick="detailClick"
/>
</div>
</div>
<!-- 上传弹框-->
<a-modal
class="show-content"
:title="$t('UploadFile')"
:visible="fileVisible"
:confirm-loading="confirmLoading"
@ok="modalOk"
@cancel="handleCancel"
>
<addForm
ref="fileForm"
@addFormClick="addFormClick"
:flag="'2'"
v-if="fileVisible"
:url="url">
</addForm>
</a-modal>
<!-- 同步弹框-->
<a-modal
class="show-content"
:title="$t('SyncLibrary')"
v-if="toVisible"
:visible="toVisible"
:confirm-loading="confirmLoading"
@ok="handleOkTo"
@cancel="handleCancelTo"
>
<p style="text-align: center">{{$t('sureSynchronize')}}</p>
</a-modal>
<!-- 校核弹框-->
<a-modal
class="show-content"
:title="$t('check')"
v-if="checkVisible"
:visible="checkVisible"
:confirm-loading="confirmLoading"
@ok="handleOkCheck"
@cancel="handleCancelCheck"
>
<p style="text-align: center">{{$t('sureVerified')}}</p>
</a-modal>
<div class="table-detail">
<tableData
:flag="'2'"
:OperationList="OperationList"
@actionSynchron="actionSynchron"
:url="url"
showAction
@actionCheck="actionCheck"
@actionDown="actionDown"
@onSelectChange="onSelectChange"
@actionDelete="actionDelete"
@detailClick="detailClick"
/>
</div>
<doc-table v-if="drawVisible" :drawVisible="drawVisible" :drawTableSorce="drawTableSorce" @visible="docVisible" @exportVisible="exportVisible"></doc-table>
<!-- <ocr-upload ref="uploadFile1" :disabled="disabled" :accept="accept" :listType='listType' @uploadSuccess="uploadSuccess"></ocr-upload>-->
<doc-table v-if="drawVisible" :drawVisible="drawVisible" :drawTableSorce="drawTableSorce" @visible="docVisible" @exportVisible="exportVisible"></doc-table>
<!-- <ocr-upload ref="uploadFile1" :disabled="disabled" :accept="accept" :listType='listType' @uploadSuccess="uploadSuccess"></ocr-upload>-->
</a-spin>
</a-card>
</div>
@@ -159,6 +161,7 @@
listType:'text',
token:Vue.ls.get(ACCESS_TOKEN),
websock: null,
loading:false
}
},
props:{
@@ -308,16 +311,36 @@
//校核
actionCheck(val){
// this.checkVisible=true
let newUrl = this.$router.resolve({
path: '/ocr/ocrSplit',
query:{
fileName: val.docRealName
this.loading=true
axios({
url: '/jero-boot/ocr/ocrCheck/verifyCheckFlag',
method: 'get',
params: {
id:val.id
},
headers: {
'X-Access-Token':this.token
}
})
// this.$router.push({
// path:'/ocr/ocrSplit'
// })
window.open(newUrl.href, '_blank')
.then( (res) => {
if (res.data.success) {
let newUrl = this.$router.resolve({
path: '/ocr/ocrSplit',
query:{
fileName: val.docRealName,
id:val.id
}
})
window.open(newUrl.href, '_blank')
}else{
this.$message.error(res.data.message)
}
}).finally(()=>{
this.loading=false
})
},
//下载
actionDown(val){
@@ -20,16 +20,16 @@
<template #title="{ key: treeKey, title, record }">
<a-dropdown :trigger="['contextmenu']">
<!-- <span>{{ title }}</span>-->
<span v-if="title.indexOf(searchValue) >= -1 " :title="title" class="expand-title">
{{ title.substr(0, title.indexOf(searchValue)) }}<span style="color: #f50">{{ searchValue }}</span>{{ title.substr(title.indexOf(searchValue) + searchValue.length) }}
</span>
<!-- <span v-else-if="title.indexOf(searchValue) >= -1 && title.length > 18 && title.indexOf(searchValue)>18" :title="title">-->
<!-- {{title && title.length > 18?title.slice(0,17)+'...':title}}-->
<!-- </span>-->
<!-- <span v-else-if="title.indexOf(searchValue) >= -1 && title.length > 18 && title.indexOf(searchValue)<=18" :title="title">-->
<!-- {{ title.substr(0, title.indexOf(searchValue)) }}<span style="color: #f50">{{ title.indexOf(searchValue)+searchValue.length>18?searchValue.substr(0,18-title.indexOf(searchValue)) : searchValue }}</span>{{ title.indexOf(searchValue)+searchValue.length>18?'...': title.substr(title.indexOf(searchValue) + searchValue.length,18-title.indexOf(searchValue) - searchValue.length)+'...' }}-->
<span v-if="title.indexOf(searchValue) >= -1 && title.length <= 18" :title="title" class="expand-title">
{{ title.substr(0, title.indexOf(searchValue)) }}<span style="color: #f50">{{ searchValue }}</span>{{ title.substr(title.indexOf(searchValue) + searchValue.length) }}
</span>
<span v-else-if="title.indexOf(searchValue) >= -1 && title.length > 18 && title.indexOf(searchValue)>18" :title="title">
{{title && title.length > 18?title.slice(0,17)+'...':title}}
</span>
<span v-else-if="title.indexOf(searchValue) >= -1 && title.length > 18 && title.indexOf(searchValue)<=18" :title="title">
{{ title.substr(0, title.indexOf(searchValue)) }}<span style="color: #f50">{{ title.indexOf(searchValue)+searchValue.length>18?searchValue.substr(0,18-title.indexOf(searchValue)) : searchValue }}</span>{{ title.indexOf(searchValue)+searchValue.length>18?'...': title.substr(title.indexOf(searchValue) + searchValue.length,18-title.indexOf(searchValue) - searchValue.length)+'...' }}
<!-- </span>-->
</span>
<span v-else :title="title">
{{title && title.length > 18?title.slice(0,17)+'...':title}}
</span>
@@ -1133,13 +1133,14 @@
display: flex;
justify-content: space-between;
.split-detail-left{
min-width: 300px;
padding-right: 20px;
border-right: 1px solid #E6E7EC;
overflow-y: auto;
.split-detail-left-tree{
}
.menu-item{
padding: 2px 8px;
border: 1px solid #000000;
@@ -1240,31 +1241,36 @@
}
.split-detail-left{
.ant-tree-node-content-wrapper-normal{
.ant-tree-node-content-wrapper-normal{
}
ant-tree-node-content-wrapper{
.expand-title{
}
}
.ant-tree-title{
span{
display: block;
width: auto;
overflow:hidden;
text-overflow:ellipsis;
}
}
.ant-tree-child-tree{
.ant-tree-title{
span{
display: block;
width: auto;
overflow:hidden;
text-overflow:ellipsis;
}
.ant-tree-title{
span{
display: block;
width: 240px;
overflow:hidden;
text-overflow:ellipsis;
}
}
.ant-tree-child-tree{
.ant-tree-title{
span{
display: block;
width: 240px;
overflow:hidden;
text-overflow:ellipsis;
}
}
}
}
}
}
.split-detail-table{
@@ -13,14 +13,15 @@
<a-col :span="12">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" :title="$t('scopeOfApplication')">{{$t('scopeOfApplication')}}</span>
<span class="title-text-text"
:title="$t('implementationCategory')">{{$t('implementationCategory')}}</span>
</div>
<a-form-model-item class="itemModel">
<j-dict-select-tag class="box-input" v-model="formInline.shi4Yong4Fan4Wei2"
@input="handleInput('shi4Yong4Fan4Wei2')"
:placeholder="$t('PleaseSelect')+$t('scopeOfApplication')"
<j-dict-select-tag class="box-input" v-model="formInline.implementType"
@input="handleInput('implementType')"
:placeholder="$t('PleaseSelect')+$t('implementationCategory')"
:type="'select'"
:triggerChange="false" dictCode="apply_scope"/>
:triggerChange="false" dictCode="implement_type"/>
</a-form-model-item>
</div>
</a-col>
@@ -34,7 +35,7 @@
@input="handleInput('attestationType')"
:placeholder="$t('PleaseSelect')+$t('certificationType')"
:type="'select'"
:triggerChange="false" dictCode=""/>
:triggerChange="false" dictCode="attestation_type"/>
</a-form-model-item>
</div>
</a-col>
@@ -48,7 +49,7 @@
@input="handleInput('attestationRank')"
:placeholder="$t('PleaseSelect')+$t('certificationLevel')"
:type="'select'"
:triggerChange="false" dictCode=""/>
:triggerChange="false" dictCode="attestation_rank"/>
</a-form-model-item>
</div>
</a-col>
@@ -108,7 +109,7 @@
this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
this.confirmLoading = false
this.$emit('editModelList')
this.$emit('batSettingList')
} else {
this.$message.warning(this.$t('operationFailed'))
this.confirmLoading = false
@@ -59,7 +59,7 @@
</div>
<a-form-model-item class="itemModel" prop="WVTAID">
<a-input class="box-input"
:disabled="true"
:disabled="false"
v-model="formInline.wvtaId"
:placeholder="$t('PleaseEnter')+'WVTA ID'"/>
</a-form-model-item>
@@ -175,12 +175,15 @@
:title="$t('technicalField')">{{$t('technicalField')}}</span>
</div>
<a-form-model-item class="itemModel" prop="technologyTerritory">
<j-dict-select-tag class="box-input" v-model="formInline.technologyTerritory"
:disabled="disabled"
@input="handleInput('technologyTerritory')"
:placeholder="$t('PleaseSelect')+$t('technicalField')"
:type="'select'"
:triggerChange="false" :dictCode="'technology_territory'"/>
<a-tree-select
v-model="formInline.technologyTerritory"
:maxTagCount="1"
class="box-input"
style="width: 100%"
:tree-data="CategoryTreeList"
tree-checkable
:placeholder="$t('PleaseSelect')+$t('technicalField')"
/>
</a-form-model-item>
</div>
</a-col>
@@ -299,7 +302,7 @@
@input="handleInput('designInitiator')"
:placeholder="$t('PleaseSelect')+$t('Sponsor')"
:type="'select'"
:triggerChange="false" :dictCode="'dict_field'"/>
:triggerChange="false" :dictCode="'fa1_qi3_ren2'"/>
</a-form-model-item>
</div>
</a-col>
@@ -315,7 +318,7 @@
@input="handleInput('designDuty')"
:placeholder="$t('PleaseSelect')+$t('personLiable')"
:type="'select'"
:triggerChange="false" :dictCode="'dict_field'"/>
:triggerChange="false" :dictCode="'ze2_ren4_ren2'"/>
</a-form-model-item>
</div>
</a-col>
@@ -371,7 +374,7 @@
@input="handleInput('prehomoInitiator')"
:placeholder="$t('PleaseSelect')+$t('Sponsor')"
:type="'select'"
:triggerChange="false" :dictCode="'dict_field'"/>
:triggerChange="false" :dictCode="'fa1_qi3_ren2'"/>
</a-form-model-item>
</div>
</a-col>
@@ -387,7 +390,7 @@
@input="handleInput('prehomoDuty')"
:placeholder="$t('PleaseSelect')+$t('personLiable')"
:type="'select'"
:triggerChange="false" :dictCode="'dict_field'"/>
:triggerChange="false" :dictCode="'ze2_ren4_ren2'"/>
</a-form-model-item>
</div>
</a-col>
@@ -442,7 +445,7 @@
@input="handleInput('verifyInitiator')"
:placeholder="$t('PleaseSelect')+$t('Sponsor')"
:type="'select'"
:triggerChange="false" :dictCode="'dict_field'"/>
:triggerChange="false" :dictCode="'fa1_qi3_ren2'"/>
</a-form-model-item>
</div>
</a-col>
@@ -458,7 +461,7 @@
@input="handleInput('verifyDuty')"
:placeholder="$t('PleaseSelect')+$t('personLiable')"
:type="'select'"
:triggerChange="false" :dictCode="'dict_field'"/>
:triggerChange="false" :dictCode="'ze2_ren4_ren2'"/>
</a-form-model-item>
</div>
</a-col>
@@ -499,16 +502,28 @@
confirmLoading: false,
rules: {},
formInline: {},
disabled: false
disabled: false,
CategoryTreeList: []
}
},
mounted() {
this.getSysCategoryTree()
},
methods: {
getSysCategoryTree() {
getAction(this.url.getSysCategoryTree, {}).then((res) => {
if (res.success) {
this.CategoryTreeList = res.result
} else {
this.CategoryTreeList = []
}
})
},
editModel(item) {
this.visible = true
this.$nextTick(() => {
this.formInline = item || {}
this.formInline.technologyTerritory = this.formInline.technologyTerritory ? this.formInline.technologyTerritory.split(',') : []
})
},
clickButtonToUpload(item) {
@@ -539,8 +554,14 @@
this.visible = false
},
handleSubmit() {
let formInline = JSON.parse(JSON.stringify(this.formInline))
Object.keys(formInline).forEach(res => {
if (formInline[res] && formInline[res] instanceof Array) {
formInline[res] = formInline[res].join(',')
}
})
this.confirmLoading = true
postAction(this.url.editModel, this.formInline).then((res) => {
postAction(this.url.editModel, formInline).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
@@ -48,8 +48,8 @@
<div class="title-text" :title="$t('standard')">
<span>{{$t('standard')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standard')"
v-model="queryParam.standard"></a-input>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standard')"
v-model="queryParam.standard"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
@@ -57,8 +57,8 @@
<div class="title-text" :title="$t('title')">
<span>{{$t('title')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('title')"
v-model="queryParam.title"></a-input>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('title')"
v-model="queryParam.title"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
@@ -66,8 +66,8 @@
<div class="title-text" :title="$t('subtitle')">
<span>{{$t('subtitle')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('subtitle')"
v-model="queryParam.subtitle"></a-input>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('subtitle')"
v-model="queryParam.subtitle"></j-input>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
@@ -131,17 +131,6 @@
</span>
</a-table>
</div>
<div class="page">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</a-card>
</div>
</div>
@@ -175,7 +164,7 @@
queryParam: {},
url: {
addModelList: '/document/bussDocumentLibraryEO/queryPageInfoDummy',
page: '/dummy/dummyInventoryInfoEO/page',
list: '/dummy/dummyInventoryInfoEO/list',
addModel: '/dummy/dummyInventoryInfoEO/add',
editModel: '/dummy/dummyInventoryInfoEO/edit',
deleteBatch: '/dummy/dummyInventoryInfoEO/deleteBatch',
@@ -183,7 +172,8 @@
setBatch: '/dummy/dummyInventoryInfoEO/setBatch',
importZipUrl: '/dummy/dummyInventoryInfoEO/importData',
exportData: '/dummy/dummyInventoryInfoEO/exportData',
exportTemplate: '/dummy/dummyInventoryInfoEO/exportTemplate'
exportTemplate: '/dummy/dummyInventoryInfoEO/exportTemplate',
getSysCategoryTree: '/sys/category/getSysCategoryTree'
},
loading: false,
dataSource: [],
@@ -199,7 +189,7 @@
title: this.$t('standard'),
align: 'center',
dataIndex: 'serialNumber',
width: 100,
width: 180,
fixed: 'left'
},
{
@@ -249,22 +239,22 @@
{
title: this.$t('certificationType'),
align: 'center',
dataIndex: 'attestationType'
dataIndex: 'attestationType_dictText'
},
{
title: this.$t('certificationLevel'),
align: 'center',
dataIndex: 'attestationRank'
dataIndex: 'attestationRank_dictText'
},
{
title: this.$t('technicalField'),
align: 'center',
dataIndex: 'technologyTerritory'
dataIndex: 'technologyTerritoryName'
},
{
title: this.$t('areaOfResponsibility'),
align: 'center',
dataIndex: 'dutyTerritory'
dataIndex: 'dutyTerritory_dictText'
},
{
title: this.$t('remarks'),
@@ -277,17 +267,17 @@
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'designDeliverableTemplate',
dataIndex: 'designDeliverableTemplateName',
align: 'center'
},
{
title: this.$t('Sponsor'),
dataIndex: 'designInitiator',
dataIndex: 'designInitiator_dictText',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'designDuty',
dataIndex: 'designDuty_dictText',
align: 'center'
}
]
@@ -297,17 +287,17 @@
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'prehomoDeliverableTemplate',
dataIndex: 'prehomoDeliverableTemplateName',
align: 'center'
},
{
title: this.$t('Sponsor'),
dataIndex: 'prehomoInitiator',
dataIndex: 'prehomoInitiator_dictText',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'prehomoDuty',
dataIndex: 'prehomoDuty_dictText',
align: 'center'
}
]
@@ -317,17 +307,17 @@
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'verifyDeliverableTemplate',
dataIndex: 'verifyDeliverableTemplateName',
align: 'center'
},
{
title: this.$t('Sponsor'),
dataIndex: 'verifyInitiator',
dataIndex: 'verifyInitiator_dictText',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'verifyDuty',
dataIndex: 'verifyDuty_dictText',
align: 'center'
}
]
@@ -341,15 +331,13 @@
}
],
selectedRowKeys: [],
isTrue: false,
total: 0,
pageSize: 10,
pageNo: 1
isTrue: false
}
},
mounted() {
this.title = this.$route.query.title
this.isTrue = this.$route.query.title == '虚拟清单详情' ? false : true
this.getList()
},
computed: {
columns() {
@@ -370,12 +358,10 @@
this.$refs.UpdateLogRef.getList()
},
searchQuery() {
this.pageNo = 1
this.getList()
},
searchReset() {
this.queryParam = {}
this.pageNo = 1
this.getList()
},
//模板下载
@@ -417,39 +403,20 @@
this.$message.warning(this.$t('selectLeastOne'))
}
},
pageOnChange(page, pageSize) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
addModelList() {
this.pageNo = 1
this.getList()
},
editModelList() {
this.pageNo = 1
this.getList()
},
getList() {
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...this.queryParam
}
this.loading = true
getAction(this.url.page, query).then((res) => {
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = res.result.current - 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.dataSource = res.result || []
this.loading = false
} else {
this.loading = false
@@ -457,7 +424,6 @@
})
},
batSettingList() {
this.pageNo = 1
this.getList()
},
batSettingClick() {
@@ -19,7 +19,7 @@
<j-dict-select-tag class="box-input" v-model="queryParam.targetMarket"
:placeholder="$t('PleaseSelect')+$t('targetMarket')"
:type="'select'"
:triggerChange="false" :dictCode="''"/>
:triggerChange="false" :dictCode="'region'"/>
</div>
</a-col>
<a-col :md="6" :sm="8">
@@ -30,7 +30,7 @@
<j-dict-select-tag class="box-input" v-model="queryParam.projectStatus"
:placeholder="$t('PleaseSelect')+$t('projectStatus')"
:type="'select'"
:triggerChange="false" :dictCode="''"/>
:triggerChange="false" :dictCode="'project_status'"/>
</div>
</a-col>
<template v-if="toggleSearchStatus">
@@ -78,7 +78,7 @@
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:columns="columns"
>
<span slot="entryName" slot-scope="text,record">
<span slot="projectName" slot-scope="text,record">
<a @click="entryNameClick(record)">{{text}}</a>
</span>
<span slot="operation" slot-scope="text,record">
@@ -121,7 +121,13 @@
visible: false,
dataSource: [],
confirmLoading: false,
url: {},
url: {
list:'project/projectLibraryBase/list',
add:'project/projectLibraryBase/add',
edit:'project/projectLibraryBase/edit',
deleteBatch:'project/projectLibraryBase/delete',
deleteAll:'project/projectLibraryBase/deleteBatch',
},
total: 0,
pageSize: 10,
pageNo: 1,
@@ -130,8 +136,8 @@
{
title: this.$t('entryName'),
align: 'center',
dataIndex: 'entryName',
scopedSlots: { customRender: 'entryName' }
dataIndex: 'projectName',
scopedSlots: { customRender: 'projectName' }
},
{
title: this.$t('targetMarket'),
@@ -146,17 +152,17 @@
{
title: this.$t('StudioEngineer'),
align: 'center',
dataIndex: 'StudioEngineer'
dataIndex: 'studioEngineer'
},
{
title: this.$t('certifiedEngineer'),
align: 'center',
dataIndex: 'certifiedEngineer'
dataIndex: 'certificationEngineer'
},
{
title: this.$t('CertificationTime'),
align: 'center',
dataIndex: 'CertificationTime'
dataIndex: 'createTime'
},
{
title: this.$t('NTplatform'),