/**
  * 添加转移联单收货标签
  *
  * @param Buldbarcode
  * @return 0
  */
 @Override
 public int saveBuldbarcode(
     IFWUserInfo userInfo, Buldbarcode buldbarcode, SerialnumInfo serialnumInfo) {
   buldbarcode.setCreatedate(PublicMethod.now());
   buldbarcode.setCreateempID(userInfo.getUserID());
   buldbarcode.setModifydate(PublicMethod.now());
   buldbarcode.setModifyempID(userInfo.getUserID());
   serialnumBusiness.updateSerialnum(userInfo, serialnumInfo);
   return buldbarcodeMapper.insert(buldbarcode);
 }
 /**
  * 删除标签(经营协议,手动生成标签)
  *
  * @param IDList
  */
 @Override
 public void delSWMBuldbarcode(IFWUserInfo userInfo, String[] IDList) {
   try {
     int count = 0;
     // 1通过标签id查看标签表里的标签类型子表id
     Buldbarcode buldbarcode1 = getBuldbarcodeByID(userInfo, IDList[0]);
     // 通过获得到的转移联单子表id,
     String lineguid = buldbarcode1.getLineguid();
     Buldbarcode buldbarcode2 = new Buldbarcode();
     buldbarcode2.setLineguid(lineguid);
     for (int i = 0; i < IDList.length; i++) {
       Buldbarcode buldbarcode = new Buldbarcode();
       buldbarcode = getBuldbarcodeByID(userInfo, IDList[i]);
       String batchno = buldbarcode.getBatchno();
       count = removeBuldbarcode(userInfo, IDList[i]);
       if (count < 1) {
         throw new BusinessException("[当标签明细数据的状态为已入库时,不可以删除此标签明细数据!此库存批次号为]:" + batchno);
         // continue;
       }
     }
     // 查看全部标签表的数量
     List<Buldbarcode> listbuldbarcode = findBuldbarcode(userInfo, buldbarcode2);
     if (listbuldbarcode.size() == 0) {
       // 如果=0则修改本条转移联单子表中的属性是否生成标签改为'0'
       Buliandanline buliandanline = new Buliandanline();
       buliandanline.setGuid(lineguid);
       buliandanline.setIsbarcode(HConstants.ZERO);
       buliandanlineBusiness.updateBuliandanline(userInfo, buliandanline, null);
     }
   } catch (Exception e) {
     throw new BusinessException(e.getMessage());
   }
 }
 /**
  * 删除标签(转移联单标签)
  *
  * @param IDList
  */
 @Override
 public void delSWMBuldbarcodeInfo(IFWUserInfo userInfo, String[] IDList) {
   try {
     // 只能是未入库的才能删除
     // 如果标签类型是LD01的个数为0的话,修改转移联单字表中的setIsbarcode为0
     for (int i = 0; i < IDList.length; i++) {
       Buldbarcode buldbarcode = getBuldbarcodeByID(userInfo, IDList[i]);
       String isinv = buldbarcode.getIsinv();
       if (HConstants.ONE.equals(isinv)) {
         throw new BusinessException("[当标签的状态为已入库时,不可以删除此标签");
       } else if (HConstants.ZERO.equals(isinv)) {
         String bartype = buldbarcode.getBartype();
         if (HConstants.LD01.equals(bartype)) {
           throw new BusinessException("[当标签的类型为转移联单时,不可以删除此标签");
         } else {
           removeBuldbarcode(userInfo, IDList[i]);
         }
       }
     }
   } catch (Exception e) {
     throw new BusinessException(e.getMessage());
   }
 }
 /*
  * 打印成功后更新是否打印标识、打印日期、打印次数
  * 打印标识更新后,数据一直保留
  * add by gaof 20150527
  */
 @Override
 public void updateIsPrint(IFWUserInfo userInfo, String[] IDList) {
   try {
     for (int i = 0; i < IDList.length; i++) {
       Buldbarcode buldbarcode = new Buldbarcode();
       Buldbarcode buldbarcode1 = new Buldbarcode();
       buldbarcode = getBuldbarcodeByID(userInfo, IDList[i]);
       int pcount = buldbarcode.getPcount();
       buldbarcode1.setPcount(pcount + 1);
       buldbarcode1.setPrintdate(PublicMethod.now());
       buldbarcode1.setGuid(IDList[i]);
       updateBuldbarcodes(userInfo, buldbarcode1);
     }
   } catch (Exception e) {
     throw new BusinessException(e.getMessage());
   }
 }
  /** 刚添加派车单执行(和经营协议一样) 目前操作4张表:标签表、库存单据主表、库存单据子表、累计库存表 需判断许可证 */
  public void saveSWMBuldbarcodeYLC(
      String type,
      String uuid,
      String bartype,
      IFWUserInfo userInfo,
      Buldbarcode buldbarcode,
      String headguid,
      String lineguid,
      String matID,
      double bqty,
      String whID) {
    try {
      SerialnumInfo serialnumInfo = new SerialnumInfo();
      buldbarcode.setPcount(0);
      buldbarcode.setGuid(uuid);
      serialnumInfo = serialnumBusiness.getSerialnum(userInfo, JConstants.B);
      buldbarcode.setBatchno(PublicMethod.formatSerialnum(serialnumInfo)); // 后台生成
      buldbarcode.setBartype(bartype);
      saveBuldbarcode(userInfo, buldbarcode, serialnumInfo); // 保存标签

      String batchno = buldbarcode.getBatchno();
      SAOrderHead saorderHead = saorderBusiness.queryMSWMSAOrderHeadById(userInfo, headguid);
      /*转移联单:
      转移联单/经营协议(标签)入库时,需根据许可证信息进行校验:
      1.转移联单/经营协议子表中的八位码是否在有效许可证的范围内
      */
      BaseMatEntity baseMatEntity = baseMatBusiness.queryMSWMBaseMatById(userInfo, matID);
      if (JConstants.SA01.equals(bartype)) {
        SAOrderLine saorderLine = saorderBusiness.queryMSWMSAOrderLineById(userInfo, lineguid);
        LicenceWrapper licenceWrapper =
            baseLicBusiness.getValidLicenceByMat(
                userInfo, matID, saorderLine.getDealtypeID(), new Date());
        if (licenceWrapper == null) {
          throw new BusinessException(
              "经营协议子表中的"
                  + baseMatEntity.getMatcode()
                  + " "
                  + baseMatEntity.getMatname()
                  + "不在有效许可证的范围内!");
        }
        // 3.生成一笔入库单据,单据类型为 “INV13 转移入库”并更新库存结存表
        /* 库存单据主表start */
        InvtkHead invtkHead = new InvtkHead();
        String bustype = new String();
        if (JConstants.JAVAANDROID.equals(type)) {
          // 业务类型(经营协议入库(扫码))
          bustype = JConstants.INV13;
        } else if (JConstants.JAVAWEB.equals(type)) {
          // 业务类型(经营协议入库)
          bustype = JConstants.INV12;
        }
        // 关联单据号
        String relcode = saorderHead.getHetongcode();
        // 关联单据类型
        String reltype = JConstants.SA01;
        invtkHead.setBustype(bustype);
        invtkHead.setRelcode(relcode);
        invtkHead.setReltype(reltype);
        invtkHead.setTktype(JConstants.I);
        /* 库存单据主表end */
        /* 库存单据子表start */
        List<InvtkLine> invtkLines = new ArrayList<InvtkLine>();
        InvtkLine invtkLine = new InvtkLine();
        // 来源表guid
        invtkLine.setSguid(lineguid);
        invtkLine.setBustype(bustype);
        // 仓库
        invtkLine.setWhID(whID);
        // 物品id
        invtkLine.setMatID(matID);
        // 数量
        String bqty1 = String.valueOf(bqty);
        invtkLine.setQty(bqty1);
        // 单位
        invtkLine.setUnitID(saorderLine.getUnitID());
        invtkLine.setBatchno(batchno);
        // 关联单据号
        invtkLine.setRelcode(relcode);
        // 关联单据类型
        invtkLine.setReltype(reltype);
        // 联系单位id
        String cusID = saorderHead.getCusID();
        invtkLine.setCusID(cusID);
        /* 库存单据子表end */
        InvcurTune invcurTune = new InvcurTune();
        invcurTune.setIo(JConstants.I);
        //				invcurTune.setBusinessType(JConstants.INV13);
        invcurTune.setBusinessType(bustype);
        invtkLines.add(invtkLine);
        InvcurBusiness.changeInvcur(userInfo, invcurTune, invtkHead, invtkLines);
        // 1插入库存之后修改转移联单標籤表中:是否入库,入库日期,
        Buldbarcode buldbarcode12 = new Buldbarcode();
        buldbarcode12.setIsinv(JConstants.ONE);
        buldbarcode12.setGuid(buldbarcode.getGuid());
        buldbarcode12.setInvdate(PublicMethod.now());
        updateBuldbarcode(userInfo, buldbarcode12);
        // 经营协议入库后,更新许可证中的已接收数量

        //				Double counts13 = invtkLineBusiness.getSumQtyBySguidAndBusType(userInfo,
        //						lineguid, JConstants.INV13);
        Double counts13 = invtkLineBusiness.getSumQtyBySguidAndBusType(userInfo, lineguid, bustype);
        if (counts13 == null) {
          counts13 = 0.00;
        }
        saorderBusiness.updateRecqty(userInfo, lineguid, bqty);
        baseLicBusiness.updateRecQtyByMat(
            userInfo, matID, saorderLine.getDealtypeID(), bqty, new Date());
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new BusinessException(e.getMessage());
    }
  }
  /**
   * 添加(转移联单,经营协议,手动添加数据)收货标签
   *
   * @param type
   * @param uuid
   * @param bartype
   * @param userInfo
   * @param buldbarcode
   * @param headguid
   * @param lineguid
   * @param matID
   * @param bqty
   * @param whID
   */
  public void saveSWMBuldbarcode(
      String type,
      String uuid,
      String bartype,
      IFWUserInfo userInfo,
      Buldbarcode buldbarcode,
      String headguid,
      String lineguid,
      String matID,
      double bqty,
      String whID) {
    try {
      if (HConstants.JAVAWEB.equals(type)) {
        SerialnumInfo serialnumInfo = new SerialnumInfo();
        buldbarcode.setPcount(0);
        buldbarcode.setGuid(uuid);
        serialnumInfo = serialnumBusiness.getSerialnum(userInfo, HConstants.B);
        buldbarcode.setBatchno(PublicMethod.formatSerialnum(serialnumInfo)); // 后台生成
        buldbarcode.setBartype(bartype);
        saveBuldbarcode(userInfo, buldbarcode, serialnumInfo);
        if (HConstants.LD01.equals(bartype)) {
          buliandanlineBusiness.updateBuliandanlineISbarcode(userInfo, lineguid);
        }
      }
      String batchno = buldbarcode.getBatchno();
      Buliandanhead buliandanhead = buliandanheadBusiness.getBuliandanheadByID(userInfo, headguid);
      SAOrderHead saorderHead = saorderBusiness.queryMSWMSAOrderHeadById(userInfo, headguid);
      /*转移联单:
      转移联单/经营协议(标签)入库时,需根据许可证信息进行校验:
      1.转移联单/经营协议子表中的八位码是否在有效许可证的范围内
      */

      BaseMatEntity baseMatEntity = baseMatBusiness.queryMSWMBaseMatById(userInfo, matID);
      // 只有状态为LD01才做此操作
      if (HConstants.LD01.equals(bartype)) {
        Buliandanline buliandanline =
            buliandanlineBusiness.getBuliandanlineByID(userInfo, lineguid);
        LicenceWrapper licenceWrapper =
            baseLicBusiness.getValidLicenceByMat(
                userInfo, matID, buliandanline.getDealtypeID(), new Date());
        if (licenceWrapper == null) {
          throw new BusinessException(
              "转移联单子表中的"
                  + baseMatEntity.getMatcode()
                  + " "
                  + baseMatEntity.getMatname()
                  + "不在有效许可证的范围内!");
        }

        // 3.生成一笔入库单据,单据类型为 “INV09 转移入库”并更新库存结存表
        /* 库存单据主表start */
        InvtkHead invtkHead = new InvtkHead();
        // 业务类型
        String bustype = HConstants.INV09;
        // 关联单据号
        String relcode = buliandanhead.getLiandancode();
        // 关联单据类型
        String reltype = HConstants.LD01;
        invtkHead.setBustype(bustype);
        invtkHead.setRelcode(relcode);
        invtkHead.setReltype(reltype);
        invtkHead.setTktype(HConstants.I);
        /* 库存单据主表end */
        /* 库存单据子表start */
        List<InvtkLine> invtkLines = new ArrayList<InvtkLine>();
        InvtkLine invtkLine = new InvtkLine();
        // 来源表guid
        invtkLine.setSguid(lineguid);
        invtkLine.setBustype(bustype);
        // 仓库
        invtkLine.setWhID(whID);
        // 物品id
        invtkLine.setMatID(matID);
        // 数量
        String bqty1 = String.valueOf(bqty);
        invtkLine.setQty(bqty1);
        // 单位
        invtkLine.setUnitID(buliandanline.getUnitID());
        invtkLine.setBatchno(batchno);
        // 关联单据号
        invtkLine.setRelcode(relcode);
        // 关联单据类型
        invtkLine.setReltype(reltype);
        // 联系单位id
        String cusID = buliandanhead.getCusID();
        invtkLine.setCusID(cusID);
        /* 库存单据子表end */
        InvcurTune invcurTune = new InvcurTune();
        invcurTune.setIo(HConstants.I);
        invcurTune.setBusinessType(HConstants.INV09);
        invtkLines.add(invtkLine);
        InvcurBusiness.changeInvcur(userInfo, invcurTune, invtkHead, invtkLines);
        // 1插入库存之后修改转移联单標籤表中:是否入库,入库日期,
        Buldbarcode buldbarcode12 = new Buldbarcode();
        buldbarcode12.setIsinv(HConstants.ONE);
        buldbarcode12.setGuid(buldbarcode.getGuid());
        buldbarcode12.setInvdate(PublicMethod.now());
        updateBuldbarcode(userInfo, buldbarcode12);
        // 2通過聯單子表的guid查看聯單的簽收量,在原來的基礎上加加。。。。。。
        String buliandanlineguid = buliandanline.getGuid();
        Buliandanline buliandanline3 =
            buliandanlineBusiness.getBuliandanlineByID(userInfo, buliandanlineguid);
        double recqty = buliandanline3.getRecqty();
        Buliandanline buliandanline2 = new Buliandanline();
        buliandanline2.setRecqty(bqty + recqty);
        buliandanline2.setGuid(buliandanlineguid);
        // buliandanline2.setSaorderlineID(buliandanline.getSaorderlineID());
        buliandanlineBusiness.updateBuliandanline(userInfo, buliandanline2, null);
        // 通过查看(全部联单子表中的簽收量大於0時)修改主表中的状态(已入库)///////////
        Buliandanline chren = new Buliandanline();
        chren.setHeadguid(headguid);
        // 通過轉移聯單主表guid查看轉移聯單子表中的數量
        int countline = buliandanlineBusiness.buliandanlinecountByheadguid(userInfo, chren);
        // 通過轉移聯單主表guid查看全部轉移聯單子表循環取出簽收量,查看簽收量全部大於0的個數
        List<Buliandanline> linelist =
            buliandanlineBusiness.findBuliandanlineByHeadguid(userInfo, chren);
        int countsize = 0;
        for (int i = 0; i < linelist.size(); i++) {
          double countRecqty = linelist.get(i).getRecqty();
          if (countRecqty > 0) {
            countsize++;
          }
        }
        // 比較
        if (countline == countsize) {
          Buliandanhead head = new Buliandanhead();
          head.setGuid(headguid);
          // 已入库
          head.setLiandanstate(HConstants.REC);
          buliandanheadBusiness.updateBuliandanheadStatus(userInfo, head);
        }
        buliandanlineBusiness.updateBuliandanlineISbarcode(userInfo, lineguid);

        saorderBusiness.updateRecqty(
            userInfo,
            buliandanlineBusiness.getBuliandanlineByID(userInfo, lineguid).getSaorderlineID(),
            bqty);
        baseLicBusiness.updateRecQtyByMat(
            userInfo, matID, buliandanline3.getDealtypeID(), bqty, new Date());
      } else if (HConstants.SA01.equals(bartype)) {
        SAOrderLine saorderLine = saorderBusiness.queryMSWMSAOrderLineById(userInfo, lineguid);
        LicenceWrapper licenceWrapper =
            baseLicBusiness.getValidLicenceByMat(
                userInfo, matID, saorderLine.getDealtypeID(), new Date());
        if (licenceWrapper == null) {
          throw new BusinessException(
              "经营协议子表中的"
                  + baseMatEntity.getMatcode()
                  + " "
                  + baseMatEntity.getMatname()
                  + "不在有效许可证的范围内!");
        }

        // 3.生成一笔入库单据,单据类型为 “INV13 转移入库”并更新库存结存表
        /* 库存单据主表start */
        InvtkHead invtkHead = new InvtkHead();
        // 业务类型(经营协议入库(扫码))
        String bustype = HConstants.INV13;
        // 关联单据号
        String relcode = saorderHead.getHetongcode();
        // 关联单据类型
        String reltype = HConstants.SA01;
        invtkHead.setBustype(bustype);
        invtkHead.setRelcode(relcode);
        invtkHead.setReltype(reltype);
        invtkHead.setTktype(HConstants.I);
        /* 库存单据主表end */
        /* 库存单据子表start */
        List<InvtkLine> invtkLines = new ArrayList<InvtkLine>();
        InvtkLine invtkLine = new InvtkLine();
        // 来源表guid
        invtkLine.setSguid(lineguid);
        invtkLine.setBustype(bustype);
        // 仓库
        invtkLine.setWhID(whID);
        // 物品id
        invtkLine.setMatID(matID);
        // 数量
        String bqty1 = String.valueOf(bqty);
        invtkLine.setQty(bqty1);
        // 单位
        invtkLine.setUnitID(saorderLine.getUnitID());
        invtkLine.setBatchno(batchno);
        // 关联单据号
        invtkLine.setRelcode(relcode);
        // 关联单据类型
        invtkLine.setReltype(reltype);
        // 联系单位id
        String cusID = saorderHead.getCusID();
        invtkLine.setCusID(cusID);
        /* 库存单据子表end */
        InvcurTune invcurTune = new InvcurTune();
        invcurTune.setIo(HConstants.I);
        invcurTune.setBusinessType(HConstants.INV13);
        invtkLines.add(invtkLine);
        InvcurBusiness.changeInvcur(userInfo, invcurTune, invtkHead, invtkLines);
        // 1插入库存之后修改转移联单標籤表中:是否入库,入库日期,
        Buldbarcode buldbarcode12 = new Buldbarcode();
        buldbarcode12.setIsinv(HConstants.ONE);
        buldbarcode12.setGuid(buldbarcode.getGuid());
        buldbarcode12.setInvdate(PublicMethod.now());
        updateBuldbarcode(userInfo, buldbarcode12);
        // 经营协议入库后,更新许可证中的已接收数量

        Double counts13 =
            invtkLineBusiness.getSumQtyBySguidAndBusType(userInfo, lineguid, HConstants.INV13);
        if (counts13 == null) {
          counts13 = 0.00;
        }
        saorderBusiness.updateRecqty(userInfo, lineguid, bqty);
        baseLicBusiness.updateRecQtyByMat(
            userInfo, matID, saorderLine.getDealtypeID(), bqty, new Date());
      } else if (HConstants.OT00.equals(bartype)) {
        // 3.生成一笔入库单据,单据类型为 “INV14手工添加数据入库”
        /* 库存单据主表start */
        InvtkHead invtkHead = new InvtkHead();
        // 业务类型(手工添加数据)
        String bustype = HConstants.INV14;
        // 关联单据号
        String relcode = buldbarcode.getReltkcode();
        // 关联单据类型(手动添加数据)
        String reltype = HConstants.OT00;
        invtkHead.setBustype(bustype);
        invtkHead.setRelcode(relcode);
        invtkHead.setReltype(reltype);
        invtkHead.setTktype(HConstants.I);
        /* 库存单据主表end */
        /* 库存单据子表start */
        List<InvtkLine> invtkLines = new ArrayList<InvtkLine>();
        InvtkLine invtkLine = new InvtkLine();
        // 来源表guid
        invtkLine.setSguid(uuid);
        invtkLine.setBustype(bustype);
        // 仓库
        invtkLine.setWhID(whID);
        // 物品id
        invtkLine.setMatID(matID);
        // 数量
        String bqty1 = String.valueOf(bqty);
        invtkLine.setQty(bqty1);
        // 单位
        BaseMatEntity baseEmp = baseMatService.queryMSWMBaseMatById(userInfo, matID);
        invtkLine.setUnitID(baseEmp.getUnit());
        invtkLine.setBatchno(batchno);
        // 关联单据号
        invtkLine.setRelcode(relcode);
        // 关联单据类型
        invtkLine.setReltype(reltype);
        // 联系单位id
        // invtkLine.setCusID(buldbarcode.getBasecustomercusID());
        invtkLine.setCusID(buldbarcode.getReltkinfo());
        /* 库存单据子表end */
        InvcurTune invcurTune = new InvcurTune();
        invcurTune.setIo(HConstants.I);
        invcurTune.setBusinessType(HConstants.INV14);
        invtkLines.add(invtkLine);
        InvcurBusiness.changeInvcur(userInfo, invcurTune, invtkHead, invtkLines);
        // 1插入库存之后修改转移联单標籤表中:是否入库,入库日期,
        Buldbarcode buldbarcode12 = new Buldbarcode();
        buldbarcode12.setIsinv(HConstants.ONE);
        buldbarcode12.setGuid(buldbarcode.getGuid());
        buldbarcode12.setInvdate(PublicMethod.now());
        updateBuldbarcode(userInfo, buldbarcode12);
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw new BusinessException(e.getMessage());
    }
  }
 /** 批量修改转移联单收货标签-用于更新打印状态等值 Buldbarcode entity */
 @Override
 public int updateBuldbarcodes(IFWUserInfo userInfo, Buldbarcode buldbarcode) {
   buldbarcode.setModifydate(PublicMethod.now());
   // buldbarcode.setModifyempID(userInfo.getUserID());
   return buldbarcodeMapper.updateBuldbarcodes(buldbarcode);
 }