调整业务

main
252535409 2 years ago
parent 61179a2f22
commit cdef82f32f

@ -0,0 +1,171 @@
package org.jeecg.modules.ai.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailTemplateService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-03
* @Version: V1.0
*/
@Api(tags="办事预审记录上传资料表")
@RestController
@RequestMapping("/ai/preReviewRecordsDetailTemplate")
@Slf4j
public class PreReviewRecordsDetailTemplateController extends JeecgController<PreReviewRecordsDetailTemplate, IPreReviewRecordsDetailTemplateService> {
@Autowired
private IPreReviewRecordsDetailTemplateService preReviewRecordsDetailTemplateService;
/**
*
*
* @param preReviewRecordsDetailTemplate
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "办事预审记录上传资料表-分页列表查询")
@ApiOperation(value="办事预审记录上传资料表-分页列表查询", notes="办事预审记录上传资料表-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(PreReviewRecordsDetailTemplate preReviewRecordsDetailTemplate,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<PreReviewRecordsDetailTemplate> queryWrapper = QueryGenerator.initQueryWrapper(preReviewRecordsDetailTemplate, req.getParameterMap());
Page<PreReviewRecordsDetailTemplate> page = new Page<PreReviewRecordsDetailTemplate>(pageNo, pageSize);
IPage<PreReviewRecordsDetailTemplate> pageList = preReviewRecordsDetailTemplateService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
*
*
* @param preReviewRecordsDetailTemplate
* @return
*/
@AutoLog(value = "办事预审记录上传资料表-添加")
@ApiOperation(value="办事预审记录上传资料表-添加", notes="办事预审记录上传资料表-添加")
@PostMapping(value = "/add")
public Result<?> add(@RequestBody PreReviewRecordsDetailTemplate preReviewRecordsDetailTemplate) {
preReviewRecordsDetailTemplateService.save(preReviewRecordsDetailTemplate);
return Result.OK("添加成功!");
}
/**
*
*
* @param preReviewRecordsDetailTemplate
* @return
*/
@AutoLog(value = "办事预审记录上传资料表-编辑")
@ApiOperation(value="办事预审记录上传资料表-编辑", notes="办事预审记录上传资料表-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@RequestBody PreReviewRecordsDetailTemplate preReviewRecordsDetailTemplate) {
preReviewRecordsDetailTemplateService.updateById(preReviewRecordsDetailTemplate);
return Result.OK("编辑成功!");
}
/**
* id
*
* @param id
* @return
*/
@AutoLog(value = "办事预审记录上传资料表-通过id删除")
@ApiOperation(value="办事预审记录上传资料表-通过id删除", notes="办事预审记录上传资料表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
preReviewRecordsDetailTemplateService.removeById(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.preReviewRecordsDetailTemplateService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* id
*
* @param id
* @return
*/
@AutoLog(value = "办事预审记录上传资料表-通过id查询")
@ApiOperation(value="办事预审记录上传资料表-通过id查询", notes="办事预审记录上传资料表-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
PreReviewRecordsDetailTemplate preReviewRecordsDetailTemplate = preReviewRecordsDetailTemplateService.getById(id);
if(preReviewRecordsDetailTemplate==null) {
return Result.error("未找到对应数据");
}
return Result.OK(preReviewRecordsDetailTemplate);
}
/**
* excel
*
* @param request
* @param preReviewRecordsDetailTemplate
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PreReviewRecordsDetailTemplate preReviewRecordsDetailTemplate) {
return super.exportXls(request, preReviewRecordsDetailTemplate, PreReviewRecordsDetailTemplate.class, "办事预审记录上传资料表");
}
/**
* excel
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, PreReviewRecordsDetailTemplate.class);
}
}

@ -0,0 +1,66 @@
package org.jeecg.modules.ai.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
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 org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-03
* @Version: V1.0
*/
@Data
@TableName("pre_review_records_detail_template")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="pre_review_records_detail_template对象", description="办事预审记录上传资料表")
public class PreReviewRecordsDetailTemplate implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**预审记录详情id*/
@Excel(name = "预审记录详情id", width = 15)
@ApiModelProperty(value = "预审记录详情id")
private java.lang.String recordDetailId;
/**材料编码*/
@Excel(name = "材料编码", width = 15)
@ApiModelProperty(value = "材料编码")
private java.lang.String materialCode;
/**预审事项编码*/
@Excel(name = "预审事项编码", width = 15)
@ApiModelProperty(value = "预审事项编码")
private java.lang.String eventCode;
/**模板id*/
@Excel(name = "模板id", width = 15)
@ApiModelProperty(value = "模板id")
private java.lang.String templateId;
/**上传材料地址*/
@Excel(name = "上传材料地址", width = 15)
@ApiModelProperty(value = "上传材料地址")
private java.lang.String materiaUrl;
/**ocr识别结果*/
@Excel(name = "ocr识别结果", width = 15)
@ApiModelProperty(value = "ocr识别结果")
private java.lang.String ocrResult;
/**预审结果*/
@Excel(name = "预审结果", width = 15)
@ApiModelProperty(value = "预审结果")
private java.lang.String reviewResult;
}

@ -0,0 +1,54 @@
package org.jeecg.modules.ai.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
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 org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-02
* @Version: V1.0
*/
@Data
@TableName("ys_directory_material_template")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="ys_directory_material_template对象", description="材料上传模板表")
public class YsDirectoryMaterialTemplate implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**材料编码*/
@Excel(name = "材料编码", width = 15)
@ApiModelProperty(value = "材料编码")
private java.lang.String materialCode;
/**模板id*/
@Excel(name = "模板id", width = 15)
@ApiModelProperty(value = "模板id")
private java.lang.String templateId;
/**模板地址*/
@Excel(name = "模板地址", width = 15)
@ApiModelProperty(value = "模板地址")
private java.lang.String templateUrl;
/**排序*/
@Excel(name = "排序", width = 15)
@ApiModelProperty(value = "排序")
private java.lang.Integer sort;
}

