ocr识别
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
package com.czg.controller.admin;
|
||||
|
||||
import com.czg.annotation.SaStaffCheckPermission;
|
||||
import com.czg.log.annotation.OperationLog;
|
||||
import com.czg.product.dto.ConsStockFlowDTO;
|
||||
import com.czg.product.param.ConsCheckStockParam;
|
||||
@@ -41,10 +40,21 @@ public class ConsStockFlowController {
|
||||
* @throws IOException
|
||||
*/
|
||||
@PostMapping("/ocr")
|
||||
public CzgResult<ConsInOutStockHeadParam> ocr(@RequestParam MultipartFile file) throws IOException {
|
||||
public CzgResult<Integer> ocr(@RequestParam MultipartFile file) throws IOException {
|
||||
return CzgResult.success(consStockFlowService.ocr(file.getOriginalFilename(), file.getInputStream()));
|
||||
}
|
||||
|
||||
/**
|
||||
* ocr识别结果
|
||||
* @param id ocrId
|
||||
* @return 识别结果
|
||||
*/
|
||||
@GetMapping("/ocrResult")
|
||||
public CzgResult<ConsInOutStockHeadParam> ocrResult(@RequestParam Long id) {
|
||||
return CzgResult.success(consStockFlowService.ocrDetail(id));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 耗材入库
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
package com.czg.market.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.experimental.Accessors;
|
||||
import java.io.Serial;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* ocr识别结果 实体类。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-11-26
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class MkOcrDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 响应内容
|
||||
*/
|
||||
private String resp;
|
||||
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private Integer shopId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.czg.market.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* ocr识别结果 实体类。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-11-26
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("mk_ocr")
|
||||
public class MkOcr implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 响应内容
|
||||
*/
|
||||
private String resp;
|
||||
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private Long shopId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.market.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.market.entity.MkOcr;
|
||||
|
||||
/**
|
||||
* ocr识别结果 服务层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-11-26
|
||||
*/
|
||||
public interface MkOcrService extends IService<MkOcr> {
|
||||
|
||||
}
|
||||
@@ -78,5 +78,7 @@ public interface ConsStockFlowService extends IService<ConsStockFlow> {
|
||||
*/
|
||||
void saveFlow(ConsStockFlow entity);
|
||||
|
||||
ConsInOutStockHeadParam ocr(String originalFilename, InputStream inputStream);
|
||||
Integer ocr(String originalFilename, InputStream inputStream);
|
||||
|
||||
ConsInOutStockHeadParam ocrDetail(Long id);
|
||||
}
|
||||
|
||||
@@ -29,13 +29,13 @@ public class Main {
|
||||
// orSqlTest();
|
||||
|
||||
|
||||
String packageName = "system";
|
||||
// String packageName = "system";
|
||||
// String packageName = "account";
|
||||
// String packageName = "product";
|
||||
// String packageName = "market";
|
||||
String packageName = "market";
|
||||
// tableName 指定需要生成的表
|
||||
String tableName = "sys_devices";
|
||||
String author = "ww";
|
||||
String tableName = "mk_ocr";
|
||||
String author = "zs";
|
||||
//是否生成DTO实体 默认生成
|
||||
boolean isGenerateDto = true;
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.market.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.market.entity.MkOcr;
|
||||
|
||||
/**
|
||||
* ocr识别结果 映射层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-11-26
|
||||
*/
|
||||
public interface MkOcrMapper extends BaseMapper<MkOcr> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.czg.service.market.service.impl;
|
||||
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.market.entity.MkOcr;
|
||||
import com.czg.market.service.MkOcrService;
|
||||
import com.czg.service.market.mapper.MkOcrMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* ocr识别结果 服务层实现。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-11-26
|
||||
*/
|
||||
@Service
|
||||
public class MkOcrServiceImpl extends ServiceImpl<MkOcrMapper, MkOcr> implements MkOcrService{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.market.mapper.MkOcrMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -1729,9 +1729,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
|
||||
if (orderDetail == null) {
|
||||
log.warn("订单详情不存在");
|
||||
}
|
||||
if (orderDetail.getSubStatus() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!orderDetail.getSubStatus().equals(TableValueConstant.OrderDetail.SubStatus.READY_TO_SERVE.getCode())
|
||||
&& !orderDetail.getSubStatus().equals(TableValueConstant.OrderDetail.SubStatus.SENT_OUT.getCode())) {
|
||||
if (!TableValueConstant.OrderDetail.SubStatus.READY_TO_SERVE.getCode().equals(orderDetail.getSubStatus())
|
||||
&& !TableValueConstant.OrderDetail.SubStatus.SENT_OUT.getCode().equals(orderDetail.getSubStatus())) {
|
||||
log.warn("订单详情状态不正确");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.market.entity.MkOcr;
|
||||
import com.czg.market.service.MkOcrService;
|
||||
import com.czg.product.dto.ConsStockFlowDTO;
|
||||
import com.czg.product.dto.SaleOrderDTO;
|
||||
import com.czg.product.entity.ConsInfo;
|
||||
@@ -57,6 +59,8 @@ public class ConsStockFlowServiceImpl extends ServiceImpl<ConsStockFlowMapper, C
|
||||
private final ProductMapper productMapper;
|
||||
@Resource
|
||||
private WxAccountUtil wxAccountUtil;
|
||||
@Resource
|
||||
private MkOcrService ocrService;
|
||||
|
||||
private QueryWrapper buildQueryWrapper(ConsStockFlowDTO param) {
|
||||
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
|
||||
@@ -261,7 +265,11 @@ public class ConsStockFlowServiceImpl extends ServiceImpl<ConsStockFlowMapper, C
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConsInOutStockHeadParam ocr(String originalFilename, InputStream inputStream) {
|
||||
public Integer ocr(String originalFilename, InputStream inputStream) {
|
||||
MkOcr mkOcr = new MkOcr();
|
||||
mkOcr.setShopId(StpKit.USER.getShopId());
|
||||
ocrService.save(mkOcr);
|
||||
ThreadUtil.execAsync(() -> {
|
||||
String infoStr = AliOcrUtil.appCall(inputStream, originalFilename);
|
||||
SaleOrderDTO saleOrderDTO = JSONObject.parseObject(infoStr, SaleOrderDTO.class);
|
||||
|
||||
@@ -295,6 +303,20 @@ public class ConsStockFlowServiceImpl extends ServiceImpl<ConsStockFlowMapper, C
|
||||
.setBodyList(bodyList)
|
||||
.setUnInCons(unInCons)
|
||||
.setOcrSaleOrder(saleOrderDTO);
|
||||
return headParam;
|
||||
|
||||
mkOcr.setResp(JSON.toJSONString(headParam));
|
||||
ocrService.updateById(mkOcr);
|
||||
});
|
||||
|
||||
return mkOcr.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConsInOutStockHeadParam ocrDetail(Long id) {
|
||||
MkOcr mkOcr = ocrService.getOne(new QueryWrapper().eq(MkOcr::getShopId, StpKit.USER.getShopId()).eq(MkOcr::getId, id));
|
||||
if (StrUtil.isNotBlank(mkOcr.getResp())) {
|
||||
return JSONObject.parseObject(mkOcr.getResp(), ConsInOutStockHeadParam.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user