Explorar o código

Merge remote-tracking branch 'origin/feature/1.0.0' into feature/1.0.0

v_KaixiangGuo %!s(int64=4) %!d(string=hai) anos
pai
achega
76293dcdf5
Modificáronse 16 ficheiros con 352 adicións e 99 borrados
  1. 62 0
      abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/QrBoxMappingProperty.java
  2. 25 3
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/QrBoxCodeUnityController.java
  3. 9 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/QrBoxMappingMapper.java
  4. 42 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/PrintingDetailVO.java
  5. 3 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/GenerateBarCodeReq.java
  6. 24 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/PrintingDetailReq.java
  7. 3 2
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/QrBoxCodeUploadReq.java
  8. 21 42
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListQrBoxCodeMappingRes.java
  9. 45 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/PrintingDetailRes.java
  10. 16 28
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/mq/GenerateCodeConsumer.java
  11. 10 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/QrBoxMappingService.java
  12. 19 8
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/MaterialServiceImpl.java
  13. 54 11
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrBoxMappingServiceImpl.java
  14. 1 1
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java
  15. 3 3
      abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseMaterialMapper.xml
  16. 15 0
      abi-cloud-qr-platform-server/src/main/resources/dao/mapper/QrBoxMappingMapper.xml

+ 62 - 0
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/QrBoxMappingProperty.java

