瀏覽代碼

杰生重构 标签

home 2 年之前
父節點
當前提交
13f3870d3b
共有 18 個文件被更改,包括 543 次插入54 次删除
  1. 16 2
      hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java
  2. 14 0
      hx-common/common-tool/src/main/java/com/fjhx/utils/Assert.java
  3. 2 4
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/Water.java
  4. 10 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterBatch.java
  5. 5 7
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterDetail.java
  6. 15 7
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterTag.java
  7. 48 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckStateEnum.java
  8. 49 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/PurchaseProgressEnum.java
  9. 5 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/water/WaterTagVo.java
  10. 5 0
      hx-service/storage-restructure/pom.xml
  11. 52 14
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterTagController.java
  12. 1 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractMapper.xml
  13. 7 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.java
  14. 13 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.xml
  15. 45 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/DeleteTagService.java
  16. 9 4
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterTagService.java
  17. 18 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java
  18. 229 16
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java

+ 16 - 2
hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java

@@ -16,6 +16,12 @@ import java.util.HashMap;
  */
 public class Condition extends HashMap<String, Object> {
 
+    @Override
+    public Condition put(String key, Object value) {
+        super.put(key, value);
+        return this;
+    }
+
     /**
      * 开始时间
      */
@@ -46,6 +52,10 @@ public class Condition extends HashMap<String, Object> {
         return endTime;
     }
 
+    public Page<Object> getPage() {
+        return new Page<>(PageUtil.getCurrent(this), PageUtil.getSize(this));
+    }
+
     /**
      * 关键字
      */
@@ -101,8 +111,12 @@ public class Condition extends HashMap<String, Object> {
         return Convert.toInt(get(str));
     }
 
-    public Page<Object> getPage() {
-        return new Page<>(PageUtil.getCurrent(this), PageUtil.getSize(this));
+    /**
+     * 获取long
+     */
+    public Long getLong(String str) {
+        return Convert.toLong(get(str));
     }
 
+
 }

+ 14 - 0
hx-common/common-tool/src/main/java/com/fjhx/utils/Assert.java

@@ -78,6 +78,20 @@ public class Assert {
         }
     }
 