@ -0,0 +1,18 @@
package org.jeecg.modules.ai.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-03
* @Version: V1.0
*/
public interface PreReviewRecordsDetailTemplateMapper extends BaseMapper<PreReviewRecordsDetailTemplate> {
}

@ -0,0 +1,18 @@
package org.jeecg.modules.ai.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.ai.entity.YsDirectoryMaterialTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-02
* @Version: V1.0
*/
public interface YsDirectoryMaterialTemplateMapper extends BaseMapper<YsDirectoryMaterialTemplate> {
}

@ -5,12 +5,13 @@
<result column="id" property="id" jdbcType="VARCHAR"/>
<result column="material_name" property="materialName" jdbcType="VARCHAR"/>
<result column="review_result" property="reviewResult" jdbcType="VARCHAR"/>
<result column="material_code" property="materialCode" jdbcType="VARCHAR"/>
<result column="materia_url" property="materiaUrl" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="prereviewrecordsdetail_column_body">
a.id,b.material_name,a.review_result,a.materia_url,a.create_time
a.id,b.material_name,a.review_result,a.materia_url,a.create_time,a.material_code
</sql>
<sql id="prereviewrecordsdetail_select_body">

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.demo.ai.mapper.PreReviewRecordsDetailTemplateMapper">
</mapper>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.ai.mapper.YsDirectoryMaterialTemplateMapper">
</mapper>

@ -29,4 +29,11 @@ public interface IPreExaminationMattersFieldService extends IService<PreExaminat
* @return
*/
public boolean saveInfo(String reviewInfo) ;
/**
*
* @param reviewInfo
* @return
*/
public String echoForm(String reviewRecordId) ;
}

@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetail;
import org.jeecg.modules.ai.qo.PreReviewRecordsDetailQuery;
import org.jeecg.modules.ai.vo.PreReviewRecordsDetailVo;
import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -34,4 +35,12 @@ public interface IPreReviewRecordsDetailService extends IService<PreReviewRecord
* @return
*/
public List<PreReviewRecordsDetailVo> getSubmittedMaterialList(String eventCode,String userId);
/**
*
* @param mf
* @param bizPath
* @return
*/
public String uploadLocal(MultipartFile mf,String bizPath);
}