@@ -0,0 +1,62 @@
+package com.abi.task.common.excel.preperties;
+
+import com.abi.task.common.excel.common.AbstractExcelProperty;
+import com.abi.task.common.excel.common.ExcelHeadAlias;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author: fangxinjian
+ * @date: 2021/05/28 14:28
+ * @description: 箱码合一导出模板参数
+ */
+@Data
+public class QrBoxMappingProperty implements AbstractExcelProperty {
+
+    @ExcelHeadAlias(value = "id")
+    private Long id;
+
+    @ExcelHeadAlias(value = "条码序号")
+    private String boxCode;
+
+    @ExcelHeadAlias(value = "起始序号")
+    private Long indexBegin;
+
+    @ExcelHeadAlias(value = "结束序号")
+    private Long indexEnd;
+
+    @ExcelHeadAlias(value = "条数")
+    private Long qrCodeCount;
+
+    @ExcelHeadAlias(value = "项目号")
+    private String projectNo;
+
+    @ExcelHeadAlias(value = "版号")
+    private String boardNo;
+
+    @ExcelHeadAlias(value = "描述")
+    private String remark;
+
+    @ExcelHeadAlias(value = "创建人")
+    private String createUserName;
+
+    @ExcelHeadAlias(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ExcelHeadAlias(value = "激活时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime activeTime;
+
+    @ExcelHeadAlias(value = "激活人id")
+    private Long activeUserId;
+
+    @ExcelHeadAlias(value = "激活人姓名")
+    private String activeUserName;
+
+    @ExcelHeadAlias(value = "激活状态")
+    private Integer activeStatus;
+
+}

+ 25 - 3
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/QrBoxCodeUnityController.java

@@ -3,22 +3,29 @@ package com.abi.qms.platform.controller.console;
 import com.abi.qms.platform.dto.req.ActiveBoxCodeReq;
 import com.abi.qms.platform.dto.req.GenerateBarCodeReq;
 import com.abi.qms.platform.dto.req.ListQrBoxCodeMappingReq;
+import com.abi.qms.platform.dto.req.PrintingDetailReq;
 import com.abi.qms.platform.dto.res.ListQrBoxCodeMappingRes;
+import com.abi.qms.platform.dto.res.PrintingDetailRes;
 import com.abi.qms.platform.dto.res.QrBoxCodeUploadRes;
 import com.abi.qms.platform.service.QrBoxMappingService;
 import com.abi.task.common.api.base.BaseResponse;
+import com.abi.task.common.excel.ExcelInputFactory;
+import com.abi.task.common.excel.preperties.QrBoxMappingProperty;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 /**
@@ -43,14 +50,14 @@ public class QrBoxCodeUnityController {
     }
 
     @ApiOperation("箱码合一文件上传")
-    @PostMapping("/uploads")
-    public BaseResponse<QrBoxCodeUploadRes> uploadCodeFiles(HttpServletRequest request) {
+    @PostMapping("/uploads/{packageId}")
+    public BaseResponse<QrBoxCodeUploadRes> uploadCodeFiles(HttpServletRequest request, @PathVariable("packageId") Long packageId) {
 
         //拿到文件
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> map = multipartRequest.getFileMap();
 
-        QrBoxCodeUploadRes res = qrBoxMappingService.uploadCodeFiles(map);
+        QrBoxCodeUploadRes res = qrBoxMappingService.uploadCodeFiles(map, packageId);
 
         return BaseResponse.create(res);
 
@@ -72,5 +79,20 @@ public class QrBoxCodeUnityController {
         return BaseResponse.create();
     }
 
+    @ApiOperation("打印")
+    @GetMapping("/printingDetail")
+    public BaseResponse<PrintingDetailRes> getPrintingDetail(PrintingDetailReq printingDetailReq) {
+
+        PrintingDetailRes res = qrBoxMappingService.getPrintingDetail(printingDetailReq);
+        return BaseResponse.create(res);
+    }
+
+    @ResponseBody
+    @ApiOperation(value = "导出模板")
+    @GetMapping("downloadExcelModel")
+    public void downloadExcelModel(HttpServletResponse response) throws Exception {
+        ExcelInputFactory.downloadExcelModel("箱码合一", response, QrBoxMappingProperty.class);
+    }
+
 
 }

+ 9 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/QrBoxMappingMapper.java

@@ -1,6 +1,7 @@
 package com.abi.qms.platform.dao.mapper;
 
 import com.abi.qms.platform.dao.entity.QrBoxMapping;
+import com.abi.qms.platform.dao.vo.result.PrintingDetailVO;
 import com.abi.qms.platform.dao.vo.result.QrBoxMappingVO;
 import com.abi.qms.platform.dto.req.ListQrBoxCodeMappingReq;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -24,4 +25,12 @@ public interface QrBoxMappingMapper extends BaseMapper<QrBoxMapping> {
      * @return
      */
     IPage<QrBoxMappingVO> listQrBoxCodeMapping(IPage page, @Param("req") ListQrBoxCodeMappingReq req);
+
+    /**
+     * 根据码包ID查询箱码合一打印详情
+     *
+     * @param packageId 码包ID
+     * @return
+     */
+    PrintingDetailVO getPrintingDetail(@Param("packageId") Long packageId);
 }

+ 42 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/PrintingDetailVO.java

@@ -0,0 +1,42 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author: fangxinjian
+ * @date: 2021/05/28 12:00
+ * @description:
+ */
+@Data
+@ApiModel
+public class PrintingDetailVO {
+
+    @ApiModelProperty(value = "条码序号")
+    private String boxCode;
+
+    @ApiModelProperty(value = "起始二维码")
+    private String beginQrCode;
+
+    @ApiModelProperty(value = "结束二维码")
+    private String endQrCode;
+
+    @ApiModelProperty(value = "条数")
+    private Long qrCodeCount;
+
+    @ApiModelProperty(value = "生成日期")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "二级包材厂id")
+    private Long factoryCoverLevelTwoId;
+
+    @ApiModelProperty(value = "啤酒厂id")
+    private Long factoryBeerId;
+
+    @ApiModelProperty(value = "sku名称")
+    private String skuName;
+
+}

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/GenerateBarCodeReq.java

