1.增加无量云对接api 2.增加多线程、队列包处理无量云接口数据 3.增加业务动态字典,解析接口数据插入动态字典。 4.增加lombok工具依赖pull/1/head
parent
b2215e52ba
commit
c79581f00b
@ -0,0 +1,22 @@
|
||||
package cn.jyjz.xiaoyao.ocr.api;
|
||||
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
|
||||
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
|
||||
|
||||
/**
|
||||
* 无量云三方api接口
|
||||
*
|
||||
* @author shuli.Yao
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 9:55
|
||||
*/
|
||||
public interface PrevailCloudApi {
|
||||
|
||||
/**
|
||||
* 根据参数调用
|
||||
* @param pictureSourceParameter
|
||||
* @return
|
||||
*/
|
||||
ApiPage<PictureSourceResult> pullPictureSource(PictureSourceParameter pictureSourceParameter) throws Exception;
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package cn.jyjz.xiaoyao.ocr.api.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 图片数据源api 请求参数实体
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 10:19
|
||||
*/
|
||||
@Data
|
||||
public class PictureSourceParameter {
|
||||
|
||||
/**
|
||||
* 开始日期
|
||||
*/
|
||||
Date startTime;
|
||||
|
||||
/**
|
||||
* 结束日期
|
||||
*/
|
||||
Date endTime;
|
||||
|
||||
/**
|
||||
* 每页数量 每次最大200条
|
||||
*/
|
||||
Integer pageSize;
|
||||
|
||||
/**
|
||||
* 页码
|
||||
*/
|
||||
Integer pageNo;
|
||||
|
||||
/**
|
||||
* 项目编号
|
||||
*/
|
||||
Long projectNo;
|
||||
|
||||
/**
|
||||
* 计划id
|
||||
*/
|
||||
Long planId;
|
||||
|
||||
/**
|
||||
* 业务主体
|
||||
*/
|
||||
Long accountNo;
|
||||
|
||||
/**
|
||||
* 租户信息
|
||||
*/
|
||||
Long tenantNo;
|
||||
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package cn.jyjz.xiaoyao.ocr.api.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
|
||||
import cn.jyjz.xiaoyao.ocr.api.utils.*;
|
||||
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
|
||||
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient;
|
||||
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpMethod;
|
||||
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import liquibase.pro.packaged.S;
|
||||
import org.apache.commons.collections.SequencedHashMap;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 图片数据接口实现类
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 10:16
|
||||
*/
|
||||
@Service
|
||||
public class PrevailCloudApiImpl implements PrevailCloudApi {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(PrevailCloudApiImpl.class);
|
||||
|
||||
/**
|
||||
* 注入api 配置信息
|
||||
*/
|
||||
@Autowired
|
||||
private ApiConfig apiConfig;
|
||||
|
||||
/**
|
||||
* 拉取图片信息
|
||||
*/
|
||||
private String pictureSourceUrl = "/pangu/jingwei/ocr/query/pb/task/pageList";
|
||||
|
||||
/**
|
||||
* 拉取项目信息
|
||||
*/
|
||||
private String projectSourceUrl = "/pangu/jingwei/ocr/query/pb/project/pageList";
|
||||
|
||||
/**
|
||||
* 拉取租户信息
|
||||
*/
|
||||
private String tenantSourceUrl = "/pangu/jingwei/ocr/query/pb/tenant/info";
|
||||
|
||||
|
||||
@Override
|
||||
public ApiPage<PictureSourceResult> pullPictureSource(PictureSourceParameter pictureSourceParameter) throws Exception {
|
||||
//1.检查api配置是否正常
|
||||
if(!apiConfig.checkConfig()){
|
||||
return null;
|
||||
}
|
||||
|
||||
//2.对象转map
|
||||
Map<String, Object> queryParam = BeanUtil.beanToMap(pictureSourceParameter);
|
||||
Map<String,String> queryParamStr = new HashMap<>();
|
||||
//map值转string 注意对日期类型进行操作,加密包要求值全部为string
|
||||
for (String key : queryParam.keySet()) {
|
||||
if(queryParam.get(key)!=null){
|
||||
queryParamStr.put(key,queryParam.get(key).toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//加密请求参数
|
||||
String tenantNo = pictureSourceParameter.getTenantNo().toString();
|
||||
String json = JSONObject.toJSONString(queryParam);
|
||||
RequestData requestData = ApiHelper.buildRequest(tenantNo, apiConfig.getAccessKey(), apiConfig.getAccessCode(),json);
|
||||
|
||||
//组装请求参数
|
||||
String url = apiConfig.getInterfaceDomain()+pictureSourceUrl;
|
||||
String requestBodyJson = JSONObject.toJSONString(requestData);
|
||||
HttpParamers httpParamers = new HttpParamers(HttpMethod.POST);
|
||||
httpParamers.setJsonParamer(requestBodyJson);
|
||||
//发起请求
|
||||
String responseJsonStr = HttpClient.doPost(url,httpParamers,null,apiConfig.getConnectTimeout(),apiConfig.getReadTimeout());
|
||||
System.out.println(responseJsonStr);
|
||||
ResultData<String> resultData =JSONUtil.toBean(responseJsonStr,ResultData.class);
|
||||
|
||||
//解密请求数据
|
||||
if(resultData.getStatus()==100){
|
||||
//解析基础数据
|
||||
String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData);
|
||||
ApiPage<String> apiPage = JSONUtil.toBean(data,ApiPage.class);
|
||||
//解析数据结果为List
|
||||
List<PictureSourceResult> listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class);
|
||||
ApiPage<PictureSourceResult> resultApiPage = new ApiPage<>();
|
||||
resultApiPage.setPageNo(apiPage.getPageNo());
|
||||
resultApiPage.setPageSize(apiPage.getPageSize());
|
||||
resultApiPage.setTotal(apiPage.getTotal());
|
||||
resultApiPage.setRecords(listResult);
|
||||
return resultApiPage;
|
||||
}else{
|
||||
logger.debug("请求图片接口数据失败,参数:{},返回值:{}",json,responseJsonStr);
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package cn.jyjz.xiaoyao.ocr.api.utils;
|
||||
|
||||
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
|
||||
import lombok.Data;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* api 环境配置
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 11:54
|
||||
*/
|
||||
@Component
|
||||
@Data
|
||||
public class ApiConfig {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(ApiConfig.class);
|
||||
|
||||
/**
|
||||
* 无量云 接口域名
|
||||
*/
|
||||
@Value("${ocr.api.wly.interface-domain}")
|
||||
private String interfaceDomain;
|
||||
|
||||
/**
|
||||
* 无量云 秘钥
|
||||
*/
|
||||
@Value("${ocr.api.wly.accessKey}")
|
||||
private String accessKey;
|
||||
|
||||
/**
|
||||
* 无量云 编码
|
||||
*/
|
||||
@Value("${ocr.api.wly.accessCode}")
|
||||
private String accessCode;
|
||||
|
||||
|
||||
/**
|
||||
* 请求超时时间 默认请求5秒
|
||||
*/
|
||||
@Value("${ocr.api.wly.connectTimeout}")
|
||||
private Integer connectTimeout = 5000;
|
||||
|
||||
/**
|
||||
* 接收超时时间 默认请求1分钟
|
||||
*/
|
||||
@Value("${ocr.api.wly.readTimeout}")
|
||||
private Integer readTimeout = 60000;
|
||||
|
||||
/**
|
||||
* 检查配置文件是否 正确注入
|
||||
* @return
|
||||
*/
|
||||
public boolean checkConfig(){
|
||||
if(!StringUtils.isEmpty(interfaceDomain) && !StringUtils.isEmpty(accessKey) && !StringUtils.isEmpty(accessCode)){
|
||||
return true;
|
||||
}
|
||||
logger.error("获取api配置包含为空信息,域名:{},秘钥:{},秘钥编码:{}",this.interfaceDomain,this.accessKey,this.accessCode);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package cn.jyjz.xiaoyao.ocr.api.utils;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* api分页对象
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 11:31
|
||||
*/
|
||||
@Data
|
||||
public class ApiPage<T> {
|
||||
|
||||
/**
|
||||
* 当前页码
|
||||
*/
|
||||
Integer pageNo;
|
||||
|
||||
/**
|
||||
* 每页条数
|
||||
*/
|
||||
Integer pageSize;
|
||||
|
||||
/**
|
||||
* 总数
|
||||
*/
|
||||
Integer total;
|
||||
|
||||
/**
|
||||
* 内容
|
||||
*/
|
||||
List<T> records;
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package cn.jyjz.xiaoyao.ocr.util;
|
||||
package cn.jyjz.xiaoyao.ocr.api.utils;
|
||||
|
||||
/**
|
||||
* @ClassName ReturnCode
|
@ -0,0 +1,77 @@
|
||||
package cn.jyjz.xiaoyao.ocr.controller;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
|
||||
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
|
||||
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
|
||||
import org.apache.commons.lang.time.DateFormatUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.time.Instant;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 19:47
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/test/api")
|
||||
public class ApiTestController {
|
||||
@Autowired
|
||||
private PrevailCloudApi prevailCloudApi;
|
||||
|
||||
@GetMapping("psTest")
|
||||
public String psTset(HttpServletRequest request){
|
||||
String beginStr = request.getParameter("beginStr");
|
||||
String endStr = request.getParameter("endStr");
|
||||
String pageSize = request.getParameter("pageSize");
|
||||
String pageNo = request.getParameter("pageNo");
|
||||
|
||||
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
|
||||
// DateTime dateTime = DateUtil.parse(beginStr+" 00:00:00","yyyy-MM-dd HH:mm:ss");
|
||||
DateTime dateTime = DateUtil.parse("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss");
|
||||
Instant binstant = dateTime.toInstant();
|
||||
// DateTime dateTime1 = DateUtil.parse(" 00:00:00","yyyy-MM-dd HH:mm:ss");
|
||||
DateTime dateTime1 = DateUtil.parse("2024-03-31 09:00:00","yyyy-MM-dd HH:mm:ss");
|
||||
Instant einstant = dateTime1.toInstant();
|
||||
pictureSourceParameter.setStartTime(Date.from(binstant));
|
||||
pictureSourceParameter.setEndTime(Date.from(einstant));
|
||||
pictureSourceParameter.setPageNo(Integer.parseInt(pageNo));
|
||||
pictureSourceParameter.setPageSize(Integer.parseInt(pageSize));
|
||||
pictureSourceParameter.setTenantNo(1714548920583360512L);
|
||||
pictureSourceParameter.setAccountNo(1714559587755397120L);
|
||||
try {
|
||||
ApiPage<PictureSourceResult> apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
|
||||
List<PictureSourceResult> listResult= apiPage.getRecords();
|
||||
int count = apiPage.getTotal();
|
||||
int localCount = listResult.size();
|
||||
int size = 0;
|
||||
for (PictureSourceResult pictureSourceResult : listResult) {
|
||||
if(pictureSourceResult.getLivePhoto()==null){
|
||||
continue;
|
||||
}
|
||||
size++;
|
||||
//将可以处理数据放入处理队列中
|
||||
TaskQueue.pictureDownloadPushData(pictureSourceResult);
|
||||
}
|
||||
return "当前区间内图片总数:"+count+"条,本次获取:"+localCount+"条,可处理数据:"+size+"条";
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return "处理失败";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package cn.jyjz.xiaoyao.ocr.dataDao;
|
||||
|
||||
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrMsg;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Mapper
|
||||
public interface OcrDictionaryDao extends BaseMapper<OcrDictionary> {
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package cn.jyjz.xiaoyao.ocr.dataDao;
|
||||
|
||||
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Mapper
|
||||
public interface OcrDictionaryGroupDao extends BaseMapper<OcrDictionaryGroup> {
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package cn.jyjz.xiaoyao.ocr.dataobject;
|
||||
|
||||
import cn.jyjz.xiaoyao.common.base.jsonDomain.DateSerializer;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/16 12:40
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "业务数据字典值表", title = "业务数据字典值表")
|
||||
@ApiModel(value="业务数据字典值表", description="业务数据字典值表")
|
||||
@TableName(value = "ocr_dictionary")
|
||||
public class OcrDictionary {
|
||||
|
||||
@ApiModelProperty(value ="主键")
|
||||
@TableId(value = "id",type = IdType.ASSIGN_ID)
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@TableField(value="id")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value ="三方系统 原始id 可为空")
|
||||
@TableField(value="source_id")
|
||||
private Long sourceId;
|
||||
|
||||
@ApiModelProperty(value ="字典值")
|
||||
@TableField(value="value")
|
||||
private String value;
|
||||
|
||||
@ApiModelProperty(value ="描述")
|
||||
@TableField(value="lable")
|
||||
private String lable;
|
||||
|
||||
@ApiModelProperty(value ="租户id")
|
||||
@TableField(value="tenant_id")
|
||||
private Long tenantId;
|
||||
|
||||
@ApiModelProperty(value ="字典组")
|
||||
@TableField(value="group_id")
|
||||
private Long groupId;
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package cn.jyjz.xiaoyao.ocr.dataobject;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import liquibase.pro.packaged.S;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/16 12:40
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(name = "业务数据字典组表", title = "业务数据字典组表")
|
||||
@ApiModel(value="业务数据字典组表", description="业务数据字典组表")
|
||||
@TableName(value = "ocr_dictionary_group")
|
||||
public class OcrDictionaryGroup {
|
||||
@ApiModelProperty(value ="主键")
|
||||
@TableId(value = "id",type = IdType.ASSIGN_ID)
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@TableField(value="id")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value ="字典组中文描述")
|
||||
@TableField(value="label")
|
||||
private String label;
|
||||
|
||||
@ApiModelProperty(value ="对应属性字段名称")
|
||||
@TableField(value="field")
|
||||
private String field;
|
||||
|
||||
@ApiModelProperty(value ="备注")
|
||||
@TableField(value="remark")
|
||||
private String remark;
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cn.jyjz.xiaoyao.ocr.service;
|
||||
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
|
||||
import liquibase.pro.packaged.L;
|
||||
|
||||
/**
|
||||
* 业务向 数据字典 操作接口
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/16 12:48
|
||||
*/
|
||||
public interface OcrDictionaryService extends BaseService<OcrDictionary> {
|
||||
/**
|
||||
* 根据 字组标识、字典值、租户过滤当前字典是否存在此字典值。
|
||||
* @param groupId 字典组标识
|
||||
* @param value 字典值
|
||||
* @param tenantId 租户
|
||||
* @return
|
||||
*/
|
||||
boolean isValueExists(Long groupId, String value, Long tenantId);
|
||||
|
||||
/**
|
||||
* 获取字典组信息
|
||||
* @param field
|
||||
* @return
|
||||
*/
|
||||
OcrDictionaryGroup queryGroupByField(String field);
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package cn.jyjz.xiaoyao.ocr.service.impl;
|
||||
|
||||
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
|
||||
import cn.jyjz.xiaoyao.ocr.dataDao.OcrDictionaryDao;
|
||||
import cn.jyjz.xiaoyao.ocr.dataDao.OcrDictionaryGroupDao;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
|
||||
import cn.jyjz.xiaoyao.ocr.service.OcrDictionaryService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 业务向 数据字典 操作接口实现类
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/16 12:48
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class OcrDictionaryServiceImpl extends BaseServiceImpl<OcrDictionaryDao, OcrDictionary> implements OcrDictionaryService {
|
||||
|
||||
@Autowired
|
||||
private OcrDictionaryGroupDao ocrDictionaryGroupDao;
|
||||
|
||||
@Override
|
||||
public boolean isValueExists(Long groupId, String value, Long tenantId) {
|
||||
QueryWrapper queryWrapper =new QueryWrapper();
|
||||
queryWrapper.eq("group_id",groupId);
|
||||
queryWrapper.eq("value",value);
|
||||
queryWrapper.eq("tenant_id",groupId);
|
||||
Long count = baseMapper.selectCount(queryWrapper);
|
||||
return count>0 ? false:true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OcrDictionaryGroup queryGroupByField(String field) {
|
||||
QueryWrapper queryWrapper = new QueryWrapper();
|
||||
queryWrapper.eq("field",field);
|
||||
List<OcrDictionaryGroup> ocrDictionaryGroupList = ocrDictionaryGroupDao.selectList(queryWrapper);
|
||||
if(ocrDictionaryGroupList!=null && ocrDictionaryGroupList.size()>0){
|
||||
return ocrDictionaryGroupList.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cn.jyjz.xiaoyao.ocr.thread;
|
||||
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 初始化执行器
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/03/14 3:08
|
||||
*/
|
||||
@Component
|
||||
public class TaskRunner implements CommandLineRunner {
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
TaskThreadPool taskThreadPool = new TaskThreadPool();
|
||||
taskThreadPool.startControllerPull();
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package cn.jyjz.xiaoyao.ocr.thread;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
|
||||
import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureDownloadTask;
|
||||
import lombok.SneakyThrows;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.concurrent.*;
|
||||
|
||||
/**
|
||||
* 任务线程池
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/03/14 3:08
|
||||
*/
|
||||
public class TaskThreadPool {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(TaskQueue.class);
|
||||
ExecutorService threadPool = null;
|
||||
|
||||
public TaskThreadPool(){
|
||||
if(threadPool ==null){
|
||||
threadPool = new ThreadPoolExecutor(
|
||||
10,
|
||||
20,
|
||||
3,
|
||||
TimeUnit.SECONDS,
|
||||
new LinkedBlockingDeque<>(),
|
||||
Executors.defaultThreadFactory(),
|
||||
new ThreadPoolExecutor.DiscardOldestPolicy());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动任务 入库消费者
|
||||
* @return
|
||||
*/
|
||||
public boolean startControllerPull(){
|
||||
Runnable runnable = new Runnable() {
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void run() {
|
||||
logger.info("图片下载任务线程检查中...");
|
||||
while (true){
|
||||
PictureSourceResult pictureSourceResult = TaskQueue.pictureDownloadPullData();
|
||||
if(pictureSourceResult!=null){
|
||||
threadPool.execute(new PictureDownloadTask(pictureSourceResult));
|
||||
}else{
|
||||
Thread.sleep(5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Thread thread=new Thread(runnable);
|
||||
thread.start();
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,191 @@
|
||||
package cn.jyjz.xiaoyao.ocr.thread.tasks;
|
||||
|
||||
import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
|
||||
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
|
||||
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
|
||||
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
|
||||
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 图片下载任务
|
||||
*
|
||||
* @author hugh(shuli.yao) 1397940314@qq.com
|
||||
* @version 1.0
|
||||
* @date 2024/3/14 11:15
|
||||
*/
|
||||
public class PictureDownloadTask implements Runnable{
|
||||
protected Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
private PictureSourceResult pictureSourceResult;
|
||||
|
||||
public PictureDownloadTask(PictureSourceResult pictureSourceResult){
|
||||
this.pictureSourceResult = pictureSourceResult;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
//1.对图片对象进行入库操作
|
||||
OcrPictureService ocrPictureService = SpringUtils.getBean("ocrPictureService");
|
||||
|
||||
//获取当前任务中有多少图片
|
||||
List<Map<String,Object>> livePhoto = pictureSourceResult.getLivePhoto();
|
||||
|
||||
//定义新增集合对象
|
||||
List<OcrPicture> ocrPictureList = new ArrayList<>();
|
||||
for (Map<String, Object> map : livePhoto) {
|
||||
//检查图片地址是否为空
|
||||
if(map.get("imgUrl")!=null && !StringUtils.isEmpty(map.get("imgUrl").toString())){
|
||||
//不为空开始组装参数 入库
|
||||
OcrPicture picture = new OcrPicture();
|
||||
//租户编号
|
||||
picture.setTenantId(pictureSourceResult.getTenantNo());
|
||||
//租户名称
|
||||
picture.setTenantname(pictureSourceResult.getTenantName());
|
||||
//租户状态
|
||||
if(pictureSourceResult.getTenantStatus()!=null){
|
||||
picture.setTenantstatus(pictureSourceResult.getTenantStatus().toString());
|
||||
}
|
||||
//业务主体
|
||||
if(pictureSourceResult.getAccountNo()!=null){
|
||||
picture.setPictureid(pictureSourceResult.getAccountNo().toString());
|
||||
}
|
||||
//业务主体名称
|
||||
picture.setPicturename(pictureSourceResult.getAccountName());
|
||||
//业务主体状态
|
||||
picture.setPicturestatus(pictureSourceResult.getPlanChildStatus());
|
||||
//项目编号
|
||||
if(pictureSourceResult.getProjectNo()!=null){
|
||||
picture.setProjectid(pictureSourceResult.getProjectNo().toString());
|
||||
}
|
||||
//项目名称
|
||||
picture.setPicturename(pictureSourceResult.getProjectName());
|
||||
//项目状态
|
||||
if(pictureSourceResult.getProjectNo()!=null) {
|
||||
picture.setProjectstatus(pictureSourceResult.getProjectNo().toString());
|
||||
}
|
||||
//所属主计划id
|
||||
if(pictureSourceResult.getPlanNo()!=null) {
|
||||
picture.setPlanid(pictureSourceResult.getPlanNo().toString());
|
||||
}
|
||||
//所属计划名称
|
||||
picture.setPlanname(pictureSourceResult.getPlanName());
|
||||
//所属计划状态
|
||||
picture.setPlanstatus( pictureSourceResult.getPlanstatus());
|
||||
//所属子计划id
|
||||
if(pictureSourceResult.getPlanChildNo()!=null) {
|
||||
picture.setPlanchildid(pictureSourceResult.getPlanChildNo().toString());
|
||||
}
|
||||
//所属子计划名称
|
||||
picture.setPlanchildname(pictureSourceResult.getPlanChildName());
|
||||
//所属子计划状态
|
||||
picture.setPlanchildstatus(pictureSourceResult.getPlanChildStatus());
|
||||
//所属任务id
|
||||
picture.setRemark(pictureSourceResult.getTaskId().toString());
|
||||
//所属任务名称
|
||||
picture.setTaskname(pictureSourceResult.getTaskName());
|
||||
//任务来源名称
|
||||
picture.setField4(pictureSourceResult.getTaskName());
|
||||
//所属任务状态
|
||||
if(pictureSourceResult.getTenantStatus()!=null) {
|
||||
picture.setTaskstatus(pictureSourceResult.getTenantStatus().toString());
|
||||
}
|
||||
//提报人id
|
||||
picture.setUpuserid(pictureSourceResult.getUserNo().toString());
|
||||
//提报人名称
|
||||
picture.setUpname(pictureSourceResult.getUserName());
|
||||
//提报人名称
|
||||
picture.setField1(pictureSourceResult.getUserName());
|
||||
// picture.setUphead();//缺失提报人头像
|
||||
|
||||
//拜访详细地址
|
||||
StringBuilder addressDetails = new StringBuilder();
|
||||
//拜访省份
|
||||
if(pictureSourceResult.getProvince()!=null){
|
||||
if(pictureSourceResult.getProvince().get("name")!=null){
|
||||
addressDetails.append(pictureSourceResult.getProvince().get("name").toString());
|
||||
picture.setReleaseprovince(pictureSourceResult.getProvince().get("name").toString());
|
||||
}
|
||||
}
|
||||
//拜访城市
|
||||
if(pictureSourceResult.getCity()!=null){
|
||||
if(pictureSourceResult.getCity().get("name")!=null){
|
||||
addressDetails.append(pictureSourceResult.getCity().get("name").toString());
|
||||
picture.setReleasearea(pictureSourceResult.getCity().get("name").toString());
|
||||
}
|
||||
}
|
||||
//拜访定位信息
|
||||
if(pictureSourceResult.getLocation()!=null){
|
||||
if(pictureSourceResult.getCity().get("address")!=null){
|
||||
addressDetails.append(pictureSourceResult.getCity().get("address").toString());
|
||||
}
|
||||
}
|
||||
picture.setField10(addressDetails.toString());
|
||||
|
||||
//拜访客户类型
|
||||
if(pictureSourceResult.getTerminalType()!=null){
|
||||
if(pictureSourceResult.getTerminalType().get("name")!=null){
|
||||
picture.setField2(pictureSourceResult.getTerminalType().get("name").toString());
|
||||
}
|
||||
}
|
||||
|
||||
//拜访客户名称
|
||||
if(pictureSourceResult.getCustomerName()!=null){
|
||||
if(pictureSourceResult.getCustomerName().get("name")!=null){
|
||||
picture.setField3(pictureSourceResult.getCustomerName().get("name").toString());
|
||||
}
|
||||
}
|
||||
//拜访客户级别
|
||||
if(pictureSourceResult.getTerminalLevel()!=null){
|
||||
if(pictureSourceResult.getTerminalLevel().get("name")!=null){
|
||||
picture.setField6(pictureSourceResult.getTerminalLevel().get("name").toString());
|
||||
}
|
||||
}
|
||||
|
||||
//拜访项目类别
|
||||
if(pictureSourceResult.getProjectType()!=null){
|
||||
if(pictureSourceResult.getTerminalLevel().get("name")!=null){
|
||||
picture.setField17(pictureSourceResult.getTerminalLevel().get("name").toString());
|
||||
}
|
||||
}
|
||||
//拜访品种
|
||||
if(pictureSourceResult.getProductName()!=null){
|
||||
if(pictureSourceResult.getProductName().get("name")!=null){
|
||||
picture.setField9(pictureSourceResult.getProductName().get("name").toString());
|
||||
}
|
||||
}
|
||||
//生产基地
|
||||
picture.setField5(pictureSourceResult.getManufacturer());
|
||||
//拜访小结
|
||||
picture.setField8(pictureSourceResult.getDiscoveredIssues());
|
||||
//拜访日期
|
||||
picture.setField11(pictureSourceResult.getVisitDate());
|
||||
//定位距离
|
||||
picture.setField12(pictureSourceResult.getDistance());
|
||||
|
||||
//设置图片信息
|
||||
if(map.get("imgName")!=null){
|
||||
picture.setImgname(map.get("imgName").toString());
|
||||
}
|
||||
if(map.get("imgUrl")!=null){
|
||||
picture.setImgurl(map.get("imgUrl").toString());
|
||||
}
|
||||
//默认为创建人为admin
|
||||
picture.setCreateBy("1");
|
||||
ocrPictureList.add(picture);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//调用图片入库方法
|
||||
int size = ocrPictureService.savePictures(ocrPictureList);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: dev
|
||||
active: dev
|
||||
|
Loading…
Reference in new issue