@ -0,0 +1,15 @@
package org.jeecg.modules.ai.service;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-03
* @Version: V1.0
*/
public interface IPreReviewRecordsDetailTemplateService extends IService<PreReviewRecordsDetailTemplate> {
}

@ -12,4 +12,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IYsDirectoryMaterialService extends IService<YsDirectoryMaterial> {
/**
*
* @param materialCode
* @param ocrResult
* @return
*/
public String getReviewResult(String materialCode,String ocrResult);
}

@ -0,0 +1,15 @@
package org.jeecg.modules.ai.service;
import org.jeecg.modules.ai.entity.YsDirectoryMaterialTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-02
* @Version: V1.0
*/
public interface IYsDirectoryMaterialTemplateService extends IService<YsDirectoryMaterialTemplate> {
}

@ -1,19 +1,29 @@
package org.jeecg.modules.ai.service.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Resource;
import org.jeecg.modules.ai.entity.PreExaminationMattersField;
import org.jeecg.modules.ai.entity.PreReviewMaterial;
import org.jeecg.modules.ai.entity.PreReviewRecords;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetail;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import org.jeecg.modules.ai.mapper.PreExaminationMattersFieldMapper;
import org.jeecg.modules.ai.mapper.PreReviewMaterialMapper;
import org.jeecg.modules.ai.mapper.PreReviewRecordsMapper;
import org.jeecg.modules.ai.qo.PreExaminationMattersFieldQuery;
import org.jeecg.modules.ai.qo.PreReviewRecordsDetailQuery;
import org.jeecg.modules.ai.service.IPreExaminationMattersFieldService;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailService;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailTemplateService;
import org.jeecg.modules.ai.service.IPreReviewRecordsService;
import org.jeecg.modules.ai.vo.PreExaminationMattersFieldVo;
import org.jeecg.modules.ai.vo.PreReviewMaterialVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
@ -36,6 +46,12 @@ public class PreExaminationMattersFieldServiceImpl extends ServiceImpl<PreExamin
private PreExaminationMattersFieldMapper preExaminationMattersFieldMapper;
@Resource
private PreReviewMaterialMapper preReviewMaterialMapper;
@Autowired
private IPreReviewRecordsService iPreReviewRecordsService;
@Autowired
private IPreReviewRecordsDetailService iPreReviewRecordsDetailService;
@Autowired
private IPreReviewRecordsDetailTemplateService iPreReviewRecordsDetailTemplateService;
/**
*
@ -81,4 +97,45 @@ public class PreExaminationMattersFieldServiceImpl extends ServiceImpl<PreExamin
}
return true;
}
/**
*
* @param reviewInfo
* @return
*/
@Override
public String echoForm(String reviewRecordId) {
JSONObject result = new JSONObject();
PreReviewRecords preReviewRecords = iPreReviewRecordsService.getById(reviewRecordId);
//获取配置的字段信息
List<PreExaminationMattersField> listFile = preExaminationMattersFieldMapper.selectByEventCode(preReviewRecords.getEventCode());
//获取识别结果
for(PreExaminationMattersField field:listFile) {
LambdaQueryWrapper<PreReviewRecordsDetail> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PreReviewRecordsDetail::getEventCode, field.getEventCode());
queryWrapper.eq(PreReviewRecordsDetail::getMaterialCode, field.getMaterialCode());
queryWrapper.eq(PreReviewRecordsDetail::getReviewRecordsId, reviewRecordId);
PreReviewRecordsDetail detail = iPreReviewRecordsDetailService.getOne(queryWrapper);
result.put(field.getFieldName(), "");
LambdaQueryWrapper<PreReviewRecordsDetailTemplate> queryWrapperTemplate = new LambdaQueryWrapper<>();
queryWrapperTemplate.eq(PreReviewRecordsDetailTemplate::getRecordDetailId, detail.getId());
queryWrapperTemplate.eq(PreReviewRecordsDetailTemplate::getMaterialCode, detail.getMaterialCode());
List<PreReviewRecordsDetailTemplate> listPreReviewRecordsDetailTemplate = iPreReviewRecordsDetailTemplateService.list(queryWrapperTemplate);
for(PreReviewRecordsDetailTemplate template:listPreReviewRecordsDetailTemplate) {
JSONObject jsonObject = JSONObject.parseObject(template.getOcrResult());
Iterator<String> keys = jsonObject.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
if(field.getFieldCode().equals(key)) {
result.put(field.getFieldName(), jsonObject.getString(key));
break;
}
}
}
}
return result.toString();
}
}