@@ -16,6 +16,9 @@ import java.io.Serializable;
 @ApiModel
 public class GenerateBarCodeReq implements Serializable {
 
+    @ApiModelProperty(value = "码包id")
+    private Long packageId;
+
     @ApiModelProperty(value = "起始序号")
     private Long indexBegin;
 

+ 24 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/PrintingDetailReq.java

@@ -0,0 +1,24 @@
+package com.abi.qms.platform.dto.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author: fangxinjian
+ * @date: 2021/05/28 11:13
+ * @description: 箱码合一打印入参
+ */
+@Data
+@ApiModel
+public class PrintingDetailReq implements Serializable {
+
+    @ApiModelProperty(value = "码包id")
+    @NotNull(message = "码包ID不能为空")
+    private Long packageId;
+
+
+}

+ 3 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/QrBoxCodeUploadReq.java

@@ -15,6 +15,7 @@ import java.io.Serializable;
 @ApiModel
 public class QrBoxCodeUploadReq implements Serializable {
 
-    @ApiModelProperty(value = "packCode")
-    private String packCode;
+    @ApiModelProperty(value = "码包id")
+    private Long packageId;
+
 }

+ 21 - 42
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListQrBoxCodeMappingRes.java

@@ -4,7 +4,6 @@ import com.abi.task.common.api.base.PageResp;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -38,72 +37,52 @@ public class ListQrBoxCodeMappingRes extends PageResp implements Serializable {
     @ApiModel(value = "ListQrBoxCodeMappingRes_QrBoxMappingBean")
     public static class QrBoxMappingBean implements Serializable {
 
-        @Schema(name = "id")
+        @ApiModelProperty(value = "id")
         private Long id;
 
-        @Schema(name = "条码序号")
+        @ApiModelProperty(value = "条码序号")
         private String boxCode;
 
-        @Schema(name = "起始序号")
+        @ApiModelProperty(value = "起始序号")
         private Long indexBegin;
 
-        @Schema(name = "结束序号")
+        @ApiModelProperty(value = "结束序号")
         private Long indexEnd;
 
-        @Schema(name = "起始二维码")
-        private String beginQrCode;
-
-        @Schema(name = "结束二维码")
-        private String endQrCode;
-
-        @Schema(name = "条数")
+        @ApiModelProperty(value = "条数")
         private Long qrCodeCount;
 
-        @Schema(name = "激活状态")
-        private Integer activeStatus;
-
-        @Schema(name = "激活时间")
-        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-        private LocalDateTime activeTime;
-
-        @Schema(name = "激活人id")
-        private Long activeUserId;
-
-        @Schema(name = "激活人姓名")
-        private String activeUserName;
-
-        @Schema(name = "码包id")
-        private Long packageId;
-
-        @Schema(name = "项目号")
+        @ApiModelProperty(value = "项目号")
         private String projectNo;
 
-        @Schema(name = "版号")
+        @ApiModelProperty(value = "版号")
         private String boardNo;
 
-        @Schema(name = "备注")
+        @ApiModelProperty(value = "备注")
         private String remark;
 
-        @Schema(name = "创建人姓名")
+        @ApiModelProperty(value = "创建人姓名")
         private String createUserName;
 
-        @Schema(name = "创建时间")
+        @ApiModelProperty(value = "创建时间")
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         private LocalDateTime createTime;
 
-        @Schema(name = "创建人id")
-        private Long createBy;
-
-        @Schema(name = "修改时间")
+        @ApiModelProperty(value = "激活时间")
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-        private LocalDateTime updateTime;
+        private LocalDateTime activeTime;
 
-        @Schema(name = "修改人id")
-        private Long updateBy;
+        @ApiModelProperty(value = "激活人id")
+        private Long activeUserId;
 
-        @Schema(name = "是否删除")
-        private Integer isDelete;
+        @ApiModelProperty(value = "激活人姓名")
+        private String activeUserName;
 
+        @ApiModelProperty(value = "激活状态")
+        private Integer activeStatus;
+
+        @ApiModelProperty(value = "码包id")
+        private Long packageId;
 
     }
 

+ 45 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/PrintingDetailRes.java

@@ -0,0 +1,45 @@
+package com.abi.qms.platform.dto.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author: fangxinjian
+ * @date: 2021/05/28 11:14
+ * @description: 箱码合一打印出参信息
+ */
+@Data
+@ApiModel
+public class PrintingDetailRes implements Serializable {
+
+    @ApiModelProperty(value = "条码序号")
+    private String boxCode;
+
+    @ApiModelProperty(value = "起始二维码")
+    private String beginQrCode;
+
+    @ApiModelProperty(value = "结束二维码")
+    private String endQrCode;
+
+    @ApiModelProperty(value = "条数")
+    private Long qrCodeCount;
+
+    @ApiModelProperty(value = "生成日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "包材厂名称")
+    private String factoryCoverName;
+
+    @ApiModelProperty(value = "啤酒厂名称")
+    private String factoryBeerName;
+
+    @ApiModelProperty(value = "sku名称")
+    private String skuName;
+
+}

+ 16 - 28
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/mq/GenerateCodeConsumer.java

@@ -135,8 +135,11 @@ public class GenerateCodeConsumer {
 	@RabbitHandler
 	@RabbitListener(queues = GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE)
 	public void onMessage(String id, Message message, Channel channel) {
-        String str = JsonUtil.toBean(id, String.class);
-		QrPackageVO qrPackageVO = qrPackageMapper.selectQrPackageDetailById(Long.parseLong(str));
+		//判断rabbit消息是否为空
+		if(StringUtils.isEmpty(id)){
+			throw new BusinessException("队列监听数据为空!");
+		}
+		QrPackageVO qrPackageVO = qrPackageMapper.selectQrPackageDetailById(Long.parseLong(id));
 		try {
 			Object code_qr_index = redisClient.get("code_qr_index");
 			if(ObjectUtils.isEmpty(code_qr_index)){
@@ -147,6 +150,8 @@ public class GenerateCodeConsumer {
 					codeIndex = qrIndex.getIndexCurrent();
 				}
 				redisClient.set("code_qr_index",codeIndex);
+			} else {
+				codeIndex = Long.parseLong(code_qr_index.toString());
 			}
 			// 生成码
 			loopGenerateCode(qrPackageVO);
@@ -244,7 +249,7 @@ public class GenerateCodeConsumer {
 
 			// 创建码文件
 			createCodeFile(qrRepertory,batchNumber,boxCodeFormat);
-
+			qrDataList.clear();
 		}
 
 		//2-保存压缩文件并上传oss
@@ -291,7 +296,6 @@ public class GenerateCodeConsumer {
 		qrIndexMapper.insert(index);
 		redisClient.set("code_qr_index",codeIndex);
 		codeIndex = 0L;
-		qrDataList.clear();
 	}
 
 	/**
@@ -359,22 +363,18 @@ public class GenerateCodeConsumer {
 		while (true) {
 			// 计算还需生成的数量
 			long needGenerateNumber = qrNumber --;
-
 			if (needGenerateNumber <= 0) {
 				log.info("批次号:{},码生成完毕", batchNumber);
 				break;
 			}
-
 			// 计算本次最多生成多少码
 			long currentMaxGenerateNumber = needGenerateNumber <= ONCE_GENERATE_NUMBER ? needGenerateNumber : ONCE_GENERATE_NUMBER;
-
 			// 用Set存放不重复的码
 			HashSet<String> uniqueSet = new HashSet<>();
 			// 生成码要用的参数
 			Map<String, Object> paramMap = new HashMap<>();
 			// 码
 			StringBuilder codeSb = new StringBuilder();
-
 			for (int i = 0; i < currentMaxGenerateNumber; i++) {
 				QrData qrData = new QrData()
 						.setQrRepertoryId(qrRepertoryId)
@@ -401,16 +401,14 @@ public class GenerateCodeConsumer {
 							//查分数量
 							splitNum = qrBoxCodeFormatSplits.getSplitNum();
 						}
-
 						// 非clone列,设置code和url
 						String code = buildUniqueCode(uniqueSet, qrRepertoryColumn, codeSb, paramMap, qrRepertorySerialNumberMap, 0);
-						String url = urlMap.get(qrRepertoryColumnId);
 						if (code == null) {
 							throw new RuntimeException("生成码失败,重复生成码次数超过" + REPEAT_BUILD_CODE_TIMES + "次");
 						}
 						//判断拆分数量是否为空
 						if( splitNum >0){
-							List<char[]> codeStr = a(code, splitNum);
+							List<char[]> codeStr = segmentation(code, splitNum);
 							for (char[] chars:codeStr) {
 								QrInnerData qrInnerData = new QrInnerData();
 								qrInnerData.setCode(String.valueOf(chars));
@@ -451,19 +449,7 @@ public class GenerateCodeConsumer {
 		for (int i = 0; i < qrRepertoryColumnList.size(); i++) {
 			QrRepertoryColumnVO qrRepertoryColumn = qrRepertoryColumnList.get(i);
 			Long qrRepertoryColumnId = qrRepertoryColumn.getId();
-
-			// 每列的url格式
-//			Integer urlType = qrRepertoryColumn.getUrlType();
-//			String url = "";
-//			if (QrFormatUrlEnum.SYSTEM_URL.is(urlType)) {
-//				url = systemUrl;
-//			}
-//			// 如果url没有以/结尾,则加上/
-//			if (StringUtils.isNotBlank(url) && !url.endsWith("/")) {
-//				url += "/";
-//			}
 			urlMap.put(qrRepertoryColumnId, "");
-
 			// 使用到流水号参数的列
 			String[] buildClassArr = qrRepertoryColumn.getQrFormatVO().getCodeVariableBuildClass().split(",");
 			for (int j = 0; j < buildClassArr.length; j++) {
@@ -473,7 +459,6 @@ public class GenerateCodeConsumer {
 					QueryWrapper<QrRepertorySerialNumber> qrRepertorySerialNumberQw = new QueryWrapper<>();
 					qrRepertorySerialNumberQw.eq("qr_repertory_column_id", qrRepertoryColumnId);
 					qrRepertorySerialNumberQw.eq("child_index", j);
-
 					// 加锁查询插入流水号
 					RLock lock = redissonClient.getLock("serial_number_lock_" + qrRepertoryColumnId + "_" + j);
 					QrRepertorySerialNumber qrRepertorySerialNumber = null;
@@ -492,12 +477,10 @@ public class GenerateCodeConsumer {
 					} finally {
 						lock.unlock();
 					}
-
 					// key:qr_repertory_column_id + child_index
 					qrRepertorySerialNumberMap.put(qrRepertoryColumnId + "_" + j, qrRepertorySerialNumber);
 				}
 			}
-
 		}
 	}
 
@@ -635,8 +618,13 @@ public class GenerateCodeConsumer {
 		}
 	}
 
-
-	public static List<char[]> a(String str, int groupSum){
+	/**
+	 * 分割数量 -- 码.length / 要分割数量 = 最后一组+余数;
+	 * @param str 要分割码
+	 * @param groupSum 分割数量
+	 * @return 分割后的码
+	 */
+	public static List<char[]> segmentation(String str, int groupSum){
 		List<char[]> result = new ArrayList<>();
 
 		if (null == str){

+ 10 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/QrBoxMappingService.java

@@ -3,7 +3,9 @@ package com.abi.qms.platform.service;
 import com.abi.qms.platform.dto.req.ActiveBoxCodeReq;
 import com.abi.qms.platform.dto.req.GenerateBarCodeReq;
 import com.abi.qms.platform.dto.req.ListQrBoxCodeMappingReq;
+import com.abi.qms.platform.dto.req.PrintingDetailReq;
 import com.abi.qms.platform.dto.res.ListQrBoxCodeMappingRes;
+import com.abi.qms.platform.dto.res.PrintingDetailRes;
 import com.abi.qms.platform.dto.res.QrBoxCodeUploadRes;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -37,7 +39,7 @@ public interface QrBoxMappingService {
      * @param map
      * @return
      */
-    QrBoxCodeUploadRes uploadCodeFiles(Map<String, MultipartFile> map);
+    QrBoxCodeUploadRes uploadCodeFiles(Map<String, MultipartFile> map, Long packageId);
 
     /**
      * 根据ID激活或作废码包
@@ -46,4 +48,11 @@ public interface QrBoxMappingService {
      */
     void activeBoxCode(ActiveBoxCodeReq activeBoxCodeReq);
 
+    /**
+     * 根据码包ID查询箱码合一打印详情
+     *
+     * @param printingDetailReq
+     * @return
+     */
+    PrintingDetailRes getPrintingDetail(PrintingDetailReq printingDetailReq);
 }

+ 19 - 8
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/MaterialServiceImpl.java

@@ -2,10 +2,8 @@ package com.abi.qms.platform.service.impl;
 
 import com.abi.qms.platform.dao.entity.BaseMaterial;
 import com.abi.qms.platform.dao.entity.BaseSku;
-import com.abi.qms.platform.dao.enums.FactoryTypeEnum;
 import com.abi.qms.platform.dao.enums.MaterialTypeEnum;
 import com.abi.qms.platform.dao.enums.ValidEnum;
-import com.abi.qms.platform.dao.mapper.BaseBrandMapper;
 import com.abi.qms.platform.dao.mapper.BaseMaterialMapper;
 import com.abi.qms.platform.dao.mapper.BaseSkuMapper;
 import com.abi.qms.platform.dao.vo.result.MaterialVO;
@@ -23,16 +21,12 @@ import com.abi.task.common.excel.preperties.MaterialProperty;
 import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.fasterxml.jackson.databind.util.JSONPObject;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -59,6 +53,7 @@ public class MaterialServiceImpl implements MaterialService {
         //查询是否存在相同名称的物料
         QueryWrapper<BaseMaterial> materialQw = new QueryWrapper<>();
         materialQw.eq("material_name",req.getMaterialName());
+        materialQw.eq("is_delete", 0);
         List<BaseMaterial> materialList = baseMaterialMapper.selectList(materialQw);
         if(CollectionUtils.isNotEmpty(materialList)){
             throw new BusinessException("物料"+req.getMaterialName()+"已存在,请勿重复创建");
@@ -66,6 +61,7 @@ public class MaterialServiceImpl implements MaterialService {
         //查询是否存在物料号
         materialQw = new QueryWrapper<>();
         materialQw.eq("material_code",req.getMaterialCode());
+        materialQw.eq("is_delete", 0);
         materialList = baseMaterialMapper.selectList(materialQw);
         if(CollectionUtils.isNotEmpty(materialList)){
             throw new BusinessException("物料号"+req.getMaterialCode()+"已存在,请勿重复创建");
@@ -92,8 +88,21 @@ public class MaterialServiceImpl implements MaterialService {
         BaseMaterial material = baseMaterialMapper.selectById(req.getId());
         AssertUtil.isNull(material,"物料不存在");
 
+        //校验物料名称
+        if(Objects.nonNull(req.getMaterialName())){
+            if(!material.getMaterialName().equals(req.getMaterialName())){
+                QueryWrapper<BaseMaterial> materialQw = new QueryWrapper<>();
+                materialQw.eq("material_name",req.getMaterialName());
+                materialQw.eq("is_delete", 0);
+                List<BaseMaterial> materialList = baseMaterialMapper.selectList(materialQw);
+                if(CollectionUtils.isNotEmpty(materialList)){
+                    throw new BusinessException("物料"+req.getMaterialName()+"已存在,请勿重复创建");
+                }
+                material.setMaterialName(req.getMaterialName());
+            }
+        }
+
         //2-修改物料
-        material.setMaterialName(req.getMaterialName());
         material.setMaterialType(req.getMaterialType());
         material.setDescription(req.getDescription());
         material.setValid(req.getValid());
@@ -276,6 +285,8 @@ public class MaterialServiceImpl implements MaterialService {
             //查询SKU是否存在
             QueryWrapper<BaseSku> skuQw = new QueryWrapper<>();
             skuQw.eq("sku_name",materialProperty.getSkuName());
+            skuQw.eq("valid",1);
+            skuQw.eq("is_delete",0);
             BaseSku baseSku = baseSkuMapper.selectOne(skuQw);
             //SKU不存在
             if (null == baseSku){

+ 54 - 11
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrBoxMappingServiceImpl.java

@@ -1,15 +1,20 @@
 package com.abi.qms.platform.service.impl;
 
+import com.abi.qms.platform.dao.entity.BaseFactory;
 import com.abi.qms.platform.dao.entity.QrBoxMapping;
 import com.abi.qms.platform.dao.entity.UserInfo;
 import com.abi.qms.platform.dao.enums.BoxMappingActiveStatusEnum;
+import com.abi.qms.platform.dao.mapper.BaseFactoryMapper;
 import com.abi.qms.platform.dao.mapper.QrBoxMappingMapper;
 import com.abi.qms.platform.dao.tablestore.entity.QrCode;
+import com.abi.qms.platform.dao.vo.result.PrintingDetailVO;
 import com.abi.qms.platform.dao.vo.result.QrBoxMappingVO;
 import com.abi.qms.platform.dto.req.ActiveBoxCodeReq;
 import com.abi.qms.platform.dto.req.GenerateBarCodeReq;
 import com.abi.qms.platform.dto.req.ListQrBoxCodeMappingReq;
+import com.abi.qms.platform.dto.req.PrintingDetailReq;
 import com.abi.qms.platform.dto.res.ListQrBoxCodeMappingRes;
+import com.abi.qms.platform.dto.res.PrintingDetailRes;
 import com.abi.qms.platform.dto.res.QrBoxCodeUploadRes;
 import com.abi.qms.platform.dto.res.UploadFileRes;
 import com.abi.qms.platform.infrastructure.util.AssertUtil;
@@ -19,6 +24,7 @@ import com.abi.qms.platform.service.QrBoxMappingService;
 import com.abi.task.common.api.exception.BusinessException;
 import com.abi.task.common.tablestore.TableStorePlusUtils;
 import com.abi.task.common.utils.PojoConverterUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.google.common.collect.Maps;
@@ -34,6 +40,8 @@ import java.io.InputStreamReader;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author: fangxinjian
@@ -53,6 +61,9 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
     @Autowired
     private UserUtil userUtil;
 
+    @Autowired
+    private BaseFactoryMapper baseFactoryMapper;
+
     private static final String SUCCESS = "success";
 
     private static final String FAIL = "fail";
@@ -85,6 +96,7 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
         qbm.setRemark(req.getRemark());
         qbm.setCreateUserName(user.getUserName());
         qbm.setCreateBy(user.getId());
+        qbm.setPackageId(req.getPackageId());
         qrBoxMappingMapper.insert(qbm);
 
     }
@@ -106,7 +118,7 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
     }
 
     @Override
-    public QrBoxCodeUploadRes uploadCodeFiles(Map<String, MultipartFile> map) {
+    public QrBoxCodeUploadRes uploadCodeFiles(Map<String, MultipartFile> map, Long packageId) {
 
         QrBoxCodeUploadRes res = new QrBoxCodeUploadRes();
         Map<String, UploadFileRes> resultMap = Maps.newHashMap();
@@ -115,14 +127,14 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
             //核心!!!上传文件
             try {
                 //上传箱码文件
-                doUpload(file);
-                resultMap.put(o.getKey(), new UploadFileRes(SUCCESS, ""));
+                doUpload(file, packageId);
+                resultMap.put(o.getKey(), new UploadFileRes(SUCCESS, "上传箱码合一文件成功!"));
             } catch (BusinessException e) {
                 log.info("文件上传失败");
                 resultMap.put(o.getKey(), new UploadFileRes(FAIL, e.getMessage()));
             } catch (Exception e) {
                 log.info("文件上传异常", e);
-                resultMap.put(o.getKey(), new UploadFileRes(FAIL, ""));
+                resultMap.put(o.getKey(), new UploadFileRes(FAIL, e.getMessage()));
             }
         });
 
@@ -151,6 +163,20 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
 
     }
 
+    @Override
+    public PrintingDetailRes getPrintingDetail(PrintingDetailReq req) {
+
+
+        PrintingDetailVO printingDetail = qrBoxMappingMapper.getPrintingDetail(req.getPackageId());
+        PrintingDetailRes res = PojoConverterUtils.copy(printingDetail, PrintingDetailRes.class);
+        Long factoryCoverLevelTwoId = printingDetail.getFactoryCoverLevelTwoId();
+        Long factoryBeerId = printingDetail.getFactoryBeerId();
+        res.setFactoryCoverName(getFactoryName(factoryCoverLevelTwoId));
+        res.setFactoryBeerName(getFactoryName(factoryBeerId));
+
+        return res;
+    }
+
 
     /**
      * 根据主键查询已生成码包位置
@@ -163,7 +189,7 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
         return qrCode.getCodeIndex();
     }
 
-    public void doUpload(MultipartFile file) {
+    public void doUpload(MultipartFile file, Long packageId) {
         if (file.isEmpty()) {
             throw new BusinessException("文件为空,请重新选择文件");
         }
@@ -186,19 +212,29 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
                 if (StringUtils.isBlank(encryptCodeStr)) {
                     continue;
                 }
-                //截取 去掉uri
-                encryptCodeStr = encryptCodeStr.substring(encryptCodeStr.lastIndexOf("/") + 1);
-
-                if (StringUtils.isBlank(first)) {
-                    first = encryptCodeStr;
+                //判断有没有中文标题
+                Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
+                Matcher m = p.matcher(encryptCodeStr);
+                if (!m.find()) {
+                    if (encryptCodeStr.contains(",")) {
+                        throw new BusinessException("码包文件格式错误,建议每行一个码!");
+                    }
+                    //截取 去掉uri
+                    encryptCodeStr = encryptCodeStr.substring(encryptCodeStr.lastIndexOf("/") + 1);
+
+                    if (StringUtils.isBlank(first)) {
+                        first = encryptCodeStr;
+                    }
+                    last = encryptCodeStr;
                 }
-                last = encryptCodeStr;
+
             }
 
             //生成条形码
             GenerateBarCodeReq req = new GenerateBarCodeReq();
             req.setBeginQrCode(first);
             req.setEndQrCode(last);
+            req.setPackageId(packageId);
             generateBarCode(req);
 
         } catch (BusinessException e) {
@@ -229,5 +265,12 @@ public class QrBoxMappingServiceImpl implements QrBoxMappingService {
         }
     }
 
+    private String getFactoryName(Long id) {
+        QueryWrapper<BaseFactory> qw = new QueryWrapper<>();
+        qw.eq("id", id);
+        qw.eq("is_delete", 0);
+        BaseFactory baseFactory = baseFactoryMapper.selectOne(qw);
+        return baseFactory.getFactoryName();
+    }
 
 }

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -408,7 +408,7 @@ public class QrPackageServiceImpl implements QrPackageService {
 
         // 码库类型为系统生成时,放入rabbitmq,生成码
         if (QrRepertoryTypeEnum.SYSTEM_GENERATE.is(qrPackage.getQrRepertoryType())) {
-            amqpTemplate.convertAndSend(GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE, JsonUtil.toJson(req.getId()));
+            amqpTemplate.convertAndSend(GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE, req.getId());
         }
     }
 

+ 3 - 3
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseMaterialMapper.xml

@@ -33,18 +33,18 @@
 
         <where>
             <if test="req.materialCode!=null and req.materialCode!=''">
-                and m.material_code regexp #{req.materialCode}
+                and m.material_code = #{req.materialCode}
             </if>
             <if test="req.materialName!=null and req.materialName!=''">
                 and m.material_name regexp #{req.materialName}
             </if>
-            <if test="req.materialType!=null and req.materialType!=''">
+            <if test="req.materialType!=null">
                 and m.material_type = #{req.materialType}
             </if>
             <if test="req.skuName != null and req.skuName != ''">
                 AND bs.sku_name LIKE CONCAT('%',#{req.skuName},'%')
             </if>
-            <if test="req.valid!=null and req.valid!=''">
+            <if test="req.valid!=null">
                 and m.valid = #{req.valid}
             </if>
         </where>

+ 15 - 0
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/QrBoxMappingMapper.xml

@@ -45,4 +45,19 @@
         order by create_time
     </select>
 
+    <select id="getPrintingDetail" resultType="com.abi.qms.platform.dao.vo.result.PrintingDetailVO">
+        select
+        qbm.begin_qr_code,qbm.end_qr_code,qbm.create_time,qbm.box_code,qbm.qr_code_count,
+        qp.factory_cover_level_two_id,qp.factory_beer_id,bs.sku_name
+        from qr_box_mapping qbm
+        inner join qr_package qp on qp.id=qbm.package_id
+        inner join base_material bm on bm.id=qp.material_id
+        inner join base_sku bs on bs.id=bm.sku_id
+        <where>
+            <if test="packageId != null and packageId!='' ">
+                qbm.package_id = #{packageId}
+            </if>
+        </where>
+    </select>
+
 </mapper>