Jelajahi Sumber

fix: 箱码合一添加相关接口和调试

fangxinjian 3 tahun lalu
induk
melakukan
59c4e3ea73

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

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

+ 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();
+    }
 
 }

+ 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>