@ -1,17 +1,27 @@
package org.jeecg.modules.ai.service.impl;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.annotation.Resource;
import org.jeecg.common.util.CommonUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetail;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import org.jeecg.modules.ai.mapper.PreReviewRecordsDetailMapper;
import org.jeecg.modules.ai.qo.PreReviewRecordsDetailQuery;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailService;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailTemplateService;
import org.jeecg.modules.ai.vo.PreReviewRecordsDetailVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -27,6 +37,10 @@ public class PreReviewRecordsDetailServiceImpl extends ServiceImpl<PreReviewReco
@Resource
private PreReviewRecordsDetailMapper preReviewRecordsDetailMapper;
@Value(value = "${jeecg.path.upload}")
private String uploadpath;
@Autowired
private IPreReviewRecordsDetailTemplateService iPreReviewRecordsDetailTemplateService;
/**
*
@ -52,6 +66,60 @@ public class PreReviewRecordsDetailServiceImpl extends ServiceImpl<PreReviewReco
query.setUserId(userId);
query.setEventCode(eventCode);
query.setReviewResult("通过");
return preReviewRecordsDetailMapper.getPreReviewRecordsDetailList(query);
List<PreReviewRecordsDetailVo> list = preReviewRecordsDetailMapper.getPreReviewRecordsDetailList(query);
for(PreReviewRecordsDetailVo vo:list) {
LambdaQueryWrapper<PreReviewRecordsDetailTemplate> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PreReviewRecordsDetailTemplate::getRecordDetailId, vo.getId());
queryWrapper.eq(PreReviewRecordsDetailTemplate::getMaterialCode, vo.getMaterialCode());
List<PreReviewRecordsDetailTemplate> listPreReviewRecordsDetailTemplate = iPreReviewRecordsDetailTemplateService.list(queryWrapper);
vo.setListPreReviewRecordsDetailTemplate(listPreReviewRecordsDetailTemplate);
}
return list;
}
/**
*
* @param mf
* @param bizPath
* @return
*/
@Override
public String uploadLocal(MultipartFile mf,String bizPath){
try {
String ctxPath = uploadpath;
String fileName = null;
File file = new File(ctxPath + File.separator + bizPath + File.separator );
if (!file.exists()) {
file.mkdirs();// 创建文件根目录
}
String orgName = mf.getOriginalFilename();// 获取文件名
orgName = CommonUtils.getFileName(orgName);
if(orgName.indexOf(".")!=-1){
fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf("."));
}else{
fileName = orgName+ "_" + System.currentTimeMillis();
}
String savePath = file.getPath() + File.separator + fileName;
File savefile = new File(savePath);
FileCopyUtils.copy(mf.getBytes(), savefile);
String dbpath = null;
if(oConvertUtils.isNotEmpty(bizPath)){
dbpath = bizPath + File.separator + fileName;
}else{
dbpath = fileName;
}
if (dbpath.contains("\\")) {
dbpath = dbpath.replace("\\", "/");
}
return dbpath;
} catch (IOException e) {
log.error(e.getMessage(), e);
}
return "";
}
public String getOcrResutl() {
return null;
}
}

@ -0,0 +1,19 @@
package org.jeecg.modules.ai.service.impl;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import org.jeecg.modules.ai.mapper.PreReviewRecordsDetailTemplateMapper;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailTemplateService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-03
* @Version: V1.0
*/
@Service
public class PreReviewRecordsDetailTemplateServiceImpl extends ServiceImpl<PreReviewRecordsDetailTemplateMapper, PreReviewRecordsDetailTemplate> implements IPreReviewRecordsDetailTemplateService {
}

