# Conflicts:
#	jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java
dev
admin 1 year ago
commit fa6c8b937a

@ -31,18 +31,18 @@
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="jyjz-common" options="-parameters" />
<module name="jyjz-common" options="" />
<module name="jyjz-common-base" options="-parameters" />
<module name="jyjz-common-mybatisplus" options="-parameters" />
<module name="jyjz-common-redis" options="-parameters" />
<module name="jyjz-common-task" options="-parameters" />
<module name="jyjz-common-upload" options="-parameters" />
<module name="jyjz-common-web" options="-parameters" />
<module name="jyjz-framework" options="-parameters" />
<module name="jyjz-framework" options="" />
<module name="jyjz-framework-security" options="-parameters" />
<module name="jyjz-framework-securityweb" options="-parameters" />
<module name="jyjz-parent" options="-parameters" />
<module name="jyjz-system" options="-parameters" />
<module name="jyjz-parent" options="" />
<module name="jyjz-system" options="" />
<module name="jyjz-system-abase" options="-parameters" />
<module name="jyjz-system-admin" options="-parameters" />
<module name="jyjz-system-authority" options="-parameters" />

@ -2,31 +2,17 @@
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-base/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-base/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-mybatisplus/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-mybatisplus/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-redis/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-task/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-upload/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/jyjz-common-web/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-common/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-framework/jyjz-framework-security/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-framework/jyjz-framework-security/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-framework/jyjz-framework-securityweb/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-framework/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-framework/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-start/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-start/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/jyjz-system-abase/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/jyjz-system-admin/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/jyjz-system-authority/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/jyjz-system-cms/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/jyjz-system-oa/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/jyjz-system/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/runstart/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

@ -11,6 +11,11 @@
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="rdc-releases" />
<option name="name" value="rdc-releases" />

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -13,6 +13,9 @@
<artifactId>jyjz-system-oa</artifactId>
<version>1.0.0</version>
<name>jyjz-system-oa</name>
<properties>
<lombok.version>1.18.24</lombok.version>
</properties>
<dependencies>
<dependency>
@ -61,6 +64,13 @@
<artifactId>flowable-ui-modeler-logic</artifactId>
</dependency>
<!-- 分页插件pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<!-- 分页插件pagehelper -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-rest</artifactId>
@ -105,6 +115,15 @@
<groupId>cn.jyjz</groupId>
<artifactId>jyjz-system-admin</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>
</project>

@ -20,11 +20,14 @@ import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.common.mybatisplus.util.SearchQueryFormat;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.dataobject.Userapprove;
import cn.jyjz.xiaoyao.oa.from.service.UserapproveService;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import com.alanpoi.common.util.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.*;
@ -44,6 +47,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Api(tags="ocr_流程接口")
@RestController
@ -65,6 +69,9 @@ public class FlowTaskController extends BaseController {
@Resource
private OcrTaskchildPictureService ocrTaskchildPictureService;
@Resource
private UserapproveService userapproveService;
// /**
// * 查询我的待办任务
// * @return
@ -248,12 +255,38 @@ public class FlowTaskController extends BaseController {
//租户主键,由前端页面传送
String tenantId = request.getHeader("X-Tenant-Id");
String taskid = request.getParameter("taskid");
String taskname = request.getParameter("taskname");
String states = request.getParameter("states");
String fromprojectid = request.getParameter("fromprojectid");
String fromuserid = request.getParameter("fromuserid");
String fromplanid = request.getParameter("fromplanid");
if(org.apache.commons.lang3.StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
if(StringUtils.isNotBlank(taskid)){
searchQuery.addEqual("taskid",taskid);
}
if(StringUtils.isNotBlank(taskname)){
searchQuery.addLike("taskname",taskname);
}
if(StringUtils.isNotBlank(states)){
searchQuery.addEqual("states",states);
}
if(StringUtils.isNotBlank(fromprojectid)){
searchQuery.addEqual("fromprojectid",fromprojectid);
}
if(StringUtils.isNotBlank(fromuserid)){
searchQuery.addEqual("fromuserid",fromuserid);
}
if(StringUtils.isNotBlank(fromplanid)){
searchQuery.addEqual("fromplanid",fromplanid);
}
User user = this.userService.getSessionUser(request);
// List<Userapprove> userApprove = userapproveService.list(new LambdaQueryWrapper<Userapprove>().eq(Userapprove::getUserid, user.getId()));
// List<String> collect = userApprove.stream().map(Userapprove::getFormid).map(Object::toString).collect(Collectors.toList());
// searchQuery.addIn("formid",collect);
if(user.isUserIsSys(xiaoyaoConfig.getWebconfig().getSysLoginUser().split(","))){
flowTaskService.getMyProcessInstances(searchQuery.getQuery(),pageUtils);
@ -268,7 +301,6 @@ public class FlowTaskController extends BaseController {
}
searchQuery.addEqual("tenantid",tenantId);
flowTaskService.getMyProcessInstances(searchQuery.getQuery(),pageUtils);
//待办信息,增加是否查看标记
if(StringUtils.isNotBlank(assigneeId) && assigneeId.equals(user.getId().toString())){
@ -495,4 +527,37 @@ public class FlowTaskController extends BaseController {
//return ResultVoUtil.success();
}
/**
*
* @return
*/
@ApiOperation(value="重置流程流程", notes="重置流程流程")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true),
@ApiImplicitParam(paramType = "path",name = "buessinessno", value = "业务编码", required = true)
})
@GetMapping("/historyTask")
@ResponseBody
public ResultVo historyTask(HttpServletRequest request){
String fromid = request.getParameter("fromid");
String taskid = request.getParameter("buessinessno");
return flowTaskService.removeTask(fromid,taskid);
//return ResultVoUtil.success();
}
/**
*
* @return
*/
@ApiOperation(value="重复流程", notes="重复流程")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true),
})
@GetMapping("/repetitionTask")
@ResponseBody
public ResultVo repetitionTask(HttpServletRequest request){
return flowTaskService.repetitionTask();
}
}

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.sql.Blob;
import java.sql.Date;
import java.time.LocalDateTime;
@TableName("act_de_model")
public class DeModel implements Serializable {

@ -44,12 +44,14 @@ public interface IFlowTaskService {
/**
*
*
* @param
* @param processDefinition
*/
public void updateAssignee(String processInstanceId, String processDefinitionId, ProcessDefinition processDefinition);
void finishedList(PageUtils pageUtils, HttpServletRequest request);
/**
*
*
@ -80,36 +82,45 @@ public interface IFlowTaskService {
/**
*
*
*
* @param query
* @return
*/
public List<FlowUnionVo> getMyProcessInstances(Map<String, Object> query);
/**
*
*
* @return
*/
public IPage<FlowUnionVo> getMyListCc(Map<String, Object> query, UserToken userToken, ParamterPage paramterPage);
/**
*
*
* @return
*/
public List<HistoricTaskInstanceDto> listHistoriceTask(String processInstanceId);
/**
*
*
* @param processInstanceId
* @return
*/
public List<String> listTask(String processInstanceId);
/**
*
*
*
* @param processInstanceId
*/
public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId);
/**
*
*
* @param processInstanceId
* @return
*/
@ -119,8 +130,10 @@ public interface IFlowTaskService {
*
*/
public List<Task> nowRunTask(String processInstanceId, String processDefinitionId);
/**
*
*
* @param taskId
* @param reason
*/
@ -128,7 +141,15 @@ public interface IFlowTaskService {
/**
*
*
* @param fromid
*/
public ResultVo removeTask(String fromid, String taskid);
/**
*
*
* @return
*/
ResultVo repetitionTask();
}

@ -15,19 +15,14 @@ import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.framework.security.model.AdminUserModel;
import cn.jyjz.xiaoyao.framework.security.service.FlowableUserLoginService;
import cn.jyjz.xiaoyao.oa.from.service.UserViewapproeService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.*;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.context.request.RequestContextHolder;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@ -48,6 +43,7 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
private IFlowTaskService flowTaskService;
@Resource
private UserViewapproeService userViewApproeService;
@Override
public boolean startProcessInstanceById(String procDefId, Map<String, Object> variables, HttpServletRequest request, String formid, String servicename) {
@ -60,11 +56,14 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
//表单主键
formid = iFormCustomService.saveForm(request);
}
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
String userName = userToken.getLoginname();
String token = RequestBaseUtil.getToken(request);
String userName = "";
if (StringUtils.isBlank(token)) {
userName = "admin";
} else {
UserToken userToken = this.userTokenService.getUserToken(token);
userName = userToken.getLoginname();
}
// 绑定当前认证的账号 我们的认证系统如果使用的是 SpringSecurity的话默认就会设置当前登录的账号
//identityService.setAuthenticatedUserId(userName);
if (null == variables) {
@ -77,7 +76,7 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
//业务key 用于待办已办 扩展字段 展示使用
//我这里以 流程定义key(oa_category_t定义的关键字逻辑唯一) + 业务表主键(请假表、调岗表等) + 业务表对应的servicename
String businessKey= userToken.getLoginname() + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT+ formid + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT+ servicename;
String businessKey = userName + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT + formid + SystemConstantsOa.OA_BUSSINESS_KEY_SPLIT + servicename;
ProcessInstance processInstance = null;
@ -122,6 +121,8 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
if (StringUtils.isNotBlank(servicename) && StringUtils.isNotBlank(formid)) {
iFormCustomService.delForm(formid);
}
}finally {
RequestContextHolder.resetRequestAttributes();
}
return false;
}

@ -1123,6 +1123,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
HistoricTaskInstanceDto dto = new HistoricTaskInstanceDto();
dto.setTaskId(taskHiInstance.getId());
dto.setTaskName(taskHiInstance.getName());
flowUnionVo.setNodeName(taskHiInstance.getName());
dto.setFinishTime(taskHiInstance.getEndTime());
if(taskHiInstance.getDurationInMillis() != null){
dto.setDuration(taskHiInstance.getDurationInMillis()/1000 + "秒");
@ -1587,4 +1588,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
return ResultVoUtil.success();
}
@Override
public ResultVo repetitionTask() {
return ResultVoUtil.success(flowableccMybatisDao.repetitionTask());
}
}

@ -35,4 +35,6 @@ public interface FlowableccMybatisDao extends BaseMapper<Flowablecc> {
* @return
*/
List<UserDistionaryVo> selectUserByFromid(String fromid);
List<Map<String,Object>> repetitionTask();
}

