chen 2 лет назад
Родитель
Сommit
21b3955ecb

+ 3 - 0
src/main/java/org/springblade/app/AppApiController.java

@@ -1,5 +1,6 @@
 package org.springblade.app;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -192,8 +193,10 @@ public class AppApiController {
 		}
 		if("0".equals(isNg)){
 			productEntity.setStatus(2);
+			productEntity.setAiStatus(3);
 			productService.updateById(productEntity);
 		}else{
+			productEntity.setAiStatus(1);
 			productEntity.setStatus(1);
 			productService.updateById(productEntity);
 			ProductReworkEntity productReworkEntity = new ProductReworkEntity();

+ 8 - 1
src/main/java/org/springblade/applet/ProductApiController.java

@@ -13,6 +13,7 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.modules.pl.client.entity.ClientEntity;
 import org.springblade.modules.pl.client.service.IClientService;
 import org.springblade.modules.pl.product.entity.ProductEntity;
@@ -61,6 +62,10 @@ public class ProductApiController {
 		BladeUser user = AuthUtil.getUser();
 		product.put("factoryId",user.getFactoryId());
 		QueryWrapper<ProductEntity> wrapper = Condition.getQueryWrapper(product,ProductEntity.class);
+		if("1".equals(product.get("isNg_ignore"))){
+			wrapper.eq("status", 2);
+			wrapper.in("ai_status", Func.toLongList("0,1"));
+		}
 		IPage<ProductEntity> pages = productService.page(Condition.getPage(query),wrapper);
 		return R.data(ProductWrapper.build().pageVO(pages));
 	}
@@ -156,14 +161,16 @@ public class ProductApiController {
 		if(productEntity==null){
 			return R.fail("NG的产品不存在");
 		}
-		if(productEntity.getStatus()!=-1){
+		if(productEntity.getStatus()!=2 && (productEntity.getAiStatus()==0 || productEntity.getAiStatus()==1)){
 			return R.fail("当前产品状态无法操作");
 		}
 		BladeUser user = AuthUtil.getUser();
 		if("0".equals(isNg)){
 			productEntity.setStatus(2);
+			productEntity.setAiStatus(3);
 			productService.updateById(productEntity);
 		}else{
+			productEntity.setAiStatus(1);
 			productEntity.setStatus(1);
 			productService.updateById(productEntity);
 			ProductReworkEntity productReworkEntity = new ProductReworkEntity();

+ 5 - 1
src/main/java/org/springblade/applet/ProductReworkApiController.java

@@ -199,9 +199,13 @@ public class ProductReworkApiController {
 		productRework.setAuditPersonName(user.getNickName());
 		productReworkService.updateById(productRework);
 		if(productRework.getStatus() ==3 ){
+			ProductEntity product = productService.getById(detail.getProductId());
 			ProductEntity productEntity = new ProductEntity();
-			productEntity.setId(detail.getProductId());
+			productEntity.setId(product.getId());
 			productEntity.setStatus(2);
+			if(product.getAiStatus()==1){
+				productEntity.setAiStatus(3);
+			}
 			productService.updateById(productEntity);
 		}else if(productRework.getStatus() ==-1 ){
 			ProductEntity productEntity = new ProductEntity();

+ 5 - 0
src/main/java/org/springblade/modules/pl/product/entity/ProductEntity.java

@@ -150,5 +150,10 @@ public class ProductEntity extends TenantEntity {
 	@ApiModelProperty(value = "新二维码编号")
 	@TableField(exist = false)
 	private String newQrCode;
+	/**
+	 * ai识别状态 -1无需识别 0未识别 1ng 2ok 3人工ok
+	 */
+	@ApiModelProperty(value = "ai识别状态 -1无需识别 0未识别 1ng 2ok 3人工ok")
+	private Integer aiStatus;
 
 }

+ 25 - 18
src/main/java/org/springblade/modules/pl/product/service/impl/ProductImageRecordServiceImpl.java

@@ -92,8 +92,8 @@ public class ProductImageRecordServiceImpl extends BaseServiceImpl<ProductImageR
 	@Override
 	public ProductImageRecordVO submit(String productCode, EquipmentEntity equipmentEntity, ProductImageRecordEntity productImageRecord, BladeFile bladeFile, FactoryEntity factory) {
 		ProductEntity productEntity = null;
-		//-1:未检出 0:OK 1:NG
-		int isNg = -1;
+		//ai识别状态 -1无需识别 0未识别 1ng 2ok 3人工ok
+		int aiStatus = -1;
 		productImageRecord.setEquipmentId(equipmentEntity.getId());
 		productImageRecord.setEqSn(equipmentEntity.getEqSn());
 		if(productCode.length()<25){
@@ -109,9 +109,13 @@ public class ProductImageRecordServiceImpl extends BaseServiceImpl<ProductImageR
 				productEntity = productService.getOne(Wrappers.<ProductEntity>lambdaQuery().eq(ProductEntity::getQrCode,productCode).eq(ProductEntity::getFactoryId,equipmentEntity.getFactoryId()),false);
 				if(productEntity!=null && productEntity.getStatus()!=2){
 					productImageRecord.setStatus(2);
-					productImageRecord.setMessage("产品"+(productEntity.getStatus()==1?"正在维修中,":(productEntity.getStatus()==-1?"NG待处理,":(productEntity.getStatus()==0?"已作废,":"已入库,")))+"无法下线");
+					productImageRecord.setMessage("产品"+(productEntity.getStatus()==1?"正在维修中,":(productEntity.getStatus()==0?"已作废,":"已入库,"))+"无法下线");
+				}else if(productEntity!=null && productEntity.getAiStatus()!=null && (productEntity.getAiStatus()==0 || productEntity.getAiStatus()==1) ){
+					productImageRecord.setStatus(2);
+					productImageRecord.setMessage("产品"+(productEntity.getAiStatus()==0 ?"AI未识别-待处理,":(productEntity.getAiStatus()==1?"NG待处理,":""))+"无法下线");
 				}else{
 					if(productModel.getIsAi()==1){
+						aiStatus = 0;
 						try {
 //						Map<String,Object> param = new HashMap<>();
 //						param.put("action","detect");
@@ -123,42 +127,43 @@ public class ProductImageRecordServiceImpl extends BaseServiceImpl<ProductImageR
 							param.put("path",bladeFile.getLink());
 
 //							String result = HttpUtil.postJson("http://127.0.0.1:3300/ws_init",param.toJSONString());
-						String result = HttpUtil.postJson(aiUrl+"/ws_init",param.toJSONString());
+							String result = HttpUtil.postJson(aiUrl+"/ws_init",param.toJSONString());
 							JSONObject jsonObject = JSONObject.parseObject(result);
 							if(jsonObject.get("status")!=null && jsonObject.getInteger("status")==200){
-								isNg = "OK".equals(jsonObject.get("result"))?0:1;
 								String filePath = jsonObject.getString("path");
 								File file = new File(filePath);
 								if(file.exists()){
+									aiStatus = "OK".equals(jsonObject.get("result"))?2:1;
 									String fileName= "upload/"+(factory==null?"000000":factory.getCode())+"/" + DateUtil.today() + "/"+productCode+"/" + StringUtil.randomUUID() + "." + FileUtil.getFileExtension(file.getName());
 									BladeFile aiFile = ossBuilder.template(equipmentEntity.getTenantId(),"minio").putFile(fileName, Files.newInputStream(Paths.get(filePath)));
 									productImageRecord.setProductAiImage(aiFile.getLink());
 									file.delete();
-								}else{
+								}
+								else{
 									productImageRecord.setStatus(2);
-									productImageRecord.setMessage("AI识别接口调用异常-文件不存在");
+									productImageRecord.setMessage("拍照成功,AI识别接口调用异常-文件不存在");
 								}
 							}else{
 								productImageRecord.setStatus(2);
-								productImageRecord.setMessage("AI识别接口调用失败"+jsonObject.get("result"));
+								productImageRecord.setMessage("拍照成功,AI识别接口调用失败"+jsonObject.get("result"));
 							}
 						}catch (Exception e){
 							e.printStackTrace();
 							log.error("AI识别接口调用异常",e);
 							productImageRecord.setStatus(2);
-							productImageRecord.setMessage("AI识别接口调用异常");
+							productImageRecord.setMessage("拍照成功,AI识别接口调用异常");
 						}
 					}
 				}
 
-				if(productImageRecord.getStatus()==2){
+				if(productImageRecord.getStatus()==2 && aiStatus==-1){
 					this.save(productImageRecord);
 					ProductImageRecordVO productImageRecordVO = ProductImageRecordWrapper.build().entityVO(productImageRecord);
-					productImageRecordVO.setIsNg(isNg);
+					productImageRecordVO.setAiStatus(aiStatus);
 //					productImageRecordVO.setProductEntity(productEntity);
 					return productImageRecordVO;
 				}
-				if(isNg==1){
+				if(aiStatus==0 ||  aiStatus==1){
 					productImageRecord.setStatus(2);
 				}
 
@@ -173,27 +178,29 @@ public class ProductImageRecordServiceImpl extends BaseServiceImpl<ProductImageR
 					productEntity.setBackImg(productImageRecord.getProductImage());
 					productEntity.setBackAiImg(productImageRecord.getProductAiImage());
 					productEntity.setQrCode(productCode);
-					productEntity.setStatus(isNg==1?-1:2);
+					productEntity.setStatus(2);
+					productEntity.setAiStatus(aiStatus);
 					productService.save(productEntity);
 				}else{
 					if(productEntity.getStatus()==2){
 						productEntity.setFrontImg(productImageRecord.getProductImage());
 						productEntity.setFrontAiImg(productImageRecord.getProductAiImage());
-						productEntity.setStatus(isNg==1?-1:2);
+						productEntity.setStatus(2);
+						productEntity.setAiStatus(aiStatus);
 						productService.updateById(productEntity);
 					}
 				}
 				productImageRecord.setProductId(productEntity.getId());
-				if(isNg==-1){
+				if(aiStatus==-1){
 					productImageRecord.setMessage("拍照成功");
-				}else{
-					productImageRecord.setMessage("拍照成功,产品识别"+(isNg==0?"OK":"NG"));
+				}else if(aiStatus==1 || aiStatus==2){
+					productImageRecord.setMessage("拍照成功,产品识别"+(aiStatus==2?"OK":"NG"));
 				}
 			}
 		}
 		this.save(productImageRecord);
 		ProductImageRecordVO productImageRecordVO = ProductImageRecordWrapper.build().entityVO(productImageRecord);
-		productImageRecordVO.setIsNg(isNg);
+		productImageRecordVO.setAiStatus(aiStatus);
 //		productImageRecordVO.setProductEntity(productEntity);
 		return productImageRecordVO;
 	}

+ 1 - 1
src/main/java/org/springblade/modules/pl/product/vo/ProductImageRecordVO.java

@@ -35,5 +35,5 @@ public class ProductImageRecordVO extends ProductImageRecordEntity {
 
 //	private ProductEntity productEntity;
 
-	private int isNg;
+	private int aiStatus;
 }

+ 9 - 0
src/main/java/org/springblade/modules/pl/productBatch/service/impl/ProductBatchServiceImpl.java

@@ -98,6 +98,9 @@ public class ProductBatchServiceImpl extends BaseServiceImpl<ProductBatchMapper,
 					if(product.getStatus()!=2){
 						return R.fail("产品二维码:"+productEntity.getQrCode()+"无法入库,请更换产品");
 					}
+					if(product.getAiStatus()==0||product.getAiStatus()==1){
+						return R.fail("产品二维码:"+productEntity.getQrCode()+"AI识别未处理,无法入库,请更换产品");
+					}
 					if(!Objects.equals(product.getProductModelId(), productBatch.getProductModelId())){
 						return R.fail("产品二维码:"+productEntity.getQrCode()+"与当前批次的型号不符,请更换产品");
 					}
@@ -111,6 +114,12 @@ public class ProductBatchServiceImpl extends BaseServiceImpl<ProductBatchMapper,
 						if(product.getStatus()!=2){
 							return R.fail("产品二维码:"+productEntity.getQrCode()+"无法入库,请更换产品");
 						}
+						if(product.getAiStatus()==0||product.getAiStatus()==1){
+							return R.fail("产品二维码:"+productEntity.getQrCode()+"AI识别未处理,无法入库,请更换产品");
+						}
+						if(!Objects.equals(product.getProductModelId(), productBatch.getProductModelId())){
+							return R.fail("产品二维码:"+productEntity.getQrCode()+"与当前批次的型号不符,请更换产品");
+						}
 						productEntity.setId(product.getId());
 					}
 					productEntity.setFactoryId(productModel.getFactoryId());