@ -17,11 +17,13 @@ import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.ai.entity.PreExaminationMatters;
import org.jeecg.modules.ai.entity.PreReviewRecords;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetail;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import org.jeecg.modules.ai.entity.YsDirectory;
import org.jeecg.modules.ai.entity.YsDirectoryMaterial;
import org.jeecg.modules.ai.mapper.PreExaminationMattersMapper;
import org.jeecg.modules.ai.mapper.PreReviewMaterialMapper;
import org.jeecg.modules.ai.mapper.PreReviewRecordsDetailMapper;
import org.jeecg.modules.ai.mapper.PreReviewRecordsDetailTemplateMapper;
import org.jeecg.modules.ai.mapper.PreReviewRecordsMapper;
import org.jeecg.modules.ai.mapper.YsDirectoryMapper;
import org.jeecg.modules.ai.qo.PreExaminationMattersQuery;
@ -68,6 +70,8 @@ public class PreReviewRecordsServiceImpl extends ServiceImpl<PreReviewRecordsMap
private PreReviewMaterialMapper preReviewMaterialMapper;
@Resource
private PreExaminationMattersMapper preExaminationMattersMapper;
@Resource
private PreReviewRecordsDetailTemplateMapper preReviewRecordsDetailTemplateMapper;
@Value(value = "${jeecg.path.upload}")
private String uploadpath;
@ -75,21 +79,26 @@ public class PreReviewRecordsServiceImpl extends ServiceImpl<PreReviewRecordsMap
*
* @param preReviewRecordsVo
* {
* "eventCode":"1234",
* "materialBag":"TX7788",
* "userId":"372922111111111111",
* "materialDetail":[
* "eventCode":"1234",//事项编码
* "materialBag":"TX7788",//材料袋编码
* "userId":"372922111111111111",//用户身份信息
* "materialDetail":[//材料详情列表
* {
* "materialCode":"456",
* "reviewResult":"通过",
* "ocrResult":"11111",
* "materiaUrl":"/sss/ddd.docx"
* "materialCode":"456",//材料编码
** "listMaterialResult":[//上传材料信息
* {
* "materiaUrl":"/dfasfasf/dddd.png",//上传地址
* "templateId":"asdfasfaf",//对应的模板id
* "reviewResult":"通过",//预审结果
* "ocrResult":"{\"result\":[{\"major\":{\"probability\":0.9989657998,\"words\":\"德阳玺合印章有限公司送检样章\"},\"minor\":[],\"probability\":0.9393941164,\"location\":{\"top\":30,\"left\":58,\"width\":578,\"height\":577},\"type\":\"circle\"}],\"log_id\":1731126137911910870,\"result_num\":1}"
* }
* ]
* },
* {
* "materialCode":"456",//预审材料编码
* "reviewResult":"有效期已过通过",//预审结果
* "ocrResult":"11111",//识别结果
* "materiaUrl":"/sss/ddd.docx"//上传文件地址
* "materialCode":"456",
* "listMaterialResult":[
*
* ]
* }
* ]
* }
@ -119,7 +128,8 @@ public class PreReviewRecordsServiceImpl extends ServiceImpl<PreReviewRecordsMap
preReviewRecordsMapper.insert(preReviewRecords);
boolean validStatusFlag = true;//是否全部通过审核
//
boolean validEventStatusFlag = true;//是否全部通过审核
//保存预审记录详情
JSONArray materialDetailArray = json.getJSONArray("materialDetail");
for(int i=0;i<materialDetailArray.size();i++) {
@ -127,14 +137,37 @@ public class PreReviewRecordsServiceImpl extends ServiceImpl<PreReviewRecordsMap
PreReviewRecordsDetail preReviewRecordsDetail = JSONObject.parseObject(materialJson.toString(), PreReviewRecordsDetail.class);
preReviewRecordsDetail.setEventCode(json.getString("eventCode"));
preReviewRecordsDetail.setSysOrgCode(ysDirectory.getSysOrgCode());
preReviewRecordsDetail.setReviewRecordsId(preReviewRecords.getId());
preReviewRecordsDetailMapper.insert(preReviewRecordsDetail);
//添加预审材料
boolean validStatusFlag = true;//是否全部通过审核
JSONArray materialDetailTemArray = materialJson.getJSONArray("listMaterialResult");
for(int j=0;j<materialDetailTemArray.size();j++) {
JSONObject result = materialDetailTemArray.getJSONObject(j);
PreReviewRecordsDetailTemplate temp = new PreReviewRecordsDetailTemplate();
temp.setEventCode(json.getString("eventCode"));
temp.setMaterialCode(materialJson.getString("materialCode"));
temp.setMateriaUrl(result.getString("materiaUrl"));
temp.setOcrResult(result.getString("ocrResult"));
temp.setTemplateId(result.getString("templateId"));
temp.setReviewResult(result.getString("reviewResult"));
temp.setRecordDetailId(preReviewRecordsDetail.getId());
if(!"通过".equals(materialJson.getString("reviewResult"))) {
validStatusFlag = false;
}
preReviewRecordsDetail.setReviewRecordsId(preReviewRecords.getId());
preReviewRecordsDetailMapper.insert(preReviewRecordsDetail);
preReviewRecordsDetailTemplateMapper.insert(temp);
}
if(validStatusFlag) {
PreReviewRecordsDetail preReviewRecordsDetailUp = new PreReviewRecordsDetail();
preReviewRecordsDetailUp.setId(preReviewRecordsDetail.getId());
preReviewRecordsDetailUp.setReviewResult("通过");
preReviewRecordsDetailMapper.updateById(preReviewRecordsDetailUp);
}else {
validEventStatusFlag = false;
}
}
//预审材料全部通过审核且提交预审材料数量与要求数量一致
if(validStatusFlag&&listReviewMaterial.size()==materialDetailArray.size()) {
if(validEventStatusFlag&&listReviewMaterial.size()==materialDetailArray.size()) {
PreReviewRecords preReviewRecordsUp = new PreReviewRecords();
if(preReviewRecords.getId()!=null) {

@ -1,10 +1,13 @@
package org.jeecg.modules.ai.service.impl;
import javax.annotation.Resource;
import org.jeecg.modules.ai.entity.YsDirectoryMaterial;
import org.jeecg.modules.ai.mapper.YsDirectoryMaterialMapper;
import org.jeecg.modules.ai.service.IYsDirectoryMaterialService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
@ -16,4 +19,23 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class YsDirectoryMaterialServiceImpl extends ServiceImpl<YsDirectoryMaterialMapper, YsDirectoryMaterial> implements IYsDirectoryMaterialService {
@Resource
private YsDirectoryMaterialMapper ysDirectoryMaterialMapper;
/**
*
* @param materialCode
* @param ocrResult
* @return
*/
@Override
public String getReviewResult(String materialCode,String ocrResult) {
LambdaQueryWrapper<YsDirectoryMaterial> queryWrapper = new LambdaQueryWrapper<YsDirectoryMaterial>();
queryWrapper.eq(YsDirectoryMaterial::getMaterialCode, materialCode);
YsDirectoryMaterial ysDirectoryMaterial = ysDirectoryMaterialMapper.selectOne(queryWrapper);
return "通过";
}
}

@ -0,0 +1,19 @@
package org.jeecg.modules.ai.service.impl;
import org.jeecg.modules.ai.entity.YsDirectoryMaterialTemplate;
import org.jeecg.modules.ai.mapper.YsDirectoryMaterialTemplateMapper;
import org.jeecg.modules.ai.service.IYsDirectoryMaterialTemplateService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description:
* @Author: jeecg-boot
* @Date: 2023-12-02
* @Version: V1.0
*/
@Service
public class YsDirectoryMaterialTemplateServiceImpl extends ServiceImpl<YsDirectoryMaterialTemplateMapper, YsDirectoryMaterialTemplate> implements IYsDirectoryMaterialTemplateService {
}

@ -1,7 +1,9 @@
package org.jeecg.modules.ai.vo;
import java.util.Date;
import java.util.List;
import org.jeecg.modules.ai.entity.PreReviewRecordsDetailTemplate;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -13,10 +15,12 @@ public class PreReviewRecordsDetailVo {
private String id;
private String materialName;
private String materialCode;
private String reviewResult;
private String materiaUrl;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
private Date createTime;
private List<PreReviewRecordsDetailTemplate> listPreReviewRecordsDetailTemplate;
}

@ -4,33 +4,45 @@ import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.CommonUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.ai.entity.PreReviewRecords;
import org.jeecg.modules.ai.entity.ReasonEvaluation;
import org.jeecg.modules.ai.entity.YsDirectoryMaterialTemplate;
import org.jeecg.modules.ai.qo.PreExaminationMattersQuery;
import org.jeecg.modules.ai.qo.PreReviewMaterialQuery;
import org.jeecg.modules.ai.qo.PreReviewRecordsApiQuery;
import org.jeecg.modules.ai.service.IPreExaminationMattersFieldService;
import org.jeecg.modules.ai.service.IPreExaminationMattersService;
import org.jeecg.modules.ai.service.IPreReviewMaterialService;
import org.jeecg.modules.ai.service.IPreReviewRecordsDetailService;
import org.jeecg.modules.ai.service.IPreReviewRecordsService;
import org.jeecg.modules.ai.service.IReasonEvaluationService;
import org.jeecg.modules.ai.service.IRoomService;
import org.jeecg.modules.ai.service.IYsDirectoryMaterialService;
import org.jeecg.modules.ai.service.IYsDirectoryMaterialTemplateService;
import org.jeecg.modules.ai.vo.PreExaminationMattersVo;
import org.jeecg.modules.ai.vo.PreReviewMaterialVo;
import org.jeecg.modules.ai.vo.PreReviewRecordsDetailVo;
import org.jeecg.modules.system.entity.SysAnnouncement;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.jeecg.modules.system.util.RecognizeGeneralTextSolution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -62,6 +74,12 @@ public class AiAPIController {
private IRoomService iRoomService;
@Autowired
private ISysAnnouncementService iSysAnnouncementService;
@Autowired
private IPreExaminationMattersFieldService iPreExaminationMattersFieldService;
@Autowired
private IYsDirectoryMaterialTemplateService iYsDirectoryMaterialTemplateService;
@Autowired
private IYsDirectoryMaterialService iYsDirectoryMaterialService;
/**
*
@ -126,14 +144,47 @@ public class AiAPIController {
return Result.OK("评价成功");
}
/**
*
* @param reviewInfo
* @return
*/
@GetMapping(value = "/getMaterialTemplate")
public Result<?> getMaterialTemplate(@RequestParam(name = "materialCode", required = true) String materialCode) {
LambdaQueryWrapper<YsDirectoryMaterialTemplate> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(YsDirectoryMaterialTemplate::getMaterialCode, materialCode);
List<YsDirectoryMaterialTemplate> listYsDirectoryMaterialTemplate = iYsDirectoryMaterialTemplateService.list(queryWrapper);
return Result.OK(listYsDirectoryMaterialTemplate);
}
/**
* OCR
* @param reviewInfo
* @return
*/
@GetMapping(value = "/getOCRResult")
public Result<?> getOCRResult(@RequestParam(name = "materialUrl", required = true) String materialUrl) {
return Result.OK("设置成功");
public Result<?> getOCRResult(HttpServletRequest request, HttpServletResponse response) {
JSONObject json = new JSONObject();
String templateId = request.getParameter("templateId");
String materialCode = request.getParameter("materialCode");
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
String savePath = preReviewRecordsDetailService.uploadLocal(file, "upload");
if(oConvertUtils.isNotEmpty(savePath)){
//调用接口识别
String ocrResult = RecognizeGeneralTextSolution.recognizeGeneralTextSolution(savePath, templateId);
//根据规则判断预审结果
String reviewResult = iYsDirectoryMaterialService.getReviewResult(materialCode, ocrResult);
json.put("imagePath", savePath);
json.put("ocrResult", ocrResult);
json.put("reviewResult", reviewResult);
return Result.OK(json.toString());
}else {
return Result.error("上传失败");
}
}
/**
@ -143,7 +194,7 @@ public class AiAPIController {
*/
@PostMapping(value = "/echoForm")
public Result<?> echoForm(@RequestParam(name = "reviewRecordId", required = true) String reviewRecordId) {
return Result.OK("设置成功");
return Result.OK(iPreExaminationMattersFieldService.echoForm(reviewRecordId));
}
/**

@ -0,0 +1,91 @@
package org.jeecg.modules.system.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.stream.FileImageInputStream;
import org.json.JSONObject;
import com.baidu.aip.ocr.AipOcr;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BaiduUtil {
public static final String APP_ID = "23890069";
public static final String API_KEY = "ZOLqyLPBF4I0pejNpZzvzf35";
public static final String SECRET_KEY = "VR8pmnk997sDVBkMXusTDsrUksCAbb4Z";
public static AipOcr client = null;
static{
client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
}
/**
*
* @param imgUrl
* @return
* {
"result":[
{
"major":{
"probability":0.9989657998,
"words":"德阳玺合印章有限公司送检样章"
},
"minor":[
],
"probability":0.9393941164,
"location":{
"top":30,
"left":58,
"width":578,
"height":577
},
"type":"circle"
}
],
"log_id":1730486846918069925,
"result_num":1
}
*/
public static JSONObject seal(String imgUrl) {
byte[] image = readImageFile(imgUrl);
// 调用印章识别
JSONObject fileResult = client.seal(image);
log.info("-----------百度识别印章fileResult----------"+fileResult);
return fileResult;
}
public static void main(String args[]) {
seal("D:\\Download\\860237437.jpg");
}
public static byte[] readImageFile(String path) {
byte[] data = null;
FileImageInputStream input = null;
try {
input = new FileImageInputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while ((numBytesRead = input.read(buf)) != -1) {
output.write(buf, 0, numBytesRead);
}
data = output.toByteArray();
output.close();
input.close();
} catch (FileNotFoundException ex1) {
ex1.printStackTrace();
} catch (IOException ex1) {
ex1.printStackTrace();
}
return data;
}
}

@ -0,0 +1,98 @@
package org.jeecg.modules.system.util;
import com.huaweicloud.sdk.core.auth.ICredential;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Base64;
import javax.imageio.stream.FileImageInputStream;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.ocr.v1.region.OcrRegion;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import com.huaweicloud.sdk.ocr.v1.*;
import com.huaweicloud.sdk.ocr.v1.model.*;
/**
*
*
* @author w
*
*/
public class RecognizeGeneralTextSolution {
public static final String CLOUD_SDK_AK = "X4MNF4GUFECVS2JKQS8L";
public static final String CLOUD_SDK_SK = "7hMUh5lgdpPMUQQSRc6tM6MNsMPx1Cgsnrv1zE67";
/**
*
*
* @param imgUrl
* @return
*/
public static String recognizeGeneralTextSolution(String imgUrl,String classifierId) {
ICredential auth = new BasicCredentials()
.withAk(CLOUD_SDK_AK)
.withSk(CLOUD_SDK_SK)
.withProjectId("7c9b49b201734164a4f1efef5e1e46e0");
OcrClient client = OcrClient.newBuilder()
.withCredential(auth)
.withRegion(OcrRegion.valueOf("cn-north-4"))
.build();
RecognizeCustomTemplateRequest request = new RecognizeCustomTemplateRequest();
CustomTemplateRequestBody body = new CustomTemplateRequestBody();
body.setClassifierId(classifierId);
body.setImage(readImageFile(imgUrl));
request.withBody(body);
try {
RecognizeCustomTemplateResponse response = client.recognizeCustomTemplate(request);
return response.toString();
} catch (ConnectionException e) {
e.printStackTrace();
} catch (RequestTimeoutException e) {
e.printStackTrace();
} catch (ServiceResponseException e) {
e.printStackTrace();
}
return null;
}
public static void main(String args[]) throws Exception {
recognizeGeneralTextSolution("D:\\Download\\178171512_1099943536_259_194.jpg","b9b1de0e-6601-11ee-88fb-0255ac100240");
}
public static String readImageFile(String path) {
String base64 = null;
try {
File imageFile = new File(path);
FileInputStream fileInputStream = new FileInputStream(imageFile);
byte[] imageBytes = new byte[(int) imageFile.length()];
fileInputStream.read(imageBytes);
fileInputStream.close();
base64 = Base64.getEncoder().encodeToString(imageBytes);
} catch (FileNotFoundException ex1) {
ex1.printStackTrace();
} catch (IOException ex1) {
ex1.printStackTrace();
}
return base64;
}
}
Loading…
Cancel
Save