+
+    /**
+     * 断言大于0
+     *
+     * @param integer 参数
+     * @param errStr  异常提示
+     */
+    public static void gtZero(Integer integer, String errStr) {
+        if (integer == null || integer <= 0) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+
     /**
      * 验证id是否正确
      *

+ 2 - 4
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/Water.java

@@ -1,9 +1,7 @@
 package com.fjhx.entity.water;
 
 import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.Version;
-import com.baomidou.mybatisplus.annotation.TableId;
+
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.fjhx.base.StorageBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -32,7 +30,7 @@ public class Water extends StorageBaseEntity {
     /**
      * 批次id
      */
-    private Long contractBatchId;
+    private Long waterBatchId;
 
     /**
      * 操作人

+ 10 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterBatch.java

@@ -29,6 +29,16 @@ public class WaterBatch extends StorageBaseEntity {
     private String code;
 
     /**
+     * 物料id
+     */
+    private Long materialId;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
      * 申购id
      */
     private Long applyPurchaseId;

+ 5 - 7
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterDetail.java

@@ -1,16 +1,14 @@
 package com.fjhx.entity.water;
 
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.Version;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.fjhx.base.StorageBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.StorageBaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 流水明细表
@@ -32,7 +30,7 @@ public class WaterDetail extends StorageBaseEntity {
     /**
      * 批次id
      */
-    private Long contractBatchId;
+    private Long waterBatchId;
 
     /**
      * 标签id

+ 15 - 7
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterTag.java

@@ -1,16 +1,14 @@
 package com.fjhx.entity.water;
 
-import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.Version;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.fjhx.base.StorageBaseEntity;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fjhx.base.StorageBaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 标签
@@ -52,7 +50,17 @@ public class WaterTag extends StorageBaseEntity {
     /**
      * 合同批次id
      */
-    private Long contractBatchId;
+    private Long waterBatchId;
+
+    /**
+     * 合同批次编码
+     */
+    private String waterBatchCode;
+
+    /**
+     * 序号
+     */
+    private Integer number;
 
     /**
      * 已打印

+ 48 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckStateEnum.java

@@ -0,0 +1,48 @@
+package com.fjhx.enums;
+
+import lombok.Getter;
+
+import java.util.HashMap;
+
+/**
+ * 质检状态
+ */
+@Getter
+public enum CheckStateEnum {
+
+    NO_QUALITY_INSPECTION(0, "未质检"),
+    INSPECTED(1, "已质检"),
+    NO_QUALITY_INSPECTION_REQUIRED(2, "无需质检");
+
+    private final Integer type;
+    private final String name;
+
+    private static final HashMap<Integer, CheckStateEnum> map = new HashMap<>();
+
+    CheckStateEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    static {
+        for (CheckStateEnum value : CheckStateEnum.values()) {
+            map.put(value.getType(), value);
+        }
+    }
+
+    /**
+     * 根据type获取枚举
+     */
+    public static CheckStateEnum get(Integer type) {
+        return map.get(type);
+    }
+
+    /**
+     * 根据type值获取枚举
+     */
+    public static String getName(Integer type) {
+        return map.get(type).getName();
+    }
+
+
+}

+ 49 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/PurchaseProgressEnum.java

@@ -0,0 +1,49 @@
+package com.fjhx.enums;
+
+import lombok.Getter;
+
+import java.util.HashMap;
+
+/**
+ * 采购进度
+ */
+@Getter
+public enum PurchaseProgressEnum {
+
+    CODING(0, "供应商打码"),
+    SHIPMENT(1, "供应商出货"),
+    LABELING(2, "到货贴标"),
+    WAREHOUSING(3, "到货入库");
+
+    private final Integer type;
+    private final String name;
+
+    private static final HashMap<Integer, PurchaseProgressEnum> map = new HashMap<>();
+
+    PurchaseProgressEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    static {
+        for (PurchaseProgressEnum value : PurchaseProgressEnum.values()) {
+            map.put(value.getType(), value);
+        }
+    }
+
+    /**
+     * 根据type获取枚举
+     */
+    public static PurchaseProgressEnum get(Integer type) {
+        return map.get(type);
+    }
+
+    /**
+     * 根据type值获取枚举
+     */
+    public static String getName(Integer type) {
+        return map.get(type).getName();
+    }
+
+
+}

+ 5 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/water/WaterTagVo.java

@@ -14,4 +14,9 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 public class WaterTagVo extends WaterTag {
 
+    /**
+     * 添加标签个数
+     */
+    private Integer num;
+
 }

+ 5 - 0
hx-service/storage-restructure/pom.xml

@@ -43,6 +43,11 @@
             <artifactId>common-client-util</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 52 - 14
hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterTagController.java

@@ -1,16 +1,18 @@
 package com.fjhx.controller.water;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springblade.core.tool.api.R;
+import com.fjhx.base.Condition;
 import com.fjhx.entity.water.WaterTag;
+import com.fjhx.params.JumpVo;
 import com.fjhx.params.water.WaterTagVo;
+import com.fjhx.service.flow.DeleteTagService;
 import com.fjhx.service.water.WaterTagService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
-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.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -28,27 +30,63 @@ public class WaterTagController {
     @Autowired
     private WaterTagService waterTagService;
 
+    @Autowired
+    private DeleteTagService deleteTagService;
+
     @PostMapping("/page")
-    public R page(@RequestBody Map<String, String> condition){
-        Page<WaterTag> result = waterTagService.getPage(condition);
+    public R page(@RequestBody Condition condition) {
+        Page<Map<String, Object>> result = waterTagService.getPage(condition);
         return R.success(result);
     }
 
     @PostMapping("/add")
-    public R add(@RequestBody WaterTagVo waterTagVo){
+    public R add(@RequestBody WaterTagVo waterTagVo) {
         waterTagService.add(waterTagVo);
         return R.success();
     }
 
-    @PostMapping("/edit")
-    public R edit(@RequestBody WaterTagVo waterTagVo){
-        waterTagService.edit(waterTagVo);
+    /**
+     * 打印二维码
+     */
+    @PostMapping("/printer")
+    public R printer(@RequestBody List<Long> tagIdList) {
+        waterTagService.printer(tagIdList);
+        return R.success();
+    }
+
+    /**
+     * 绑定rfid
+     */
+    @PostMapping("/bindingRfid")
+    public R bindingRfid(@RequestBody WaterTag waterTag) {
+        waterTagService.bindingRfid(waterTag.getId(), waterTag.getRfidCode());
+        return R.success();
+    }
+
+    /**
+     * 导入标签
+     */
+    @PostMapping("/uploadTag")
+    public R uploadTag(@RequestParam("file") MultipartFile file, @RequestParam("waterBatchId") Long waterBatchId) {
+        waterTagService.uploadTag(file, waterBatchId);
+        return R.success();
+    }
+
+    /**
+     * 删除标签流程
+     */
+    @PostMapping("/deleteFlowCreate")
+    public R delete(@RequestBody WaterTagVo waterTagVo) {
+        deleteTagService.create(waterTagVo.getId());
         return R.success();
     }
 
-    @PostMapping("/delete")
-    public R delete(@RequestBody WaterTagVo waterTagVo){
-        waterTagService.delete(waterTagVo);
+    /**
+     * 删除标签跳转
+     */
+    @PostMapping("/deleteFlowJump")
+    public R delete(@RequestBody JumpVo jumpVo) {
+        deleteTagService.jump(jumpVo);
         return R.success();
     }
 

+ 1 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractMapper.xml

@@ -30,6 +30,7 @@
                c.supplier_id,
                now()                                          signTime,
                adddate(now(), interval m.safety_warn_day day) deliverTime,
+               m.id                                           materialId,
                m.code                                         materialCode,
                m.name                                         materialName,
                m.spec                                         materialSpec,

+ 7 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.java

@@ -1,7 +1,12 @@
 package com.fjhx.mapper.water;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.entity.water.WaterTag;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
 
 /**
  * <p>
@@ -13,4 +18,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface WaterTagMapper extends BaseMapper<WaterTag> {
 
+    Page<Map<String, Object>> getPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<WaterTag> wrapper);
+
 }

+ 13 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.xml

@@ -2,4 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mapper.water.WaterTagMapper">
 
+    <select id="getPage" resultType="java.util.Map">
+        select wt.id,
+               wt.number,
+               m.name materialName,
+               m.code materialCode,
+               wt.quantity,
+               wt.create_time,
+               wt.rfid_code
+        from water_tag wt
+                 left join material m on wt.material_id = m.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 45 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/DeleteTagService.java

@@ -0,0 +1,45 @@
+package com.fjhx.service.flow;
+
+import com.fjhx.params.JumpVo;
+import com.fjhx.service.water.WaterTagService;
+import com.fjhx.utils.Assert;
+import com.fjhx.utils.ExampleAbstract;
+import com.fjhx.utils.FlowConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class DeleteTagService {
+
+    @Autowired
+    private WaterTagService waterTagService;
+
+    private final FlowConstructor flowConstructor = FlowConstructor.init(new ExampleAbstract() {
+
+        @Override
+        public String getCode() {
+            return "js_deleteTag";
+        }
+
+        @Override
+        public void end() {
+            Long tagId = getCacheData(Long.class);
+            waterTagService.removeById(tagId);
+        }
+
+    });
+
+    @Transactional(rollbackFor = Exception.class)
+    public void create(Long tagId) {
+        Assert.notEmpty(tagId, "标签id不能为空");
+        flowConstructor.create(tagId, "删除标签", "", tagId);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void jump(JumpVo jumpVo) {
+        flowConstructor.jump(jumpVo);
+    }
+
+
+}

+ 9 - 4
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterTagService.java

@@ -1,10 +1,13 @@
 package com.fjhx.service.water;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseService;
 import com.fjhx.entity.water.WaterTag;
 import com.fjhx.params.water.WaterTagVo;
-import com.fjhx.base.StorageBaseService;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,12 +20,14 @@ import java.util.Map;
  */
 public interface WaterTagService extends StorageBaseService<WaterTag> {
 
-    Page<WaterTag> getPage(Map<String, String> condition);
+    Page<Map<String, Object>> getPage(Condition condition);
 
     void add(WaterTagVo waterTagVo);
 
-    void edit(WaterTagVo waterTagVo);
+    void printer(List<Long> tagIdList);
+
+    void bindingRfid(Long id, String rfidCode);
 
-    void delete(WaterTagVo waterTagVo);
+    void uploadTag(MultipartFile file, Long waterBatchId);
 
 }

+ 18 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java

@@ -3,13 +3,19 @@ package com.fjhx.service.water.impl;
 import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.StorageBaseEntity;
 import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.water.WaterBatch;
+import com.fjhx.entity.water.WaterTag;
 import com.fjhx.mapper.water.WaterBatchMapper;
 import com.fjhx.params.water.WaterBatchVo;
 import com.fjhx.service.water.WaterBatchService;
+import com.fjhx.service.water.WaterTagService;
 import com.fjhx.utils.Assert;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -27,6 +33,9 @@ import java.util.Map;
 @Service
 public class WaterBatchServiceImpl extends ServiceImpl<WaterBatchMapper, WaterBatch> implements WaterBatchService {
 
+    @Autowired
+    private WaterTagService waterTagService;
+
     @Override
     public Map<String, Object> getDetailsByContract(Long contractId) {
         Map<String, Object> result = baseMapper.getMaterialInfo(contractId);
@@ -93,6 +102,7 @@ public class WaterBatchServiceImpl extends ServiceImpl<WaterBatchMapper, WaterBa
         removeById(id);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void shipment(WaterBatch waterBatch) {
         Assert.notEmpty(waterBatch.getId(), "批次id不能为空");
@@ -101,6 +111,14 @@ public class WaterBatchServiceImpl extends ServiceImpl<WaterBatchMapper, WaterBa
         waterBatch.setShipmentStatus(StatusConstant.YES);
         waterBatch.setShipmentTime(new Date());
         updateById(waterBatch);
+
+        waterTagService.update(Wrappers.<WaterTag>lambdaUpdate()
+                .eq(WaterTag::getWaterBatchId, waterBatch.getId())
+                .set(WaterTag::getHadShipment, StatusConstant.YES)
+                .set(StorageBaseEntity::getUpdateTime, new Date())
+                .set(StorageBaseEntity::getUpdateUser, AuthUtil.getUserId())
+        );
+
     }
 
     private String getCode(String contractCode) {

+ 229 - 16
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java

@@ -1,17 +1,35 @@
 package com.fjhx.service.water.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.lang.UUID;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.utils.WrapperUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseEntity;
+import com.fjhx.constants.StatusConstant;
+import com.fjhx.entity.water.WaterBatch;
 import com.fjhx.entity.water.WaterTag;
-import com.fjhx.params.water.WaterTagVo;
+import com.fjhx.enums.CheckStateEnum;
+import com.fjhx.enums.PurchaseProgressEnum;
 import com.fjhx.mapper.water.WaterTagMapper;
+import com.fjhx.params.water.WaterTagVo;
+import com.fjhx.service.water.WaterBatchService;
 import com.fjhx.service.water.WaterTagService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.utils.Assert;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.Map;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * <p>
@@ -24,31 +42,226 @@ import java.util.Map;
 @Service
 public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> implements WaterTagService {
 
+    @Autowired
+    private WaterBatchService waterBatchService;
+
     @Override
-    public Page<WaterTag> getPage(Map<String, String> condition) {
+    public Page<Map<String, Object>> getPage(Condition condition) {
 
-        QueryWrapper<WaterTag> wrapper = Wrappers.query();
+        Long waterBatchId = condition.getLong("waterBatchId");
 
-        WrapperUtil.init(condition, wrapper)
-                .createTimeDesc();
+        QueryWrapper<WaterTag> wrapper = Wrappers.<WaterTag>query()
+                .eq(waterBatchId != null, "wt.water_batch_id", waterBatchId);
 
-        Page<WaterTag> page = page(condition, wrapper);
-        return page;
+        return baseMapper.getPage(condition.getPage(), wrapper);
     }
 
     @Override
-    public void add(WaterTagVo waterTagVo) {
-        save(waterTagVo);
+    public synchronized void add(WaterTagVo waterTagVo) {
+        BigDecimal quantity = waterTagVo.getQuantity();
+        Assert.notEmpty(quantity, "物料长度不能为空");
+
+        Long waterBatchId = waterTagVo.getWaterBatchId();
+        Assert.notEmpty(waterBatchId, "批次id不能为空");
+
+        // 标签数量
+        int num = waterTagVo.getNum() == null || waterTagVo.getNum() < 1 ? 1 : waterTagVo.getNum();
+
+        WaterTag waterTag = getNewestWaterTag(waterBatchId);
+
+        List<WaterTag> waterTagList = new ArrayList<>();
+
+        if (waterTag != null) {
+            Integer number = waterTag.getNumber();
+
+            for (int integer = 0; integer < num; integer++) {
+                number++;
+                WaterTag waterTagTemp = createWaterTag(waterTag.getMaterialId(), quantity, waterTag.getPrice(),
+                        waterTag.getWaterBatchId(), waterTag.getWaterBatchCode(), number);
+                waterTagList.add(waterTagTemp);
+            }
+
+        } else {
+            WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
+            for (int i = 1; i <= num; i++) {
+                WaterTag waterTagTemp = createWaterTag(waterBatch.getMaterialId(), quantity, waterBatch.getPrice(),
+                        waterBatch.getId(), waterBatch.getCode(), i);
+
+                waterTagList.add(waterTagTemp);
+            }
+        }
+        saveBatch(waterTagList);
     }
 
     @Override
-    public void edit(WaterTagVo waterTagVo) {
-        updateById(waterTagVo);
+    public void printer(List<Long> tagIdList) {
+        update(Wrappers.<WaterTag>lambdaUpdate()
+                .in(StorageBaseEntity::getId, tagIdList)
+                .set(WaterTag::getHadPrinter, StatusConstant.YES)
+                .set(StorageBaseEntity::getUpdateTime, new Date())
+                .set(StorageBaseEntity::getUpdateUser, AuthUtil.getUserId())
+        );
     }
 
     @Override
-    public void delete(WaterTagVo waterTagVo) {
-        removeById(waterTagVo.getId());
+    public void bindingRfid(Long id, String rfidCode) {
+        update(Wrappers.<WaterTag>lambdaUpdate()
+                .eq(StorageBaseEntity::getId, id)
+                .set(WaterTag::getRfidCode, rfidCode)
+                .set(WaterTag::getLabelUserId, AuthUtil.getUserId())
+                .set(StorageBaseEntity::getUpdateTime, new Date())
+                .set(StorageBaseEntity::getUpdateUser, AuthUtil.getUserId())
+        );
     }
 
+    @Override
+    public void uploadTag(MultipartFile file, Long waterBatchId) {
+
+        Assert.notEmpty(waterBatchId, "批次id不能为空");
+
+        List<BigDecimal> quantityList = getQuantityListByExcel(file);
+
+        Assert.gtZero(quantityList.size(), "导入标签数量为空");
+
+        WaterTag waterTag = getNewestWaterTag(waterBatchId);
+
+        List<WaterTag> waterTagList = new ArrayList<>();
+
+        if (waterTag != null) {
+            Integer number = waterTag.getNumber();
+
+            for (BigDecimal quantity : quantityList) {
+                number++;
+                WaterTag waterTagTemp = createWaterTag(waterTag.getMaterialId(), quantity, waterTag.getPrice(),
+                        waterTag.getWaterBatchId(), waterTag.getWaterBatchCode(), number);
+                waterTagList.add(waterTagTemp);
+            }
+
+        } else {
+            WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
+            for (int i = 1; i <= quantityList.size(); i++) {
+                WaterTag waterTagTemp = createWaterTag(waterBatch.getMaterialId(), quantityList.get(i), waterBatch.getPrice(),
+                        waterBatch.getId(), waterBatch.getCode(), i);
+
+                waterTagList.add(waterTagTemp);
+            }
+        }
+        saveBatch(waterTagList);
+    }
+
+
+    /**
+     * 解析文件中的数据
+     */
+    private List<BigDecimal> getQuantityListByExcel(MultipartFile file) {
+
+        List<BigDecimal> quantityList = new ArrayList<>();
+        InputStream inputStream = null;
+        Workbook workbook = null;
+        try {
+
+            inputStream = file.getInputStream();
+            String filename = file.getOriginalFilename();
+            assert filename != null;
+
+            // 判断excel的后缀,不同的后缀用不同的对象去解析
+            if (filename.endsWith(".xls")) {
+                workbook = new XSSFWorkbook(inputStream);
+            }
+            // xlsx是高版本的Excel文件
+            if (filename.endsWith(".xlsx")) {
+                workbook = new XSSFWorkbook(inputStream);
+            }
+            if (workbook == null) {
+                throw new Exception();
+            }
+
+            // 取到excel 中的第一张工作表
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                throw new Exception();
+            }
+
+            // 行
+            List<Integer> lineList = Arrays.asList(12, 15, 18, 21, 24, 27, 30, 33, 36, 39);
+
+            // 列
+            List<Integer> columnList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+
+            for (Integer line : lineList) {
+
+                // 获取到这一行的数据
+                Row row = sheet.getRow(line);
+                if (row == null) {
+                    continue;
+                }
+
+                // 循环列
+                for (Integer column : columnList) {
+                    Cell cell = row.getCell(column);
+                    if (cell != null) {
+                        cell.setCellType(CellType.STRING);
+                        BigDecimal bigDecimal = Convert.toBigDecimal(cell.getStringCellValue().trim());
+                        if (bigDecimal != null && bigDecimal.compareTo(BigDecimal.ZERO) > 0) {
+                            // 获取数量
+                            quantityList.add(bigDecimal);
+                        }
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ServiceException("excel表格读取失败");
+        } finally {
+            // 关闭io流
+            IoUtil.close(inputStream);
+            IoUtil.close(workbook);
+        }
+
+        return quantityList;
+    }
+
+
+    /**
+     * 创建标签
+     *
+     * @param materialId      物料id
+     * @param quantity        数量
+     * @param price           单价
+     * @param waterBatchId    批次id
+     * @param waterBatchCodee 批次编码
+     * @param number          二维码编码
+     */
+    private WaterTag createWaterTag(Long materialId, BigDecimal quantity, BigDecimal price,
+                                    Long waterBatchId, String waterBatchCodee, Integer number) {
+        WaterTag waterTagTemp = new WaterTag();
+        waterTagTemp.setMaterialId(materialId);
+        waterTagTemp.setQuantity(quantity);
+        waterTagTemp.setPrice(price);
+        waterTagTemp.setQrCode(UUID.fastUUID().toString());
+        waterTagTemp.setWaterBatchId(waterBatchId);
+        waterTagTemp.setWaterBatchCode(waterBatchCodee);
+        waterTagTemp.setNumber(number);
+        waterTagTemp.setHadPrinter(StatusConstant.NO);
+        waterTagTemp.setHadShipment(StatusConstant.NO);
+        waterTagTemp.setPurchaseProgress(PurchaseProgressEnum.CODING.getType());
+        waterTagTemp.setCheckState(CheckStateEnum.NO_QUALITY_INSPECTION.getType());
+        waterTagTemp.setInHouse(StatusConstant.NO);
+        return waterTagTemp;
+    }
+
+    /**
+     * 获取最新添加标签
+     *
+     * @return
+     */
+    private WaterTag getNewestWaterTag(Long waterBatchId) {
+        return getOne(Wrappers.<WaterTag>lambdaQuery()
+                .eq(WaterTag::getWaterBatchId, waterBatchId)
+                .orderByDesc(WaterTag::getNumber)
+                .last("limit 1"));
+    }
+
+
 }