@ -61,6 +61,12 @@ public class FlowUnionVo {
@ApiModelProperty(value ="租户主键")
private Long tenantid;
@ApiModelProperty(value ="当前节点id")
private String nodeName;
@ApiModelProperty(value ="任务名称")
private String taskName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = DateSerializer.class)
@ApiModelProperty(value ="创建时间")
@ -79,6 +85,8 @@ public class FlowUnionVo {
@ApiModelProperty(value = "项目对象")
private Category categoryDto;
@ApiModelProperty(value = "任务id")
private String taskId;
//是否查看true未查看false已查看

@ -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,199 @@
package cn.jyjz.xiaoyao.ocr.api.entity;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* api
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/14 10:19
*/
@Data
public class PictureSourceResult {
/**
* no
*/
Long tenantNo;
/**
*
*/
String tenantName;
/**
*
*/
Integer tenantStatus;
/**
* no
*/
Long accountNo;
/**
*
*/
String accountName;
/**
*
*/
Integer accountStatus;
/**
* ID
*/
Long projectNo;
/**
*
*/
String projectName;
/**
*
*/
Integer projectStatus;
/**
* ID
*/
Long planNo;
/**
*
*/
String planName;
/**
*
*/
String planstatus;
/**
* ID
*/
Long planChildNo;
/**
*
*/
String planChildName;
/**
*
*/
String planChildStatus;
/**
* ID
*/
Long taskId;
/**
*
*/
String taskName;
/**
*
*/
Integer taskStatus;
/**
* no
*/
Long userNo;
/**
*
*/
String userName;
/**
* 访/
*/
Map<String,Object> province;
/**
* 访
*/
Map<String,Object> city;
/**
* 访
*/
Map<String,Object> terminalType;
/**
* 访
*/
Map<String,Object> terminalLevel;
/**
* 访
*/
Map<String,Object> customerName;
/**
* 访
*/
Map<String,Object> projectType;
/**
*
*/
List<Map<String,Object>> productCard;
/**
* 访
*/
Map<String,Object> productName;
/**
*
*/
String manufacturer;
/**
* 访
*/
String discoveredIssues;
/**
* /
*/
String feedback;
/**
*
*/
Map<String,Object> location;
/**
*
*/
String distance;
/**
* 访
*/
String visitDate;
/**
*
*/
List<Map<String,Object>> livePhoto;
/**
*
*/
Map<String,Object> extendedField;
}

@ -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;
}
}

@ -1,7 +1,6 @@
package cn.jyjz.xiaoyao.ocr.util;
package cn.jyjz.xiaoyao.ocr.api.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.lang.Nullable;

@ -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;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -62,19 +62,19 @@ public class RequestData implements Serializable {
private String accessKey;
/**
*
* @see cn.jyjz.xiaoyao.ocr.util.ApiHelper#encrypt(String, String, String)
* @see ApiHelper#encrypt(String, String, String)
*/
@ApiModelProperty(value = "加密的请求数据")
private String data;
/**
* Salt
* @see cn.jyjz.xiaoyao.ocr.util.ApiHelper # combineSalt(String, String)
* @see ApiHelper#combineSalt(String, String)
*/
@ApiModelProperty(value = "请求时间戳")
private long timestamp ;
/**
*
* @see cn.jyjz.xiaoyao.ocr.util.ApiHelper # getSignature(String, String, Map)
* @see ApiHelper#getSignature(String, String, Map)
*/
@ApiModelProperty(value = "数据签名")
private String signature;

@ -1,4 +1,4 @@
package cn.jyjz.xiaoyao.ocr.util;
package cn.jyjz.xiaoyao.ocr.api.utils;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
@ -33,7 +33,7 @@ public class ResultData<T> implements Serializable {
/**
* Base64{@link String}
* @see cn.jyjz.xiaoyao.ocr.util.ApiHelper#encrypt(String, String, String)
* @see ApiHelper#encrypt(String, String, String)
*/
@ApiModelProperty(value = "后端返回结果")
private T data;
@ -45,13 +45,13 @@ public class ResultData<T> implements Serializable {
private boolean success;
/**
* Salt
* @see cn.jyjz.xiaoyao.ocr.util.ApiHelper#combineSalt(String, String)
* @see ApiHelper#combineSalt(String, String)
*/
@ApiModelProperty(value = "响应时间戳")
private long timestamp ;
/**
*
* @see cn.jyjz.xiaoyao.ocr.util.ApiHelper#getSignature(String, String, Map)
* @see ApiHelper#getSignature(String, String, Map)
*/
@ApiModelProperty(value = "数据签名")
private String signature;

@ -0,0 +1,74 @@
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.springframework.beans.factory.annotation.Autowired;
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.pictureDisposePushData(pictureSourceResult);
}
return "当前区间内图片总数:"+count+"条,本次获取:"+localCount+"条,可处理数据:"+size+"条";
} catch (Exception e) {
e.printStackTrace();
}
return "处理失败";
}
}

@ -0,0 +1,64 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUpuser;
import cn.jyjz.xiaoyao.ocr.service.OcrDictionaryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* ocr_
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/16 15:16
*/
@Api(tags="ocr_业务数据数据字典")
@RestController
@RequestMapping("/ocr/dictionary")
public class OcrDictionaryController {
@Autowired
private OcrDictionaryService ocrDictionaryService;
/**
*
*mail.zhangyong@gmail.com
*2024-01-14 10:27:02
**/
@GetMapping("/getDictionaryByField")
@ResponseBody
public ResultVo<IPage<OcrDictionary>> getDictionaryByField(HttpServletResponse response,
HttpServletRequest request,
@RequestParam(name="pageNo", defaultValue="1",required = true) Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10",required = true) Integer pageSize,
@RequestParam(name="field", defaultValue="upName",required = true) String field) {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
OcrDictionaryGroup ocrDictionaryGroup= ocrDictionaryService.queryGroupByField(field);
if(ocrDictionaryGroup!=null){
Page<OcrDictionary> page = new Page<OcrDictionary>(pageNo, pageSize);
QueryWrapper queryWrapper =new QueryWrapper();
queryWrapper.eq("group_id",ocrDictionaryGroup.getId());
queryWrapper.eq("tenant_id",tenantId);
IPage<OcrDictionary> pageList = ocrDictionaryService.page(page, queryWrapper);
return new ResultVo<>(ResultVo.SUCCESS,"查询成功",pageList);
}
return new ResultVo<>(ResultVo.ERROR,"根据field查询不到字典组!");
}
}

@ -8,9 +8,9 @@ import cn.jyjz.xiaoyao.ocr.dto.OcrFieldDto;
import cn.jyjz.xiaoyao.ocr.service.OcrFieldService;
import cn.jyjz.xiaoyao.ocr.vo.OcrFieldVo;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -29,9 +29,9 @@ public class OcrFieldController extends BaseController {
*
* @return
*/
@ApiOperation(value="自定义筛选字段列表查询", notes="自定义筛选字段列表查询")
@ApiOperation(value="根据评审类型查询字段列表", notes="根据评审类型查询字段列表")
@GetMapping(value = "/list")
public ResultVo<List<OcrFieldDto>> list(@RequestParam(name="reviewType") Integer reviewType) {
public ResultVo<List<OcrFieldDto>> list(@RequestParam(name="reviewType") @ApiParam(value = "字段类型(终审:0工单1、一审二审:2、审核填报:3", required = true) Integer reviewType) {
ResultVo<List<OcrFieldDto>> resultVo = new ResultVo<>();
List<OcrFieldDto> ocrFieldDtos = ocrFieldService.list(reviewType);
resultVo.setData(ocrFieldDtos);
@ -43,7 +43,7 @@ public class OcrFieldController extends BaseController {
*
* @return
*/
@ApiOperation(value="自定义筛选字段列表查询", notes="自定义筛选字段列表查询")
@ApiOperation(value="字段全部列表查询", notes="字段全部列表查询")
@GetMapping(value = "/listAll")
public ResultVo<List<OcrFieldDto>> listAll() {
ResultVo<List<OcrFieldDto>> resultVo = new ResultVo<>();
@ -57,9 +57,9 @@ public class OcrFieldController extends BaseController {
* ID
* @return
*/
@ApiOperation(value="删除自定义筛选字段", notes="删除自定义筛选字段")
@ApiOperation(value="删除筛选字段", notes="删除筛选字段")
@GetMapping(value = "/delete")
public ResultVo delete(@RequestParam(name="id") Long id) {
public ResultVo delete(@RequestParam(name="id") @ApiParam(value = "字段ID", required = true) Long id) {
OcrFieldDto ocrFieldDto = ocrFieldService.delete(id);
if(ocrFieldDto != null){
@ -72,19 +72,15 @@ public class OcrFieldController extends BaseController {
*
* @return
*/
@ApiOperation(value="自定义筛选字段新增和修改", notes="自定义筛选字段新增和修改")
@ApiOperation(value="字段新增和修改", notes="字段新增和修改")
@PostMapping(value = "/saveOrUpdate")
public ResultVo saveOrUpdate(OcrFieldVo ocrFieldVo) {
public ResultVo saveOrUpdate(@ApiParam(value = "字段信息", required = true) OcrFieldVo ocrFieldVo) {
try {
OcrField ocrField = new OcrField();
ocrField.setId(ocrFieldVo.getId());
ocrField.setName(ocrFieldVo.getName());
ocrField.setReviewType(ocrFieldVo.getReviewType());
ocrField.setFieldDesc(ocrFieldVo.getFieldDesc());
ocrField.setCreateBy(ocrFieldVo.getCreateBy());
ocrField.setCreateTime(ocrFieldVo.getCreateTime());
ocrField.setUpdateBy(ocrFieldVo.getUpdateBy());
ocrField.setUpdateTime(ocrFieldVo.getUpdateTime());
ocrField.setIsrequired(ocrFieldVo.getIsrequired());
ocrFieldService.saveData(ocrField);
} catch (BeansException e) {
e.printStackTrace();

@ -2,29 +2,24 @@ package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.dataobject.Candidateuser;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrMsg;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrMsgRead;
import cn.jyjz.xiaoyao.ocr.service.IOcrMsgService;
import cn.jyjz.xiaoyao.ocr.util.PageRequest;
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.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import cn.jyjz.xiaoyao.ocr.service.IOcrMsgReadService;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -52,32 +47,31 @@ public class OcrMsgReadController {
/**
*
* @param map
* @param map start
* @param map limit 10
*
* @return
*/
@ApiOperation(value = "系统消息分页", notes = "系统消息分页")
@RequestMapping(value = "/systempage", method = RequestMethod.GET)
public ResponseEntity<?> systempage(HttpServletRequest request,@RequestBody Map<String, String> map) {
@RequestMapping(value = "/systemPage", method = RequestMethod.GET)
public ResultVo systemPage(HttpServletRequest request,
@RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
@RequestParam(value = "msgCategory", required = false) String msgCategory) {
IPage<OcrMsg> iPage = new Page<>(Integer.valueOf(map.get("pageNo")),Integer.valueOf(map.get("pageSize")));
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrMsg> wrapper = new QueryWrapper<>();
wrapper.select("id","titile","sender","bus_json","send_time").eq("msg_category",map.get("msgCategory")).eq("send_status","1").apply("FIND_IN_SET('"+userToken.getUsername()+"',receive_user_ids) UNION ALL select id,titile,bus_json,send_time from ocr_msg where receive_user_type='2' ");
// .select("id","titile","sender","bus_json","send_time").eq("send_status","2");
// if(!StringUtils.isEmpty(map.get("productsId"))) {
// }
//执行查询方法
IPage<OcrMsg> page = this.iocrmsgservice.page(iPage,wrapper);
//条件查询
PageRequest pageQuery=new PageRequest();
pageQuery.setPageNum(pageNo);
pageQuery.setPageSize(pageSize);
PageInfo<List<Map<Object, String>>> findPage = iocrmsgservice.selectPage(pageQuery,userToken.getUserid(),msgCategory);
return new ResponseEntity<Object>(page,HttpStatus.OK);
//执行查询方法
// return new ResponseEntity<Object>(findPage, HttpStatus.OK);
return ResultVoUtil.success(findPage);
}
@ -91,30 +85,32 @@ public class OcrMsgReadController {
*/
@ApiOperation(value = "消息详情", notes = "消息详情")
@RequestMapping(value = "/msgOne", method = RequestMethod.GET)
public ResponseEntity<?> msgOne(@RequestParam(value = "id", required = false)String id) {
public ResultVo msgOne(@RequestParam(value = "id", required = false)String id) {
QueryWrapper<OcrMsg> wrapper = new QueryWrapper<>();
wrapper.select("titile","msg_content","sender","msg_category","send_time");
wrapper.eq("id", id);
//执行查询方法
OcrMsg one = iocrmsgservice.getOne(wrapper);
// QueryWrapper<OcrMsg> wrapper = new QueryWrapper<>();
// wrapper.select("titile","msg_content as msgContent","'系统管理员' as qweqwe","sender","msg_category as msgCategory","send_time as sendTime");
// wrapper.eq("id", id);
// //执行查询方法
// OcrMsg one = iocrmsgservice.getOne(wrapper);
return new ResponseEntity<Object>(one,HttpStatus.OK);
Map<Object, String> selectone = iocrmsgservice.selectone(id);
return ResultVoUtil.success(selectone);
}
/**
*
*
* @return
*/
@ApiOperation(value = "消除未读所有", notes = "消除未读所有")
@RequestMapping(value = "eliminateUnreadfull", method = RequestMethod.POST)
public ResponseEntity<?> eliminateUnreadfull(HttpServletRequest request,@RequestParam(value = "msgCategory", required = false)String msgCategory) {
public ResultVo eliminateUnreadfull(HttpServletRequest request, @RequestParam(value = "msgCategory", required = false)String msgCategory) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrMsg> wrapperlist = new QueryWrapper<>();
wrapperlist.select("id").eq("msg_category",msgCategory).eq("send_status","1").apply("FIND_IN_SET('"+userToken.getUsername()+"',receive_user_ids)");
wrapperlist.select("id").eq("msg_category",msgCategory).eq("send_status","1").apply(" FIND_IN_SET('"+userToken.getUserid()+"',receive_user_ids)");
QueryWrapper<OcrMsgRead> wrapperone = new QueryWrapper<>();
@ -122,9 +118,9 @@ public class OcrMsgReadController {
List<OcrMsg> list = iocrmsgservice.list(wrapperlist);
for (OcrMsg msg:list){
wrapperone.eq("msg_id", msg.getId()).eq("user_id",userToken.getUsername());
wrapperone.eq("msg_id", msg.getId()).eq("user_id",userToken.getUserid());
OcrMsgRead one = ocrMsgReadService.getOne(wrapperone);
if(null!=one) {
if(null==one) {
OcrMsgRead ocrmsgread=new OcrMsgRead();
ocrmsgread.setId(Long.valueOf(sdf.format(System.currentTimeMillis())));
ocrmsgread.setMsgId(msg.getId());
@ -135,12 +131,13 @@ public class OcrMsgReadController {
}
}
//此处需要手工处理 返回需要将修改后的数据返回
return new ResponseEntity<Object>(HttpStatus.OK);
// return new ResponseEntity<Object>("true",HttpStatus.OK);
return ResultVoUtil.success(ResultVo.SUCCESS);
}
@ApiOperation(value = "消除未读单个", notes = "消除未读单个")
@RequestMapping(value = "eliminateUnreadone", method = RequestMethod.POST)
public ResponseEntity<?> eliminateUnreadone(HttpServletRequest request,@RequestParam(value = "msgid", required = false)String msgid) {
public ResultVo eliminateUnreadone(HttpServletRequest request, @RequestParam(value = "msgid", required = false)String msgid) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
@ -157,7 +154,8 @@ public class OcrMsgReadController {
boolean save = ocrMsgReadService.save(ocrmsgread);
//此处需要手工处理 返回需要将修改后的数据返回
return new ResponseEntity<Object>(save,HttpStatus.CREATED);
// return new ResponseEntity<Object>(save,HttpStatus.OK);
return ResultVoUtil.success(save);
}
}

@ -97,12 +97,16 @@ public class OcrPackagetaskController extends BaseController{
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
String packageName = request.getParameter("packagename");
//获取当前登录人
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrPackagetask> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenant_id",tenantId);
if(StringUtils.isNotBlank(packageName)){
queryWrapper.like("packagename",packageName);
}
Page<OcrPackagetask> page = new Page<OcrPackagetask>(pageNo, pageSize);
IPage<OcrPackagetask> pageList = ocrPackagetaskService.page(page, queryWrapper);
return ResultVoUtil.success(pageList);

@ -228,7 +228,7 @@ public class OcrPictureController extends BaseController{
Map<String,Object> paraMap = new HashMap<>();
for(SearchConfigEnum config : SearchConfigEnum.values()){
String searchvalue = req.getParameter(config.getId());
if(StringUtils.isNotBlank(searchvalue)){
if(!StringUtils.isEmpty(searchvalue)){
paraMap.put(config.getMeaning(),searchvalue);
}
}

@ -1,9 +1,7 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.admin.dataobject.Tenant;
import cn.jyjz.xiaoyao.admin.dataobject.User;
import cn.jyjz.xiaoyao.admin.service.TenantService;
import cn.jyjz.xiaoyao.common.base.controller.BaseController;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.redis.cache.ICacheManager;
@ -11,24 +9,18 @@ import cn.jyjz.xiaoyao.common.redis.cache.constants.CacheConstants;
import cn.jyjz.xiaoyao.framework.security.service.SmsLoginService;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSUserT;
import cn.jyjz.xiaoyao.ocr.service.OcrISUserTService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -54,11 +46,15 @@ public class OcrSUserTController {
@Resource
ICacheManager iCacheManager;
/**
@Autowired
OcrTaskchildPictureService ocrtaskchildpictureservice;
/**
*
*/
@ApiOperation(value = "重置密码", notes = "重置密码")
@RequestMapping(value = "/updateSUser", method = RequestMethod.POST)
public ResponseEntity<?> updateSUser(@RequestBody Map<String,String> map) {
public ResultVo updateSUser(@RequestBody Map<String,String> map) {
// System.out.println(map);
// Map<String, String> map=new HashMap<String,String>();
@ -74,34 +70,39 @@ public class OcrSUserTController {
boolean update = sUserTService.update(updatewrapper);
if(update){
return new ResponseEntity<Object>("密码重设成功!",HttpStatus.OK);
// return new ResponseEntity<Object>("密码重设成功!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"密码重设成功!");
}
}else{
return new ResponseEntity<Object>("两次密码输入不一致!",HttpStatus.OK);
// return new ResponseEntity<Object>("两次密码输入不一致!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"两次密码输入不一致!");
}
}else{
return new ResponseEntity<Object>("请再次输入新密码!",HttpStatus.OK);
// return new ResponseEntity<Object>("请再次输入新密码!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请再次输入新密码!");
}
}else{
return new ResponseEntity<Object>("请输入新密码!",HttpStatus.OK);
// return new ResponseEntity<Object>("请输入新密码!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入新密码!");
}
}else {
return new ResponseEntity<Object>("请输入同时包含英文、数字的8~16位密码",HttpStatus.OK);
// return new ResponseEntity<Object>("请输入同时包含英文、数字的8~16位密码",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入同时包含英文、数字的8~16位密码");
}
return new ResponseEntity<Object>(HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS);
}
@ApiOperation(value = "忘记密码", notes = "忘记密码")
@RequestMapping(value = "/selectSUser", method = RequestMethod.GET)
public ResponseEntity<?> selectSUser(@RequestBody Map<String,Object> map) {
@RequestMapping(value = "/selectSUser", method = RequestMethod.POST)
public ResultVo selectSUser(@RequestBody Map<String,Object> map) {
if(null!=map.get("loginname")){
if(null!=map.get("phone")){
@ -124,35 +125,46 @@ public class OcrSUserTController {
if(null!=phoneone){
String sysCode = iCacheManager.get(CacheConstants.USER_PHONE_MODEL_NAME,map.get("phone").toString());
if(!StringUtils.isBlank(sysCode) && !sysCode.equals(map.get("phone").toString())){
return new ResponseEntity<Object>("通过",HttpStatus.OK);
Map<Object, String> list = new HashMap<>();
list.put("loginname",map.get("loginname").toString());
// return new ResponseEntity<Map<Object, String>>(list, HttpStatus.OK);
return ResultVoUtil.success(ResultVo.SUCCESS,list);
}else {
return new ResponseEntity<Object>("验证码错误!",HttpStatus.OK);
// return new ResponseEntity<Object>("验证码错误!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"验证码错误!");
}
}else {
return new ResponseEntity<Object>("手机号错误!",HttpStatus.OK);
// return new ResponseEntity<Object>("手机号错误!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"手机号错误!");
}
}else {
return new ResponseEntity<Object>("账号不存在!",HttpStatus.OK);
// return new ResponseEntity<Object>("账号不存在!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"账号不存在!");
}
}else {
return new ResponseEntity<Object>("企业编码错误!",HttpStatus.OK);
// return new ResponseEntity<Object>("企业编码错误!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"企业编码错误!");
}
}else {
return new ResponseEntity<Object>("请输入企业编码!",HttpStatus.OK);
// return new ResponseEntity<Object>("请输入企业编码!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入企业编码!");
}
}else {
return new ResponseEntity<Object>("请输入验证码!",HttpStatus.OK);
// return new ResponseEntity<Object>("请输入验证码!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入验证码!");
}
}else {
return new ResponseEntity<Object>("请输入手机号!",HttpStatus.OK);
// return new ResponseEntity<Object>("请输入手机号!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入手机号!");
}
}else {
return new ResponseEntity<Object>("请输入账号!",HttpStatus.OK);
// return new ResponseEntity<Object>("请输入账号!",HttpStatus.OK);
return ResultVoUtil.error(ResultVo.SUCCESS,"请输入账号!");
}
@ -161,4 +173,5 @@ public class OcrSUserTController {
}
}

@ -0,0 +1,97 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import cn.jyjz.xiaoyao.ocr.service.IOcrSearchHistoryService;
import java.util.List;
/**
* ocr
*
* @author
* @Date 2024-03-15 19:53:30
*/
@CrossOrigin
@RestController
@RequestMapping("/ocr/history")
public class OcrSearchHistoryController {
@Autowired
private IOcrSearchHistoryService ocrSearchHistoryService;
@Autowired
private UserTokenService userTokenService;
/**
*
*
* @param request
* @return
*/
@RequestMapping(value = "/searchList", method = RequestMethod.GET)
public ResultVo searchList(HttpServletRequest request,
@RequestParam(value = "search", required = false) String search) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
//执行查询方法
List<String> selectsearch = ocrSearchHistoryService.selectsearch(search, userToken.getUsername());
OcrSearchHistory ocrsearchhistory =new OcrSearchHistory();
ocrsearchhistory.setHistoryname(search);
ocrsearchhistory.setUserid(Long.valueOf(userToken.getUserid()));
ocrsearchhistory.setCreatedate(System.currentTimeMillis());
ocrSearchHistoryService.save(ocrsearchhistory);
// return new ResponseEntity<Object>(selectsearch, HttpStatus.OK);
return ResultVoUtil.success(selectsearch);
}
/**
*
*
* @param request
* @return
*/
@RequestMapping(value = "/searchdelete", method = RequestMethod.DELETE)
public ResultVo searchdelete(HttpServletRequest request) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrSearchHistory> wrapper = new QueryWrapper<>();
wrapper.eq("userid",userToken.getUserid());
//根据具体情况 判断 是否需要 进行数据返回, 默认不返回数据
ocrSearchHistoryService.remove(wrapper);
// return new ResponseEntity<Object>("true",HttpStatus.OK);
return ResultVoUtil.success(ResultVo.SUCCESS);
}
/**
*
*
* @param request
* @return
*/
@RequestMapping(value = "/historySearch", method = RequestMethod.GET)
public ResultVo historySearch(HttpServletRequest request) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request));
QueryWrapper<OcrSearchHistory> wrapper = new QueryWrapper<>();
wrapper.select("historyname","createdate").eq("userid",userToken.getUserid()).orderByDesc("createdate").last("limit 8");
List<OcrSearchHistory> list = ocrSearchHistoryService.list(wrapper);
// return new ResponseEntity<List<OcrSearchHistory>>(list, HttpStatus.OK);
return ResultVoUtil.success(list);
}
}

@ -3,24 +3,18 @@ package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.common.base.controller.BaseController;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrField;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUserField;
import cn.jyjz.xiaoyao.ocr.dto.OcrFieldDto;
import cn.jyjz.xiaoyao.ocr.dto.OcrUserFieldDto;
import cn.jyjz.xiaoyao.ocr.service.OcrFieldService;
import cn.jyjz.xiaoyao.ocr.service.OcrUserFieldService;
import cn.jyjz.xiaoyao.ocr.vo.OcrFieldVo;
import cn.jyjz.xiaoyao.ocr.vo.OcrUserFieldVo;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/ocr/user/field")
public class OcrUserFieldController extends BaseController{
@ -36,31 +30,30 @@ public class OcrUserFieldController extends BaseController{
*/
@ApiOperation(value="保存或更新用户展示字段列表", notes="保存或更新用户展示字段列表")
@PostMapping(value = "/saveOrUpdate")
public ResultVo saveOrUpdate(OcrUserFieldVo ocrUserFieldVo) {
public ResultVo saveOrUpdate(@ApiParam(value = "用户字段信息", required = true) OcrUserFieldVo ocrUserFieldVo) {
try {
OcrUserField ocrUserField = new OcrUserField();
ocrUserField.setId(ocrUserFieldVo.getId());
ocrUserField.setUserId(ocrUserFieldVo.getUserId());
ocrUserField.setReviewType(ocrUserFieldVo.getReviewType());
ocrUserField.setUserField(ocrUserFieldVo.getUserField());
ocrUserField.setCreateBy(ocrUserFieldVo.getCreateBy());
ocrUserField.setCreateTime(ocrUserFieldVo.getCreateTime());
ocrUserField.setUpdateBy(ocrUserFieldVo.getUpdateBy());
ocrUserField.setUpdateTime(ocrUserFieldVo.getUpdateTime());
ocrUserFieldService.saveData(ocrUserField);
} catch (BeansException e) {
// 调用服务层方法,并处理返回值
ResultVo result = ocrUserFieldService.saveData(ocrUserField);
return result;
}catch (Exception e) {
e.printStackTrace();
return ResultVoUtil.error("保存或更新用户展示字段列表失败:未知错误");
}
return ResultVoUtil.success();
}
/**
* -
* @return
*/
@ApiOperation(value="自定义筛选字段列表查询", notes="自定义筛选字段列表查询")
@ApiOperation(value="用户-筛选字段查询", notes="用户-筛选字段查询")
@GetMapping(value = "/queryFields")
public ResultVo<OcrUserFieldDto> queryFields(@RequestParam(name="userId") Long userId ,@RequestParam(name="reviewType") Integer reviewType) {
public ResultVo<OcrUserFieldDto> queryFields(@ApiParam(value = "用户ID", required = true) @RequestParam(name = "userId") Long userId,
@ApiParam(value = "审核类型(终审:0工单1、一审二审:2、审核填报:3", required = true) @RequestParam(name = "reviewType") Integer reviewType) {
ResultVo<OcrUserFieldDto> resultVo = new ResultVo<>();
OcrUserFieldDto ocrUserFieldDto = ocrUserFieldService.queryFields(userId,reviewType);
resultVo.setData(ocrUserFieldDto);

@ -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> {
}

@ -4,6 +4,10 @@ package cn.jyjz.xiaoyao.ocr.dataDao;
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;
/**
* <p>
@ -15,5 +19,7 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface OcrMsgMapper extends BaseMapper<OcrMsg> {
List<List<Map<Object, String>>> selectPage(@Param("userid")String userid,@Param("msgCategory")String msgCategory);
Map<Object, String> selectone(@Param("id")String id);
}

@ -0,0 +1,23 @@
package cn.jyjz.xiaoyao.ocr.dataDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import liquibase.pro.packaged.S;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author 123
* @since 2024-03-15
*/
@Mapper
public interface OcrSearchHistoryMapper extends BaseMapper<OcrSearchHistory> {
List<String> selectsearch(@Param("search")String search,@Param("assignee") String assignee);
}

@ -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;
}

@ -43,6 +43,10 @@ public class OcrField implements Serializable {
@TableField(value="field_desc")
private String fieldDesc;
@Schema(description = "是否必选")
@TableField(value="isrequired")
private Integer isrequired;
@Schema(description = "创建人")
@TableField(value="create_by")
private String createBy;

@ -263,7 +263,7 @@ public class OcrPicture implements BaseDto,java.io.Serializable {
@ApiModelProperty(value ="拜访日期")
@TableField(value="field11")
private Long field11;
private String field11;
@ApiModelProperty(value ="定位距离")
@TableField(value="field12")

@ -0,0 +1,90 @@
package cn.jyjz.xiaoyao.ocr.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author 123
* @since 2024-03-15
*/
@TableName("ocr_search_history")
public class OcrSearchHistory extends Model<OcrSearchHistory> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
*
*/
private String historyname;
public Long getUserid() {
return userid;
}
public void setUserid(Long userid) {
this.userid = userid;
}
/**
*
*/
private Long userid;
/**
*
*/
private Long createdate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getHistoryname() {
return historyname;
}
public void setHistoryname(String historyname) {
this.historyname = historyname;
}
public Long getCreatedate() {
return createdate;
}
public void setCreatedate(Long createdate) {
this.createdate = createdate;
}
@Override
public Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "OcrSearchHistory{" +
"id=" + id +
", historyname=" + historyname +
", userid=" + userid +
", createdate=" + createdate +
"}";
}
}

@ -1,20 +1,15 @@
package cn.jyjz.xiaoyao.ocr.dataobject;
import cn.jyjz.xiaoyao.admin.dataobject.Tenant;
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.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;

@ -1,7 +1,6 @@
package cn.jyjz.xiaoyao.ocr.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -9,7 +8,6 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;
@Data
@Builder
@ -18,7 +16,7 @@ import java.sql.Date;
@Schema(name = "字段信息", title = "字段信息")
public class OcrFieldDto implements Serializable {
private static final long serialVersionUID = 8088861709460050761L;
@Schema(description = "主键")
@Schema(description = "字段ID")
private Long id;
@Schema(description = "字段名称")
@ -30,6 +28,9 @@ public class OcrFieldDto implements Serializable {
@Schema(description = "字段描述")
private String fieldDesc;
@Schema(description = "是否必选")
private Integer isrequired;
@Schema(description = "是否删除0未删除1:已删除")
private Integer del;
}

@ -1,7 +1,5 @@
package cn.jyjz.xiaoyao.ocr.dto;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -9,7 +7,6 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;
@Data
@Builder
@ -18,7 +15,7 @@ import java.sql.Date;
@Schema(name = "用户-展示字段", title = "用户-展示字段")
public class OcrUserFieldDto implements Serializable {
private static final long serialVersionUID = 8088861709460050761L;
@Schema(description = "主键")
@Schema(description = "用户-字段ID")
private Long id;
@Schema(description = "用户ID")

@ -3,6 +3,12 @@ package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrMsg;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import cn.jyjz.xiaoyao.ocr.util.PageRequest;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
@ -14,4 +20,16 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IOcrMsgService extends IService<OcrMsg> {
/**
*
* , MyBatisJPA
* ORMORM
*
* @param pageRequest
* @return PageResult
*/
PageInfo<List<Map<Object,String>>> selectPage(PageRequest pageRequest,String userid, String msgCategory);
Map<Object, String> selectone(String id);
}

@ -0,0 +1,20 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author 123
* @since 2024-03-15
*/
public interface IOcrSearchHistoryService extends IService<OcrSearchHistory> {
List<String> selectsearch(String search,String assignee);
}

@ -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);
}

@ -33,6 +33,8 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId , UserToken sysUser, String search_month, HttpServletRequest req, String buessinessno);
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId);
/**
*
* @param tenantId
@ -88,4 +90,10 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
*/
IPage<OcrPicture> queryPageByUserSearchId(Integer pageNo, Integer pageSize, String userSearchId);
/**
*
* @param ocrPictureList
* @return
*/
int savePictures(List<OcrPicture> ocrPictureList);
}

@ -42,6 +42,8 @@ public interface OcrTaskchildPictureService extends BaseService<OcrTaskchildPict
*/
public boolean validateApprove(String[] formid);
public boolean validateBoole(String[] formid);
/**
*
* @param formid

@ -18,4 +18,6 @@ public interface OcrUpuserService extends BaseService<OcrUpuser> {
* @return List<OcrPictureclass>
*/
List<OcrUpuser> queryListNoPage(QueryWrapper<OcrUpuser> queryWrapper);
Long selectByUpNameCount(String upname,Long tenantId);
}

@ -1,5 +1,6 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrField;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUserField;
@ -14,7 +15,7 @@ public interface OcrUserFieldService extends BaseService<OcrUserField> {
/**
*
*/
void saveData(OcrUserField ocrUserField);
ResultVo saveData(OcrUserField ocrUserField);
/**
* -

@ -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;
}
}

@ -31,7 +31,9 @@ public class OcrFieldServiceImpl extends BaseServiceImpl<OcrFieldMybatisDao, Ocr
List<OcrFieldDto> ocrFieldDtoList = new ArrayList<>();
try {
LambdaQueryWrapper<OcrField> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OcrField::getReviewType, reviewType);
queryWrapper.and(qw -> qw.eq(OcrField::getIsrequired, 2) // 检查是否必选字段为 2
.or()
.eq(OcrField::getReviewType, reviewType)); // 检查评审类型// 检查评审类型
queryWrapper.eq(OcrField::getDel, 0);
List<OcrField> ocrFieldList = this.list(queryWrapper);
if(ocrFieldList.size()>0){
@ -41,6 +43,8 @@ public class OcrFieldServiceImpl extends BaseServiceImpl<OcrFieldMybatisDao, Ocr
dto.setName(ocrField.getName());
dto.setReviewType(ocrField.getReviewType());
dto.setFieldDesc(ocrField.getFieldDesc());
dto.setIsrequired(ocrField.getIsrequired());
dto.setDel(ocrField.getDel());
ocrFieldDtoList.add(dto);
}
}
@ -64,6 +68,8 @@ public class OcrFieldServiceImpl extends BaseServiceImpl<OcrFieldMybatisDao, Ocr
dto.setName(ocrField.getName());
dto.setReviewType(ocrField.getReviewType());
dto.setFieldDesc(ocrField.getFieldDesc());
dto.setIsrequired(ocrField.getIsrequired());
dto.setDel(ocrField.getDel());
ocrFieldDtoList.add(dto);
}
}

@ -4,8 +4,16 @@ import cn.jyjz.xiaoyao.ocr.dataDao.OcrMsgMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrMsg;
import cn.jyjz.xiaoyao.ocr.service.IOcrMsgService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.jyjz.xiaoyao.ocr.util.PageRequest;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* <p>
*
@ -17,4 +25,22 @@ import org.springframework.stereotype.Service;
@Service
public class OcrMsgServiceImpl extends ServiceImpl<OcrMsgMapper, OcrMsg> implements IOcrMsgService {
@Resource
OcrMsgMapper ocrmsgmapper;
@Override
public PageInfo<List<Map<Object,String>>> selectPage(PageRequest pageRequest,String userid, String msgCategory) {
int pageNum = pageRequest.getPageNum();
int pageSize = pageRequest.getPageSize();
PageHelper.startPage(pageNum, pageSize);
List<List<Map<Object, String>>> selectPage = ocrmsgmapper.selectPage(userid,msgCategory);
return new PageInfo<List<Map<Object,String>>>(selectPage);
}
@Override
public Map<Object, String> selectone(String id) {
return ocrmsgmapper.selectone(id);
}
}

@ -2,7 +2,6 @@ package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.jyjz.flowable.domain.vo.FlowInstanceVo;
import cn.jyjz.flowable.service.IFlowInstanceService;
import cn.jyjz.xiaoyao.abase.service.SeqManageService;
import cn.jyjz.xiaoyao.admin.service.LogService;
@ -14,41 +13,39 @@ import cn.jyjz.xiaoyao.oa.from.service.CategoryService;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.service.*;
import cn.jyjz.xiaoyao.ocr.util.DataDictionaryUtil;
import cn.jyjz.xiaoyao.ocr.util.ImageClassUtil;
import cn.jyjz.xiaoyao.ocr.util.SearchEnum;
import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpHeader;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hpsf.Decimal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.stereotype.Service;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
*
*/
@Service
@Service("ocrPictureService")
@Slf4j
public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao, OcrPicture> implements OcrPictureService {
@Resource
@ -77,6 +74,21 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
private OcrPictureclassService ocrPictureclassService;
@Resource
private CategoryService categoryService;
private Object lock = new Object();
/**
*
*/
@Value("${ocr.api.wly.interface-domain}")
private String interfaceDomain;
/**
*
*/
@Autowired
DataDictionaryUtil dataDictionaryUtil;
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId, UserToken sysUser, String search_month, HttpServletRequest request, String buessinessno) {
//图片错误信息
@ -261,6 +273,160 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
}
return ResultVoUtil.error("失败。");
}
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId) {
//图片错误信息
StringBuffer error = new StringBuffer();
//项目错误信息
StringBuffer errorProject = new StringBuffer();
//流程错误信息
StringBuffer errorFlow = new StringBuffer();
//记录任务相似度为百分百的任务主键
List<Long> pointsList = new ArrayList<>();
//图片信息不能为空
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
//生成任务包
//String packageName = seqManageService.getSeqNextNo("AI任务包");
//用于标记相似度是否存在百分百的情况
List<OcrPicture> newList = new ArrayList<>();
for (OcrPicture ocrPicture : ocrPictureList) {
//图片查重的比对图片集合
List<OcrPicture> compareList = new ArrayList<>();
//非历史图片主键集合
List<String> picturecompareList = new ArrayList<>();
boolean havePoint = false;
//二次遍历进行比对
for (OcrPicture ocrPictureNext : ocrPictureList) {
if (ocrPictureNext.getId().longValue() == ocrPicture.getId().longValue()) {
continue;
}
//TODO 接口请求判断重复情况
JSONObject jsonObjectSimi = ImageClassUtil.getSimilarity(ocrPicture.getImgurl(),
ocrPictureNext.getImgurl(),
null);
System.out.println("responseDataXs--code = [" + jsonObjectSimi.get("code") + "]");
System.out.println("responseDataXs--similarity = [" + jsonObjectSimi.get("similarity") + "]");
String resultValue = "";
//返回内容为零,表示成功,否则表示失败
if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")) {
resultValue = jsonObjectSimi.getString("similarity");
ocrPictureNext.setResult(resultValue);
} else {
resultValue = "0";
ocrPictureNext.setResult(resultValue);
}
BigDecimal b1 = new BigDecimal(resultValue);
BigDecimal b2 = new BigDecimal("100");
int val = b1.compareTo(b2);
if (val == 0) {
havePoint = true;
}
//如果当前图片未生成任务需要临时保存
if (ocrPictureNext.getTaskstatus().equals("0")) {
picturecompareList.add(ocrPictureNext.getId().toString());
}
compareList.add(ocrPictureNext);
}
bubbleSortOpt(compareList);
//从大到小进行排序
ocrPicture.setListCom(compareList);
//非历史图片主键集合
ocrPicture.setPicturecompareList(picturecompareList);
//查询项目对象
if (null == ocrPicture.getCategoryid()) {
//TODO 没有对应项目,返回提示信息
if (null != error && error.length() > 1) {
error.append("," + ocrPicture.getImgname());
} else {
error.append(ocrPicture.getImgname());
}
continue;
}
Category category = categoryService.getById(ocrPicture.getCategoryid());
if (null == category) {
if (null != errorProject && errorProject.length() > 1) {
errorProject.append("," + ocrPicture.getImgname());
} else {
errorProject.append(ocrPicture.getImgname());
}
continue;
} else if (StringUtils.isBlank(category.getProcessdefinitionid())) {
if (null != errorFlow && errorFlow.length() > 1) {
errorFlow.append("," + category.getCategoryname());
} else {
errorFlow.append(category.getCategoryname());
}
continue;
}
UserToken userToken = new UserToken();
userToken.setLoginname("admin");
userToken.setUsername("admin");
//创建工单,如果创建成功,增加标志,用于过滤条件使用
OcrTaskchildPicture ocrTaskchildPicture = this.ocrTaskchildPictureService.create(ocrPicture, tenantId, userToken, null, null);
if (null != ocrTaskchildPicture) {
//发起流程
MockHttpServletRequest request = new MockHttpServletRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
flowInstanceService.startProcessInstanceById(
category.getProcessdefinitionid(),
null,
request,
ocrTaskchildPicture.getId().toString(),
category.getServicename()
);
if (havePoint) {
pointsList.add(ocrTaskchildPicture.getId());
}
//TODO 需要测试
ocrPicture.setTaskchildpictureid(ocrTaskchildPicture.getId().toString());
ocrPicture.setWorkStatus("1");
this.updateById(ocrPicture);
}
newList.add(ocrPicture);
}
//批量更新 pointsList 主键相似度为百分百的数据
if (null != pointsList && !pointsList.isEmpty()) {
this.ocrTaskchildPictureService.markPoint(pointsList);
}
//原主图设置为任务包已经生成
for (OcrPicture ocrPicture : newList) {
ocrPicture.setTaskstatus("1");
this.updateById(ocrPicture);
}
if (StringUtils.isBlank(error) && StringUtils.isBlank(errorProject) && StringUtils.isBlank(errorFlow)) {
return ResultVoUtil.success();
} else {
String msg = (StringUtils.isBlank(error)) ? "" : error.toString() + ",图片没有对应项目,无法查重。";
msg = msg + ((StringUtils.isBlank(errorProject)) ? "" : errorProject.toString() + ",图片没有对应项目,无法查重。");
msg = msg + ((StringUtils.isBlank(errorFlow)) ? "" : errorFlow.toString() + ",项目没有配置审批流程,无法查重。");
return ResultVoUtil.success(msg);
}
}
return ResultVoUtil.error("失败。");
}
public void bubbleSortOpt(List<OcrPicture> compareList) {
if (null == compareList) {
@ -277,8 +443,10 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
}
}
}
/**
* json
*
* @param jsonArray
* @return
*/
@ -288,6 +456,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
return list;
}
public List<OcrPicture> listPage(Wrapper<OcrPicture> queryWrapper) {
long count = this.count(queryWrapper);
@ -336,6 +505,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
/**
*
*
* @return
*/
public List<OcrPicture> listByTaskChild(List<String> pictureidlist) {
@ -364,6 +534,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
/**
*
*
* @param ocrTaskchildPicture
* @return
*/
@ -503,8 +674,32 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
return pageList;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int savePictures(List<OcrPicture> ocrPictureList) {
//1.字典数据 解析入库
boolean b = dataDictionaryUtil.pictureDataDictionarySaveArray(ocrPictureList);
//2.调整图片地址,补齐域名
for (OcrPicture picture : ocrPictureList) {
picture.setCreateTime(System.currentTimeMillis()); //获取创建时间戳
picture.setImgurl(interfaceDomain + picture.getImgurl());
}
//3.添加图片信息
if (this.saveBatch(ocrPictureList)) {
this.createTaskChild(ocrPictureList, ocrPictureList.get(0).getTenantId().toString());
return ocrPictureList.size();
}
return 0;
}
/**
*
*
* @param queryWrapper
* @param usersearchchild
* @return
@ -528,6 +723,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
/**
*
*
* @param queryWrapper
* @param usersearchchild
* @return

@ -0,0 +1,31 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory;
import cn.jyjz.xiaoyao.ocr.service.IOcrSearchHistoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrSearchHistoryMapper;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author 123
* @since 2024-03-15
*/
@Service
public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMapper, OcrSearchHistory> implements IOcrSearchHistoryService {
@Resource
OcrSearchHistoryMapper ocrsearchhistorymapper;
@Override
public List<String> selectsearch(String search, String assignee) {
return ocrsearchhistorymapper.selectsearch(search,assignee);
}
}

@ -10,7 +10,6 @@ import cn.jyjz.xiaoyao.common.mybatisplus.util.SearchQueryFormat;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

@ -36,4 +36,12 @@ public class OcrUpuserServiceImpl extends BaseServiceImpl<OcrUpuserMybatisDao, O
IPage<OcrUpuser> iPage = this.page(page,queryWrapper);
return iPage.getRecords();
}
@Override
public Long selectByUpNameCount(String upname,Long tenantId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("tenant_id",tenantId);
queryWrapper.eq("upname",upname);
return baseMapper.selectCount(queryWrapper);
}
}

@ -1,10 +1,13 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrUserFieldMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrField;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUserField;
import cn.jyjz.xiaoyao.ocr.dto.OcrUserFieldDto;
import cn.jyjz.xiaoyao.ocr.service.OcrFieldService;
import cn.jyjz.xiaoyao.ocr.service.OcrUserFieldService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
@ -27,9 +30,25 @@ public class OcrUserFieldServiceImpl extends BaseServiceImpl<OcrUserFieldMybatis
@Autowired
private OcrUserFieldMybatisDao ocrUserFieldMybatisDao;
@Autowired
private OcrFieldService ocrFieldService;
@Override
public void saveData(OcrUserField ocrUserField){
public ResultVo saveData(OcrUserField ocrUserField){
try {
String fields = ocrUserField.getUserField();
LambdaQueryWrapper<OcrField> ocrFieldLambdaQueryWrapper = new LambdaQueryWrapper<>();
ocrFieldLambdaQueryWrapper.eq(OcrField::getIsrequired,2);
ocrFieldLambdaQueryWrapper.eq(OcrField::getDel,0);
List<OcrField> ocrFieldList = ocrFieldService.list(ocrFieldLambdaQueryWrapper);
for (OcrField ocrField : ocrFieldList) {
String fieldName = ocrField.getName();
if (!fields.contains(fieldName)) {
// 如果有必选字段不在前端传递的字段字符串中,则抛出异常
throw new IllegalArgumentException("字段 " + fieldName + " 是必选字段");
}
}
LambdaQueryWrapper<OcrUserField> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(OcrUserField::getUserId,ocrUserField.getUserId());
queryWrapper.eq(OcrUserField::getReviewType,ocrUserField.getReviewType());
@ -49,7 +68,9 @@ public class OcrUserFieldServiceImpl extends BaseServiceImpl<OcrUserFieldMybatis
}
} catch (Exception e) {
e.printStackTrace();
return ResultVoUtil.error("传入字段参数错误");
}
return ResultVoUtil.success();
}
@Override
@ -61,10 +82,12 @@ public class OcrUserFieldServiceImpl extends BaseServiceImpl<OcrUserFieldMybatis
queryWrapper.eq(OcrUserField::getReviewType,reviewType);
queryWrapper.eq(OcrUserField::getDel,0);
OcrUserField ocrUserFieldOne = this.getOne(queryWrapper);
if(ocrUserFieldOne != null){
dto.setId(ocrUserFieldOne.getId());
dto.setUserId(ocrUserFieldOne.getUserId());
dto.setReviewType(ocrUserFieldOne.getReviewType());
dto.setUserField(ocrUserFieldOne.getUserField());
}
} catch (BeansException e) {
e.printStackTrace();
}

@ -0,0 +1,77 @@
package cn.jyjz.xiaoyao.ocr.thread;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.LinkedBlockingQueue;
/**
*
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/03/14 3:08
*/
public class TaskQueue {
private static Logger logger = LoggerFactory.getLogger(TaskQueue.class);
/**
*
*/
public static LinkedBlockingQueue pictureDisposeQueue = new LinkedBlockingQueue();
/**
* picture
*/
public static LinkedBlockingQueue pictureImgToLocalQueue = new LinkedBlockingQueue();
/**
* push
* @return
* @param pictureSourceResult //三方拉取 获取到的图片对象
*/
public static boolean pictureDisposePushData(PictureSourceResult pictureSourceResult){
try {
pictureDisposeQueue.put(pictureSourceResult);
} catch (InterruptedException e) {
logger.error("任务队列添加异常:{}",e.getMessage());
return false;
}
return true;
}
/**
*
* @return
*/
public static PictureSourceResult pictureDisposePullData(){
return (PictureSourceResult) pictureDisposeQueue.poll();
}
/**
* push
* @return
* @param pictureImgToLocalEntity //图片下载对象
*/
public static boolean pictureImgToLocalPushData(PictureImgToLocalEntity pictureImgToLocalEntity){
try {
pictureImgToLocalQueue.put(pictureImgToLocalEntity);
} catch (InterruptedException e) {
logger.error("图片下载任务队列添加异常:{}",e.getMessage());
return false;
}
return true;
}
/**
*
* @return
*/
public static PictureImgToLocalEntity pictureImgToLocalPullData(){
return (PictureImgToLocalEntity) pictureDisposeQueue.poll();
}
}

@ -0,0 +1,21 @@
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.startPictureDisposePull();
taskThreadPool.startPictureImgToLocalPull();
}
}

@ -0,0 +1,87 @@
package cn.jyjz.xiaoyao.ocr.thread;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureDisposeTask;
import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureImgToLocalTask;
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,
40,
3,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());
}
}
/**
*
* @return
*/
public boolean startPictureDisposePull(){
Runnable runnable = new Runnable() {
@SneakyThrows
@Override
public void run() {
logger.debug("无量云接口数据处理消费线程检测中...");
while (true){
PictureSourceResult pictureSourceResult = TaskQueue.pictureDisposePullData();
if(pictureSourceResult!=null){
threadPool.execute(new PictureDisposeTask(pictureSourceResult));
}else{
Thread.sleep(5000);
}
}
}
};
Thread thread=new Thread(runnable);
thread.start();
return true;
}
/**
*
* @return
*/
public boolean startPictureImgToLocalPull(){
Runnable runnable = new Runnable() {
@SneakyThrows
@Override
public void run() {
logger.debug("图片下载消费线程检测中...");
while (true){
PictureImgToLocalEntity pictureImgToLocalEntity = TaskQueue.pictureImgToLocalPullData();
if(pictureImgToLocalEntity!=null){
threadPool.execute(new PictureImgToLocalTask(pictureImgToLocalEntity));
}else{
Thread.sleep(5000);
}
}
}
};
Thread thread=new Thread(runnable);
thread.start();
return true;
}
}

@ -0,0 +1,31 @@
package cn.jyjz.xiaoyao.ocr.thread.entity;
import lombok.Data;
/**
*
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/16 17:11
*/
@Data
public class PictureImgToLocalEntity {
/**
* id
*/
private Long pictureId;
/**
*
*/
private String ImgUrl;
/**
*
*/
private String localPath;
}

@ -0,0 +1,194 @@
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 PictureDisposeTask implements Runnable{
protected Logger logger = LoggerFactory.getLogger(getClass());
private PictureSourceResult pictureSourceResult;
public PictureDisposeTask(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());
}
//项目id
picture.setCategoryid(251374070600303007L);
//项目名称
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);
}
}

@ -0,0 +1,40 @@
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 cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import cn.jyjz.xiaoyao.ocr.util.DownloadImgUtil;
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 PictureImgToLocalTask implements Runnable{
protected Logger logger = LoggerFactory.getLogger(getClass());
private PictureImgToLocalEntity pictureImgToLocal;
public PictureImgToLocalTask(PictureImgToLocalEntity pictureImgToLocal){
this.pictureImgToLocal = pictureImgToLocal;
}
@Override
public void run() {
//1.开始转储图片
DownloadImgUtil.downloadImage(pictureImgToLocal.getImgUrl(), pictureImgToLocal.getLocalPath());
}
}

@ -0,0 +1,47 @@
package cn.jyjz.xiaoyao.ocr.timerJob;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
*
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/14 9:49
*/
@Component
public class PictureSourceTimerJob {
private static Logger logger = LoggerFactory.getLogger(PictureSourceTimerJob.class);
@Autowired
PrevailCloudApi prevailCloudApi;
/**
* job
* @return
*/
private String pictureSourceRequestJob(){
//组装拉取参数
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
// pictureSourceParameter.setStartTime();
// pictureSourceParameter.setEndTime();
pictureSourceParameter.setPageNo(1);
pictureSourceParameter.setPageSize(200);
// pictureSourceParameter.setAccountNo();
//1.拉取数据
// ApiPage<PictureSourceResult> pictureSourceResultApiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
return "";
}
}

@ -0,0 +1,272 @@
package cn.jyjz.xiaoyao.ocr.util;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionary;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrDictionaryGroup;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrUpuser;
import cn.jyjz.xiaoyao.ocr.service.OcrDictionaryService;
import cn.jyjz.xiaoyao.ocr.service.OcrPlanService;
import cn.jyjz.xiaoyao.ocr.service.OcrUpuserService;
import liquibase.pro.packaged.E;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
*
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/16 11:18
*/
@Component
public class DataDictionaryUtil {
/**
*
*/
@Autowired
private OcrDictionaryService ocrDictionaryService;
/**
*
* @return
*/
public boolean pictureDataDictionarySave(){
return true;
}
/**
*
* @param ocrPictureList
* @return
*/
public boolean pictureDataDictionarySaveArray(List<OcrPicture> ocrPictureList) {
for (OcrPicture picture : ocrPictureList) {
//1.检查提报人字典是否包含数据
if(picture.getUpname()!=null && picture.getUpuserid()!=null){
OcrDictionaryGroup upNameDG = ocrDictionaryService.queryGroupByField("person");
if(upNameDG!=null && ocrDictionaryService.isValueExists(upNameDG.getId(),picture.getUpname(),picture.getTenantId())){
OcrDictionary dictionary= new OcrDictionary();
dictionary.setLable(picture.getUpname());
dictionary.setValue(picture.getUpuserid());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(upNameDG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//2.任务计划
if(picture.getPlanname()!=null && picture.getPlanid()!=null) {
OcrDictionaryGroup planNameDG = ocrDictionaryService.queryGroupByField("plan");
if (planNameDG!=null && ocrDictionaryService.isValueExists(planNameDG.getId(), picture.getPlanname(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getPlanname());
dictionary.setValue(picture.getPlanid());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(planNameDG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//3.拜访客户类型
if(picture.getField2()!=null) {
OcrDictionaryGroup field2DG = ocrDictionaryService.queryGroupByField("izcustomtype");
if (field2DG!=null && ocrDictionaryService.isValueExists(field2DG.getId(), picture.getField2(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField2());
dictionary.setValue(picture.getField2());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field2DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//4.拜访客户名称
if(picture.getField3()!=null) {
OcrDictionaryGroup field3DG = ocrDictionaryService.queryGroupByField("izcustomname");
if (field3DG!=null && ocrDictionaryService.isValueExists(field3DG.getId(), picture.getField3(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField3());
dictionary.setValue(picture.getField3());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field3DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//5.任务来源
if(picture.getField4()!=null) {
OcrDictionaryGroup field4DG = ocrDictionaryService.queryGroupByField("iztaskrrom");
if (field4DG!=null && ocrDictionaryService.isValueExists(field4DG.getId(), picture.getField4(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField4());
dictionary.setValue(picture.getField4());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field4DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//6.厂商
if(picture.getField5()!=null) {
OcrDictionaryGroup field5DG = ocrDictionaryService.queryGroupByField("izfirm");
if (field5DG!=null && ocrDictionaryService.isValueExists(field5DG.getId(), picture.getField5(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField5());
dictionary.setValue(picture.getField5());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field5DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//7.拜访客户级别
if(picture.getField6()!=null) {
OcrDictionaryGroup field6DG = ocrDictionaryService.queryGroupByField("izcustomlevel");
if (field6DG!=null && ocrDictionaryService.isValueExists(field6DG.getId(), picture.getField6(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField6());
dictionary.setValue(picture.getField6());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field6DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//8.拜访项目类别
if(picture.getField17()!=null) {
OcrDictionaryGroup field17DG = ocrDictionaryService.queryGroupByField("izprojecttype");
if (field17DG!=null && ocrDictionaryService.isValueExists(field17DG.getId(), picture.getField17(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField17());
dictionary.setValue(picture.getField17());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field17DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//9.任务状态
if(picture.getTaskstatus()!=null) {
OcrDictionaryGroup taskStatusDG = ocrDictionaryService.queryGroupByField("iztaskstatus");
if (taskStatusDG!=null && ocrDictionaryService.isValueExists(taskStatusDG.getId(), picture.getTaskstatus(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getTaskstatus());
dictionary.setValue(picture.getTaskstatus());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(taskStatusDG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//10.产品名称
if(picture.getField9()!=null) {
OcrDictionaryGroup field9DG = ocrDictionaryService.queryGroupByField("izproductname");
if (field9DG!=null && ocrDictionaryService.isValueExists(field9DG.getId(), picture.getField9(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getField9());
dictionary.setValue(picture.getField9());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(field9DG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//11.地区(城市信息)
if(picture.getReleasearea()!=null) {
OcrDictionaryGroup releaseAreaDG = ocrDictionaryService.queryGroupByField("izvisitcity");
if (releaseAreaDG!=null && ocrDictionaryService.isValueExists(releaseAreaDG.getId(), picture.getReleasearea(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getReleasearea());
dictionary.setValue(picture.getReleasearea());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(releaseAreaDG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//12.地区(省信息)
if(picture.getReleaseprovince()!=null) {
OcrDictionaryGroup releaseProvinceDG = ocrDictionaryService.queryGroupByField("izvisitpro");
if (releaseProvinceDG!=null && ocrDictionaryService.isValueExists(releaseProvinceDG.getId(), picture.getReleaseprovince(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getReleaseprovince());
dictionary.setValue(picture.getReleaseprovince());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(releaseProvinceDG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
//13.项目信息
if(picture.getProjectidname()!=null) {
OcrDictionaryGroup projectNameDG = ocrDictionaryService.queryGroupByField("project");
if (projectNameDG!=null && ocrDictionaryService.isValueExists(projectNameDG.getId(), picture.getProjectidname(), picture.getTenantId())) {
OcrDictionary dictionary = new OcrDictionary();
dictionary.setLable(picture.getProjectidname());
dictionary.setValue(picture.getProjectidname());
dictionary.setTenantId(picture.getTenantId());
dictionary.setGroupId(projectNameDG.getId());
try {
ocrDictionaryService.save(dictionary);
}catch (Exception e){
}
}
}
}
return true;
}
}

@ -0,0 +1,40 @@
package cn.jyjz.xiaoyao.ocr.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
/**
*
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/16 18:37
*/
public class DownloadImgUtil {
private static Logger logger = LoggerFactory.getLogger(DownloadImgUtil.class);
/**
*
* @param imageUrl
* @param destinationFile
*/
public static void downloadImage(String imageUrl, String destinationFile) {
try (InputStream in = new URL(imageUrl).openStream();
FileOutputStream out = new FileOutputStream(destinationFile)) {
byte[] buffer = new byte[4096];
int n;
while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n);
}
} catch (Exception e) {
logger.error(e.getMessage());
}
}
}

@ -0,0 +1,27 @@
package cn.jyjz.xiaoyao.ocr.util;
/**
*
*/
public class PageRequest {
/**
*
*/
private int pageNum;
/**
*
*/
private int pageSize;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}

@ -1,6 +1,6 @@
package cn.jyjz.xiaoyao.ocr.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -8,7 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;
@Data
@Builder
@ -17,31 +17,16 @@ import java.sql.Date;
@Schema(name = "字段信息", title = "字段信息")
public class OcrFieldVo implements Serializable {
private static final long serialVersionUID = 8088861709460050761L;
@Schema(description = "主键")
private Long id;
@Schema(description = "字段名称")
@Schema(description = "字段名称",required = true)
private String name;
@Schema(description = "字段类型(终审:0工单1、一审二审:2、审核填报:3")
@Schema(description = "字段类型(终审:0工单1、一审二审:2、审核填报:3",required = true)
private Integer reviewType;
@Schema(description = "字段描述")
@Schema(description = "字段描述",required = true)
private String fieldDesc;
@Schema(description = "创建人")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
@Schema(description = "修改人")
private String updateBy;
@Schema(description = "修改时间")
private Date updateTime;
@Schema(description = "是否删除0未删除1:已删除")
private Integer del;
@Schema(description = "是否必选",required = true)
private Integer isrequired;
}

@ -1,7 +1,5 @@
package cn.jyjz.xiaoyao.ocr.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -9,7 +7,6 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;
@Data
@Builder
@ -18,34 +15,16 @@ import java.sql.Date;
@Schema(name = "用户-展示字段", title = "用户-展示字段")
public class OcrUserFieldVo implements Serializable {
private static final long serialVersionUID = 8088861709460050761L;
@Schema(description = "主键")
private Long id;
@Schema(description = "用户ID")
@Schema(description = "用户ID",required = true)
private long userId;
@Schema(description = "评审类型(终审:0工单1、一审二审:2、审核填报:3")
@Schema(description = "评审类型(终审:0工单1、一审二审:2、审核填报:3",required = true)
private Integer reviewType;
@Schema(description = "展示字段字符串")
@Schema(description = "展示字段字符串",required = true)
private String userField;
@Schema(description = "创建人")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
@Schema(description = "修改人")
private String updateBy;
@Schema(description = "修改时间")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@Schema(description = "是否删除0未删除1:已删除")
private Integer del;
}

@ -48,6 +48,8 @@
PROCESSINSTANCEID AS processinstanceid,
CREATEUSERNAME AS createusername,
TENANTID AS tenantid,
TASKNAME AS TASKNAME,
NODENAME AS NODENAME,
PACKAGEID as packageid
</sql>
<sql id="Base_Column_List_union">
@ -111,9 +113,15 @@
<if test="tenantid != null"> and TENANTID ${tenantid.dataOp} ${tenantid.likestar}#{tenantid.value}${tenantid.likeend}</if>
<if test="packageid != null"> and PACKAGEID ${packageid.dataOp} ${packageid.likestar}#{packageid.value}${packageid.likeend}</if>
<if test="processdefinitionid != null"> and PROCESSDEFINITIONID ${processdefinitionid.dataOp} ${processdefinitionid.likestar}#{processdefinitionid.value}${processdefinitionid.likeend}</if>
<if test="taskid != null"> and TASKID ${taskid.dataOp} ${taskid.likestar}#{taskid.value}${taskid.likeend}</if>
<if test="fromprojectid != null"> and FROMPROJECTID ${fromprojectid.dataOp} ${fromprojectid.likestar}#{fromprojectid.value}${fromprojectid.likeend}</if>
<if test="fromuserid != null"> and FROMUSERID ${fromuserid.dataOp} ${fromuserid.likestar}#{fromuserid.value}${fromuserid.likeend}</if>
<if test="fromplanid != null"> and FROMPLANID ${fromplanid.dataOp} ${fromplanid.likestar}#{fromplanid.value}${fromplanid.likeend}</if>
<if test="iztrueorfalse != null"> and IZTRUEORFALSE ${iztrueorfalse.dataOp} ${iztrueorfalse.likestar}#{iztrueorfalse.value}${iztrueorfalse.likeend}</if>
<if test="taskname != null"> and TASKNAME ${taskname.dataOp} ${taskname.likestar}#{taskname.value}${taskname.likeend}</if>
<if test="listFlowCcUserid != null">
and ID in
<foreach collection="listFlowCcUserid" item="item" index="index" open="(" separator="," close=")" >
<foreach collection="listFlowCcUserid.value" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</if>
@ -122,6 +130,12 @@
select uapo.FORMID from OA_USERAPPROVE_T uapo where uapo.USERID = #{approveUserid.value}
)
</if>
<if test="formid != null">
or ID in
<foreach collection="formid.value" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</if>
</trim>
</where>
</sql>
@ -167,4 +181,13 @@
from OA_SUMMARY_VIEW
<include refid="Base_Where_union"></include>
</select>
<select id="repetitionTask" resultType="java.util.Map">
SELECT REPETITION,count(1) count
FROM
OA_SUMMARY_VIEW
GROUP BY REPETITION
HAVING count(1)>1
</select>
</mapper>

@ -6,6 +6,7 @@
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="review_type" property="reviewType" jdbcType="INTEGER"/>
<result column="field_desc" property="fieldDesc" jdbcType="VARCHAR"/>
<result column="isrequired" property="isrequired" jdbcType="INTEGER"/>
<result column="create_by" property="createBy" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_by" property="updateBy" jdbcType="VARCHAR"/>

@ -28,4 +28,59 @@
id, titile, msg_content AS msgContent, sender, msg_category AS msgCategory, receive_user_type AS receiveUserType, bus_json AS busJson, create_time AS createTime, create_by AS createBy, update_time AS updateTime, update_by AS updateBy, receive_user_ids AS receiveUserIds, open_type AS openType, open_page AS openPage, send_status AS sendStatus, send_time AS sendTime, cancel_time AS cancelTime
</sql>
<select id="selectPage" resultType="map">
<if test='msgCategory == "2" '>
SELECT
m.id as id,
m.titile as titile,
"系统管理员" AS userName,
m.bus_json AS busJson,
r.read_flag as readFlag,
m.send_time AS sendTime
FROM
ocr_msg m LEFT JOIN ocr_msg_read r ON m.id = r.msg_id
WHERE
m.msg_category = '2'
AND m.receive_user_type IN(1,2)
AND m.send_status = '1'
AND FIND_IN_SET( '${userid}', m.receive_user_ids )
</if>
<if test='msgCategory == "1" '>
SELECT
m.id as id,
m.titile as titile,
u.USERNAME as userName,
m.bus_json as busJson,
r.read_flag as readFlag,
m.send_time as sendTime
FROM
ocr_msg m LEFT JOIN s_user_t u ON m.sender=u.ID
LEFT JOIN ocr_msg_read r ON m.id = r.msg_id
WHERE
m.msg_category = '1'
AND
m.receive_user_type IN(1,2)
AND m.send_status = '1'
AND FIND_IN_SET( '${userid}', m.receive_user_ids )
</if>
</select>
<select id="selectone" resultType="map">
SELECT
titile,
msg_content AS msgContent,
'系统管理员' AS userNcame,
sender,
msg_category AS msgCategory,
send_time AS sendTime
FROM
ocr_msg
WHERE
id = #{id}
</select>
</mapper>

@ -0,0 +1,43 @@
<?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="cn.jyjz.xiaoyao.ocr.dataDao.OcrSearchHistoryMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.jyjz.xiaoyao.ocr.dataobject.OcrSearchHistory">
<id column="id" property="id" />
<result column="historyname" property="historyname" />
<result column="userid" property="userid" />
<result column="createdate" property="createdate" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, historyname, userid, createdate
</sql>
<select id="selectsearch" resultType="map">
SELECT
CONCAT_WS("-",r.FROMTASKNAME,t.planName) as name
FROM
ocr_taskchild_picture r
LEFT JOIN ocr_picture t ON r.PICTUREID = t.ID
WHERE
r.STATES='1'
and
r.ASSIGNEE=#{assignee}
AND
r.FROMTASKID like "%"#{search}"%"
OR r.FROMTASKNAME like "%"#{search}"%"
OR t.field1 like "%"#{search}"%"
ORDER BY r.CREATEDATE DESC
LIMIT 3
</select>
</mapper>

@ -1,4 +1,3 @@
server:
compression:
enabled: true
@ -95,9 +94,39 @@ spring:
session:
store-type: none
cache:
type: ehcache
ehcache:
config: classpath:/myehcache.xml
type: ehcache
# type: redis
# redis:
# #Redis服务器地址
# #host: 192.168.0.198
# host: 127.0.0.1
# # Redis服务器连接端口
# port: 6379
# # 链接超时时间 单位 ms毫秒
# timeout: 20000
# # cluster:
# # nodes:
# # 192.168.0.191:7001,
# # 192.168.0.192:7001,
# # 192.168.0.193:7001,
# # 192.168.0.201:7001,
# # 192.168.0.202:7001,
# # 192.168.0.203:7001
# # #跨集群执行命令时要遵循的最大重定向数量
# # max-redirects: 18
# #lettuce:
# jedis:
# pool:
# #连接池最大连接数(使用负值表示没有限制) 默认 8
# max-active: 20
# #连接池中的最大空闲连接 默认 8
# max-idle: 10
# #连接池中的最小空闲连接 默认 0
# min-idle: 10
# #连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
# max-wait: 10000
flowable:
modeler:
app:
@ -105,7 +134,7 @@ flowable:
#关闭定时任务JOB
async-executor-activate: false
database-schema-update: false
#
# cache:
# type: redis
# redis:
@ -161,15 +190,15 @@ mybatis-plus:
xiaoyao:
web:
#上传文件路径
uploadPath: X:/project3/2024_ai_gd/ocr/htmlweb/upload
uploadPath: D:/ideaWork/jeecg/ocrproject/htmlweb/upload
#页面根路径
frontPath: X:/project3/2024_ai_gd/ocr/htmlweb
frontPath: D:/ideaWork/jeecg/ocrproject/htmlweb
#js、css、图片存放路径
staticPath: X:/project3/2024_ai_gd/ocr/htmlweb/static
staticPath: D:/ideaWork/jeecg/ocrproject/htmlweb/static
#页面模版路径
webPath: X:/project3/2024_ai_gd/ocr/htmlweb/web
webPath: D:/ideaWork/jeecg/ocrproject/htmlweb/web
#Lucene索引路径
lucenePath: X:/project3/2024_ai_gd/ocr/htmlweb/lucene/indexDir
lucenePath: D:/ideaWork/jeecg/ocrproject/htmlweb/lucene/indexDir
#是否开启flowable
haveFlowable: true
webconfig:
@ -262,7 +291,7 @@ xiaoyao:
#缓存默认名称
managerName: cacheMgrGps
#有效时长(秒)目前登录用户、session使用
tokenExpire: 18000
tokenExpire: 360000
#缓存名称分隔符
cacheNamePrix: "_"
#存放缓存刷新时间是,使用临时缓存名称前缀
@ -273,3 +302,13 @@ springfox:
enabled: true
# 是否启用swagger,postman调试
debugger_tools: true
#无量云api配置信息
ocr:
api:
wly:
interface-domain: https://b-dr.prevailcloud.com #接口域名
accessKey: 7390F0221A1A73D8E13F8C8BB96F33B0 #秘钥
accessCode: ED6F7B39768AF95E87AEA8ACCCC71A6F #秘钥编码
connectTimeout: 5000 #请求超时时间 毫秒
readTimeout: 60000 #接收超时时间 毫秒

@ -1,5 +1,7 @@
server:
tomcat:
connection-timeout: 3600ms #设置超时时间
compression:
enabled: true
min-response-size: 10KB
@ -104,7 +106,7 @@ flowable:
deployment-api-url: http://127.0.0.1:8311/jeecg-boot/flowable-task/app-api
#关闭定时任务JOB
async-executor-activate: false
database-schema-update: true
database-schema-update: false
#
# cache:
# type: redis
@ -262,7 +264,7 @@ xiaoyao:
#缓存默认名称
managerName: cacheMgrOcr
#有效时长(秒)目前登录用户、session使用
tokenExpire: 18000
tokenExpire: 360000
#缓存名称分隔符
cacheNamePrix: "_"
#存放缓存刷新时间是,使用临时缓存名称前缀
@ -273,3 +275,15 @@ springfox:
enabled: true
# 是否启用swagger,postman调试
debugger_tools: true
#无量云api配置信息
ocr:
api:
wly:
interface-domain: https://b-dr.prevailcloud.com #接口域名
accessKey: 7390F0221A1A73D8E13F8C8BB96F33B0 #秘钥
accessCode: ED6F7B39768AF95E87AEA8ACCCC71A6F #秘钥编码
connectTimeout: 5000 #请求超时时间 毫秒
readTimeout: 60000 #接收超时时间 毫秒

Loading…
Cancel
Save